Realsense D435i Yolov5目标检测实时获得目标三维位置信息

news/2024/7/9 23:53:40 标签: 目标检测, 计算机视觉, 深度学习

文章目录

  • 一、效果演示
  • 二、环境配置
  • 三、模型配置
  • 四、相机配置
  • 五、部分代码:
  • 六、仓库链接:


一、效果演示

- Colorimage:

colorimage

- Colorimage and depthimage:

color depth image


二、环境配置

1.一个可以运行YOLOv5的python环境

pip install -r requirements.txt

2.一个realsense相机和pyrealsense2库

pip install pyrealsense2

在下面两个环境中测试成功

  • win10 python 3.8 Pytorch 1.10.2+gpu CUDA 11.3 NVIDIA GeForce MX150

  • ubuntu16.04 python 3.6 Pytorch 1.7.1+cpu

三、模型配置

修改模型配置文件,以yolov5s为例。
如果使用自己训练的模型,需要进行相应的修改。

weight:  "weights/yolov5s.pt"
# 输入图像的尺寸
input_size: 640
# 类别个数
class_num:  80
# 标签名称
class_name: [ 'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light',
         'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow',
         'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee',
         'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard',
         'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple',
         'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch',
         'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone',
         'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear',
         'hair drier', 'toothbrush' ]
# 阈值设置
threshold:
  iou: 0.45
  confidence: 0.6
# 计算设备
# - cpu
# - 0 <- 使用GPU
device: '0'

四、相机配置

分辨率好像只能改特定的参数,不然会报错。d435i可以用 1280x720, 640x480, 848x480。

pipeline = rs.pipeline()  # 定义流程pipeline
config = rs.config()  # 定义配置config
config.enable_stream(rs.stream.depth, 1280, 720, rs.format.z16, 30)
config.enable_stream(rs.stream.color, 1280, 720, rs.format.bgr8, 30)
profile = pipeline.start(config)  # 流程开始

五、部分代码:

下方代码实现从像素坐标系到相机坐标系转换,并且标注中心点以及三维坐标信息。

for i in range(len(xyxy_list)):
    ux = int((xyxy_list[i][0]+xyxy_list[i][2])/2)  # 计算像素坐标系的x
    uy = int((xyxy_list[i][1]+xyxy_list[i][3])/2)  # 计算像素坐标系的y
    dis = aligned_depth_frame.get_distance(ux, uy)  
    camera_xyz = rs.rs2_deproject_pixel_to_point(
    depth_intrin, (ux, uy), dis)  # 计算相机坐标系xyz
    camera_xyz = np.round(np.array(camera_xyz), 3)  # 转成3位小数
    camera_xyz = camera_xyz.tolist()
    cv2.circle(canvas, (ux,uy), 4, (255, 255, 255), 5)#标出中心点
    cv2.putText(canvas, str(camera_xyz), (ux+20, uy+10), 0, 1,
                                [225, 255, 255], thickness=2, lineType=cv2.LINE_AA)#标出坐标
    camera_xyz_list.append(camera_xyz)
    #print(camera_xyz_list)

六、仓库链接:

代码已上传github:yolov5_d435i_detection


http://www.niftyadmin.cn/n/1257343.html

相关文章

datatable中某一列最小值_寻找[整个数组]amp;[每行/列]amp;[某一行/列]amp;[某一行/列部分元素] 的最大/最小元素及其索引...

1 寻找整个数组的最大/最小元素及其索引import numpy as npa np.array([[1, 2, 3, 7, 9],[10, 11, 18, 13, 12],[8, 9, 7, 3, 18]]) print(np.max(a)) # 寻找a数组的最大元素(18)# 寻找方式&#xff1a;横向扫描&#xff0c;第一行扫描结束后扫描第二行&…

keypoints = detector.detect(im) cv2.error: Unknown C++ exception from OpenCV code 解决方法

问题描述&#xff1a; Opencv Blob Detection 中的python调用片段 # Standard imports import cv2 import numpy as np;# Read image im cv2.imread("blob.jpg", cv2.IMREAD_GRAYSCALE)# Set up the detector with default parameters. detector cv2.SimpleBlobD…

maven添加子工程_maven创建子项目(适用于多模块管理项目)

在eclipse或者myeclipse下构建maven项目&#xff0c;该项目由多个子模块组成。1.创建一个父项目NEW -->project-->maven-->maven Project&#xff0c;点击下一步&#xff0c;进入new maven Project的Select project name and location界面&#xff0c;什么也不做&…

python获取文件大小函数_大文件读取的实现-PYTHON

当前一个大文件大小&#xff0c;比当前的机器的内存大&#xff0c;先读取某个文件里的一部分。 文件遍历 因为文件保存了很多字符和行&#xff0c;因此也是循环常见的典型使用案例&#xff0c;最原始的方法可以调用文件对象的read方法&#xff0c;把文件内容一次性加载至字符串…

error: ‘phase_unwrapping’ in namespace ‘cv’ does not name a type typedef cv::phase_unwrapping解决办法

项目场景&#xff1a; 参考Ubuntu16.04安装配置opencv3.4.3opencv_contrib3.4.3进行opencv-contrib编译。 本人环境&#xff1a;ubuntu16.04opencv3.4.17opencv-contrib3.4.17。 问题描述&#xff1a; 按照博客一步步走&#xff0c;在make的99%出现如下error&#xff1a; e…

彩灯8个循环梯形图_8个动作,促进血液循环,缓解酸痛!拿去不谢!

如果你还没关注我&#xff0c;请点击上面日期右边创造未来→就可关注我&#xff01;再点击关注。我们每天将会与您免费分享世界上最精华的资讯&#xff01;这8个拉伸动作&#xff0c;能够促进全身血液循环&#xff0c;缓解身体的酸痛。拉伸的重点不在于时长&#xff0c;而在于质…

antv图表 根据屏幕大小响应式_地理可视化就这么简单、酷炫,蚂蚁金服AntV 空间数据可视化引擎 L72.0发布...

导读L7 是由蚂蚁金服 AntV 数据可视化团队推出的基于 WebGL 的开源大规模地理空间数据可视分析开发框架。L7 中的 L 代表 Location&#xff0c;7 代表世界七大洲&#xff0c;寓意能为全球位置数据提供可视分析的能力。L7 以图形符号学为理论基础&#xff0c;将抽象复杂的空间数…

python循环跳过一个值_python怎么实现循环

python中循环主要有for循环和while循环。 while循环 如果条件成立&#xff08;true&#xff09;&#xff0c;重复执行相同操作&#xff0c;条件不符合&#xff0c;跳出循环while 循环条件: 循环操作 while循环示例&#xff1a;输入王晓明5门课程的考试成绩&#xff0c;计算平均…