基于intelrealsense下深度摄像头linux下通过conda安装深度学习环境配置,同时通过yolov8识别物体(我用的是d435i)

目录

介绍

遇到的困难和自己的解决方式

 文件传输

conda下载和创建python环境

进行安装和环境配置

conda下 创建环境python

 下载pycharm,让pycharm使用conda环境

 官网地址

 更改pycharm的编译环境

 创建桌面图标

 安装基本配置环境

 使用和测试

代码


介绍

最开始的目的是啥呢:我想在我的ubuntu20.04下安装conda,然后通过coda先创建python3.8环境,在该环境下安装intel RealSense d435i驱动,给python安装上librealsense2环境,让他可以使用深度相机d435i三个摄像头,最好顺带把opencv装了,这样可以测试是否安装好了,然后再在改conda的环境下装入pytorch,同时也在改环境下装入yolov8,同时测试能否正常使用yolov8提供的检测模型

遇到的困难和自己的解决方式

我的要求比较多,然后第一次是直接装的心态炸了,后买又静下心来取看他们的官网:https://www.intelrealsense.com/sdk-2/ 

他这这里有个documention,就是文档,你可以翻译成中文,打开linux下你可以看到他对ubuntu的要求,但是这不是我想要的,我想要的是python环境下的

往下滑,找到python,进入安装环境

打开python安装,有意思的出来了,他给了两种方式,一种通过pip安装,一种是源码构建,我之前用的ubuntu22.04想源码构建,然后可以使用它提供的官方软件,可是代码里面一直用不了,后面我发现原来conda下也能用pip

 文件传输

如果ubuntu是在自己电脑下的,可以启动共享文件夹,先右键1,会出来设置,进入设置按照步骤添加共享文件夹,启动ubuntu后,

输入指令启动共享文件夹:sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other

有可能需要 sudo mkdir -p /mnt/htfgs

另外一种方式,ubuntu不是你电脑上的,但你需要先保证它已经连上网了,同时电脑要和他处于同一个网络下,通过ifconfig查看ubuntu下的ip,通过FileZilla进行传输,记得端口为22,点击快速连接后,通过拖动可以实现文件传输

conda下载和创建python环境

https://www.anaconda.com/download

进入官网后,直接点skip可以看到下载的界面,下载成功后会有一个.sh文件,通过你的方法传输到ubuntu里面去,或者直接通过ubuntu下浏览器打开下载地址下,或者通过上面的方法进行文件传输

进行安装和环境配置

sh + 安装包名字

在2出按entry,3出有个More,直接q可以退出,后面4输入yes,再后面5点击entry,后面还有个6,问你是否需要初始化,我一般选no,然后再去配置bashrc文件,如果选yes,就不需要配置了,只需要重新打开一个终端,会有base,后面直接输入下面创建包的指令就行了

 如果5后面选择yes,则不用进行这步操作,注意第二句放到文件末尾,后面保存就行,第四句是启动conda环境,选择了yes直接新建终端就有了,如果vi使用上下,出现A,B,之类,可以用下面的指令(

sudo apt-get update
sudo apt-get remove vim-common
sudo apt-get install vim

sudo vi ~/.bashrc
export PATH=~/anaconda3/bin:$PATH 
source ~/.bashrc
source activate

conda下 创建环境python

第一句是格式,第二句是创建包,选择python3.8环境,因为yolov8最低要求要python3.8以上,现在yolo5去官网下的好像也要python3.8以上了,第三句是进入环境,注意进入环境要做base的基础上

conda create -n your_env_name python=X.X 
conda create -n yolo python=3.8
conda activate yolo

 下载pycharm,让pycharm使用conda环境

 官网地址

https://www.jetbrains.com/pycharm/download/?section=linux#section=linux 

 滑动到最下面,选择免费的社区版,下载.tar.gz(linux),下载好后,解压,将文件复制,然后sh运行,注意文件名字,名字可能因为官方更新不一样,注意改动,第一次启动这个sh,会弹出界面,先接受,后面选择don't send,后面在主界面选择open,选择一个自己想存代码的文件夹,然后trust

sudo mkdir /opt/pycharm
tar -xzvf pycharm-community-2024.2.1.tar.gz
sudo mv pycharm-community-2024.2.1 /opt/pycharm/
cd /opt/pycharm/
sh pycharm-community-2024.2.1/bin/pycharm.sh 

 更改pycharm的编译环境

 点击确定后,可以看到右下角环境名字改变

 创建桌面图标

不创建的话,每次只能去原文件通过sh启动

 安装基本配置环境

记住需要在conda中的yolo环境中安装,就是你创建的python环境

先安装深度摄像头驱动

pip install pyrealsense2

 再安装opecv

conda install -c conda-forge opencv

然后安装pytorch,这个可以去官网选择,我的ubuntu没有GPU,所以就直接选择了cpu的,官网地址如下,如果你想旋转GPU,需要去确定自己的指令,你的指令和我我这个指令肯定是不一样的

PyTorch

conda install pytorch torchvision torchaudio cpuonly -c pytorch

然后安装yolov8,这是官网地址:https://github.com/ultralytics/ultralytics

 下载的话,可以通过git,或者直接下载:git clone https://github.com/ultralytics/ultralytics,然后就是安装他,先安装基础环境,注意在conda环境中

pip install -U pip setuptools wheel
pip install numpy opencv-python pillow matplotlib pyyaml tqdm
pip install scipy

然后安装下载好的包,名字git下在和直接下载估计名字不一样

cd ultralytics-main/
pip install -e .

 使用和测试

 首先需要去下载yolov8x.pt,越下面的精度越高,但算法越高,耗时越高,我就直接用yolov8n.pt,我把我的代码也给出来,把这个和文件你的代码放同一个文件就可以直接用了,下载方法可以参考别人这个博客:下载yolov8权重文件(.pt)文件_yolov8s.pt下载-CSDN博客

代码

这个前这段注释是测试摄像头能否使用,只是单纯的拍摄功能,为啥给出这个呢,因为有时候直接用下面的深度识别,供电供不上,我就想用这个试下有没有问题,后面在重新插拔,来启动深度识别,注意usb需要选择usb3.0以上,我的是usb3.1

# import pyrealsense2 as rs
# import numpy as np
# import cv2
#
# # 配置RealSense管道
# pipeline = rs.pipeline()
# config = rs.config()
#
# # 启用颜色流(RGB)
# config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)
#
# # 启动管道
# pipeline.start(config)
#
# try:
#     while True:
#         # 获取摄像头帧
#         frames = pipeline.wait_for_frames()
#         color_frame = frames.get_color_frame()
#
#         if not color_frame:
#             continue
#
#         # 转换为NumPy数组
#         color_image = np.asanyarray(color_frame.get_data())
#
#         # 使用OpenCV显示图像
#         cv2.imshow('RealSense RGB', color_image)
#
#         # 按下 'q' 键退出
#         if cv2.waitKey(1) & 0xFF == ord('q'):
#             break
#
# finally:
#     # 停止管道
#     pipeline.stop()
#
# # 释放 OpenCV 窗口
# cv2.destroyAllWindows()



import cv2
from ultralytics import YOLO
import pyrealsense2 as rs
import numpy as np

# 初始化 YOLOv8 模型
model = YOLO('yolov8n.pt')

# 配置 RealSense D435i 摄像头
pipeline = rs.pipeline()
config = rs.config()
config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30)
config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)

# 开始视频流
pipeline.start(config)

# 获取相机的深度传感器
align_to = rs.stream.color
align = rs.align(align_to)

try:
    while True:
        # 从摄像头获取帧
        frames = pipeline.wait_for_frames()
        aligned_frames = align.process(frames)  # 对齐深度图到彩色图

        depth_frame = aligned_frames.get_depth_frame()
        color_frame = aligned_frames.get_color_frame()

        if not depth_frame or not color_frame:
            continue

        # 将帧转换为 NumPy 数组格式
        color_image = np.asanyarray(color_frame.get_data())
        depth_image = np.asanyarray(depth_frame.get_data())

        # 使用 YOLOv8 模型进行推理
        results = model.predict(source=color_image, show=False)

        # 获取检测到的每个物体的边界框坐标、置信度和类别
        for result in results:
            boxes = result.boxes  # 获取边界框列表

            for box in boxes:
                # 获取坐标、类别和置信度
                x1, y1, x2, y2 = map(int, box.xyxy[0])  # 边界框的左上角 (x1, y1) 和右下角 (x2, y2)
                conf = box.conf[0]  # 置信度
                cls = int(box.cls[0])  # 类别索引
                label = model.names[cls]  # 类别名称

                # 计算目标的中心点
                cx = (x1 + x2) // 2
                cy = (y1 + y2) // 2

                # 获取中心点的深度值
                depth = depth_frame.get_distance(cx, cy)

                # 将像素坐标和深度转换为相机坐标系中的3D坐标
                depth_intrin = depth_frame.profile.as_video_stream_profile().intrinsics  # 获取相机内参
                point = rs.rs2_deproject_pixel_to_point(depth_intrin, [cx, cy], depth)  # 获取3D坐标

                # 打印物体的空间坐标(3D坐标)
                print(f"物体: {label}, 置信度: {conf:.2f}, 2D中心坐标: ({cx}, {cy}), 3D空间坐标: {point}")

                # 在图像上绘制边界框和标签
                cv2.rectangle(color_image, (x1, y1), (x2, y2), (0, 255, 0), 2)
                cv2.putText(color_image, f'{label} {conf:.2f}', (x1, y1 - 10),
                            cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)

        # 显示推理后的图像
        cv2.imshow('YOLOv8 Real-Time Detection with Depth', color_image)

        # 按键 'q' 退出循环
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

finally:
    # 停止视频流
    pipeline.stop()
    cv2.destroyAllWindows()

效果:下面输出的是他的坐标,只不过是单纯的一个物体坐标

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值