realsense D455深度相机+YOLO V5结合实现目标检测(一)

这篇具有很好参考价值的文章主要介绍了realsense D455深度相机+YOLO V5结合实现目标检测(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

realsense D455深度相机+YOLO V5结合实现目标检测(二)第二篇链接

可以实现将D435,D455深度相机和yolo v5结合到一起,在识别物体的同时,还能测到物体相对与相机的距离。

说明一下为什么需要做这个事情?1.首先为什么需要用到realsense D455深度相机? 因为他是普通的相机还加了一个红外测距的东西,所以其他二维图像一样,能够得到三维世界在二维像素平面的投影,也就是图片,但是我们损失了一个深度的维度以后得到的都是投影的东西,比如说苹果可以和足球一样大,因为我们不知道深度也就是物体距离相机的距离信息,所以我们需要一个深度相机来实现测距离。2.为什么需要用到yolo算法?因为他在实时性和准确率方面都可以,可以应用于工农业生产当中,所以肯定很需要。所以才会有这二者的结合的必要性!

1.代码来源

首先感谢github上的yuanyuanyuan killnice大佬将自己的代码开源出来,这是我第一次用realsense深度相机去实现将其与目标检测的yolo v5 算法结合在一起,实现2.5维的检测吧。首先大家如果想用这个代码的话可以去这里git clone yuanyuanyuan killnice大佬的代码 (为了防止链接不过去还是再写在这里 https://github.com/killnice/yolov5-D435i.git)。

2.环境配置

首选clone下yuanyuanyuan killnice大佬的代码后,在命令行运行:

pip install -r requirements.txt
pip install pyrealsense2

然后cd到进入工程文件夹下执行:

python main_debug.py

第一次运行会自动下载yolov5l6.pt文件,大约140MB左右,如果由于网速原因不能自动下载,请手动在yolo v5的github上自己下载。运行结果如下:
realsense D455深度相机+YOLO V5结合实现目标检测(一)

3.代码分析:

3.1如何用realsense在python下面调用的问题:

这个的来源是从realsense的官方文档中来的 realsense的官方python文档,如果你对他的其他应用感兴趣可以去这里看一看。

import pyrealsense2 as rs
import numpy as np
import cv2

# Configure depth and color streams
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)

config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30)
config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)

# Start streaming
pipeline.start(config)

try:
    while True:

        # Wait for a coherent pair of frames: depth and color
        frames = pipeline.wait_for_frames()
        # 深度图
        depth_frame = frames.get_depth_frame()
        # 正常读取的视频流
        color_frame = frames.get_color_frame()
        if not depth_frame or not color_frame:
            continue

        # Convert images to numpy arrays
        depth_image = np.asanyarray(depth_frame.get_data())
        color_image = np.asanyarray(color_frame.get_data())
        # print(f"depth_image shape: {depth_image.shape} color_image shape: {color_image.shape}")
        print(f"depth_image value: {depth_image}")   # 里面0值很多,还有很多1900左右的值      300mm 单位是毫米=30厘米=0.3米
        # depth_image shape: (480, 640) color_image shape: (480, 640, 3)
        # 深度图是单通道  颜色图是三通道的

        # Apply colormap on depth image (image must be converted to 8-bit per pixel first)
        # 在深度图像上应用colormap(图像必须先转换为每像素8位)
        depth_colormap = cv2.applyColorMap(cv2.convertScaleAbs(depth_image, alpha=0.03), cv2.COLORMAP_JET)

        # Stack both images horizontally
        images = np.hstack((color_image, depth_colormap))

        # Show images
        cv2.namedWindow('RealSense', cv2.WINDOW_AUTOSIZE)
        cv2.imshow('RealSense', images)
        key = cv2.waitKey(1)
        if key & 0xFF == ord('q') or key == 27:
            cv2.destroyAllWindows()
            break

finally:

    # Stop streaming
    pipeline.stop()

这就是用python调用realsense D455深度相机的程序。

3.2 对main_debug.py文件的分析:

import pyrealsense2 as rs
import numpy as np
import cv2
import random
import torch
import time
#调用各种库
#从文件的构造中不难看出是用了下面的几个函数:分别是get_mid_pos(frame,box,depth_data,randnum),dectshow(org_img, boxs,depth_data),
#主函数。
# model = torch.hub.load('ultralytics/yolov5', 'yolov5s')
#
model = torch.hub.load('ultralytics/yolov5', 'yolov5l6')
model.conf = 0.5

def get_mid_pos(frame,box,depth_data,randnum):
#这个函数就是简单的从给出的图片、框、深度数据、可以选择的迭代次数
    distance_list = []
    mid_pos = [(box[0] + box[2])//2, (box[1] + box[3])//2] #确定索引深度的中心像素位置左上角和右下角相加在/2
    min_val = min(abs(box[2] - box[0]), abs(box[3] - box[1])) #确定深度搜索范围
    #print(box,)
    for i in range(randnum):
        bias = random.randint(-min_val//4, min_val//4)
        dist = depth_data[int(mid_pos[1] + bias), int(mid_pos[0] + bias)]
        cv2.circle(frame, (int(mid_pos[0] + bias), int(mid_pos[1] + bias)), 4, (255,0,0), -1)
        #print(int(mid_pos[1] + bias), int(mid_pos[0] + bias))
        if dist:
            distance_list.append(dist)
    distance_list = np.array(distance_list)
    distance_list = np.sort(distance_list)[randnum//2-randnum//4:randnum//2+randnum//4] #冒泡排序+中值滤波
    #print(distance_list, np.mean(distance_list))
    return np.mean(distance_list)
def dectshow(org_img, boxs,depth_data):
#在原图像上画框和深度信息写在图像上
    img = org_img.copy()
    for box in boxs:
        cv2.rectangle(img, (int(box[0]), int(box[1])), (int(box[2]), int(box[3])), (0, 255, 0), 2)
        dist = get_mid_pos(org_img, box, depth_data, 24)
        cv2.putText(img, box[-1] + str(dist / 1000)[:4] + 'm',
                    (int(box[0]), int(box[1])), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2)
    cv2.imshow('dec_img', img)

if __name__ == "__main__":
    # Configure depth and color streams
#这是主要是将上面1中提到的realsense在python中的调用。
    pipeline = rs.pipeline()
    config = rs.config()
    config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 60)
    config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 60)
    # Start streaming
    pipeline.start(config)
    try:
        while True:
            # Wait for a coherent pair of frames: depth and color
            frames = pipeline.wait_for_frames()
            depth_frame = frames.get_depth_frame()
            color_frame = frames.get_color_frame()
            if not depth_frame or not color_frame:
                continue
            # Convert images to numpy arrays

            depth_image = np.asanyarray(depth_frame.get_data())

            color_image = np.asanyarray(color_frame.get_data())

            results = model(color_image)
            boxs= results.pandas().xyxy[0].values
            #boxs = np.load('temp.npy',allow_pickle=True)
            dectshow(color_image, boxs, depth_image)

            # Apply colormap on depth image (image must be converted to 8-bit per pixel first)
            depth_colormap = cv2.applyColorMap(cv2.convertScaleAbs(depth_image, alpha=0.03), cv2.COLORMAP_JET)
            # Stack both images horizontally
            images = np.hstack((color_image, depth_colormap))
            # Show images
            cv2.namedWindow('RealSense', cv2.WINDOW_AUTOSIZE)
            cv2.imshow('RealSense', images)
            key = cv2.waitKey(1)
            # Press esc or 'q' to close the image window
            if key & 0xFF == ord('q') or key == 27:
                cv2.destroyAllWindows()
                break
    finally:
        # Stop streaming
        pipeline.stop()

4. 结束语

从以前在csdn上查找到自己写这是第一次,觉得这是一种进步,希望能够帮助到别人也感谢yuanyuanyuan killnice大佬,还有yolo v5的作者,反正就是感谢开源吧对我感兴趣的童鞋可以关注我,说不定那一天就可以帮到您文章来源地址https://www.toymoban.com/news/detail-456913.html

到了这里,关于realsense D455深度相机+YOLO V5结合实现目标检测(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 项目设计:YOLOv5目标检测+机构光相机(intel d455和d435i)测距

    1.1  Intel D455 Intel D455 是一款基于结构光(Structured Light)技术的深度相机。 与ToF相机不同,结构光相机使用另一种方法来获取物体的深度信息。它通过投射可视光谱中的红外结构光图案,然后从被拍摄物体表面反射回来的图案重建出其三维形状和深度信息。 Intel D455 深度相机

    2024年02月08日
    浏览(27)
  • Intel RealSense D455(D400系列) Linux-ROS 安装配置(亲测可用)

    硬件:Intel RealSense D455 系统:Ubuntu 18.04  或者 这里\\\"catkin_ws\\\"可以改成自己想要的空间名。 可能遇到的问题1: 在catkin_make clean如果报错提示没有ddynamic_reconfigure,执行(注意自己的 ROS版本 ,修改“melodic”成\\\"kinect\\\"或\\\"neotic\\\"): 可能遇到的问题2:  错误提示说明你缺少Intel RealSe

    2024年02月15日
    浏览(20)
  • ubuntu18.04安装Realsense D435i相机SDK及realsense-ros记录,为后期运行yolo v5作准备

    写在前面 :一定要注意各个版本之间的匹配问题,否则会报各种错误。 例如ROS版本和librealsense SDK版本之间的对应关系,以及realsense-ros(Wrapper)与librealsense SDK之间的对应关系 。 系统:ubuntu18.04 ros: melodic 附上Intel® RealSense github网站: https://github.com/IntelRealSense 以及安装教程

    2024年02月05日
    浏览(32)
  • 基于YOLOv8和RealsenseD455相机实现物体距离检测

    目录 前言 一、Yolov8环境搭建 二、配置RealSense-ros功能包 1.安装ROS-humble 2.安装Intel RealSense SDK 2.0 ​编辑 3.克隆ROS功能包 三、物体距离检测代码实现 1.算法流程: 2.代码示例: 3.效果展示: 要基于YOLOv8和RealsenseD455相机实现物体距离检测,可以按照以下步骤进行操作: 准备环境

    2024年01月17日
    浏览(21)
  • darknet_ros+yolo+realsenseD455+Ubuntu18.04+ROS

    很想实现ros和yolo的联合使用,所以找到了darknet_ros这个包,我感觉难点不在于工程,而在于yolo的环境配置。本文将从环境入手逐步实现功能。 相机:realsenseD455 笔记本:T440P 显卡:GT-730M 算力:3.0 直接安装推荐版本就行,安装完需要重启,命令直接如下(如果使用nvidia-smi可

    2023年04月22日
    浏览(38)
  • YOLO v5 实现目标检测

    本文用于学习记录 YOLO v5 实现目标检测 安装完成以后,按下开始键( win 键)出现 anaconda3 这个文件夹,说明 anaconda 已经安装好了 点击左下图中标红的图标,就可打开 anaconda 的终端如右下图: 输入 conda create -n pytorch1 python=3.9,在 base 环境中这条命令,就会创建一个新的虚拟

    2024年01月16日
    浏览(21)
  • Intel RealSense D435i深度相机通过点云获取图片中任意点三维信息(python实现)

    此时效果(左侧RGB图,右侧深度图)(过近时深度信息几乎显示不出来)  按下p键暂停画面 按下s键保存图片 按下r键读取刚才保存的图片,并通过image_sliced文件将图片裁剪到自己需要的范围 image_sliced.py 按下g键进行图像处理,判断方向,并将三维信息显示在图片上 image_pro

    2023年04月08日
    浏览(28)
  • Realsence D455标定并运行Vins-Fusion

    1. 标定板准备 1.1 打印标定板 地址:https://github.com/ethz-asl/kalibr/wiki/downloads 下载,然后直接用A4纸就可以打印出来(有条件去淘宝买一个视觉标定板,标出来的误差会更小) 1.2 标定板信息 原始pdf的格子参数是: 调整后的格子参数是: 新建april_6x6_A4.yaml文件,内容展示如下:

    2024年02月08日
    浏览(21)
  • 改进 YOLO V5 的密集行人检测算法研究(论文研读)——目标检测

    针对在人员密集区或相互拥挤场景下进行的行人目标检测时,因行人遮挡或人像交叠所导致的跟踪目标丢失、检测识别率低的问题,提出了一种融合注意力机制的改进 YOLO V5 算法。 通过引入注意力机制来深入挖掘特征通道间关系和特征图空间信息,进一步增强了对行人目标可

    2024年02月01日
    浏览(23)
  • 改进YOLO系列:YOLOv5结合转置卷积,实现小目标涨点

    该函数是用来进行转置卷积的,它主要做了这几件事:首先,对输入的feature map进行padding操作,得到新的feature map;然后,随机初始化一定尺寸的卷积核;最后,用随机初始化的一定尺寸的卷积核在新的feature map上进行卷积操作。 补充一下,卷积核确实是随机初始的,但是后

    2023年04月09日
    浏览(21)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包