RealSense:简单实现对特定目标的深度测量

P粉084495128
发布: 2025-07-31 13:29:46
原创
869人浏览过
标书对比王
标书对比王

标书对比王是一款标书查重工具,支持多份投标文件两两相互比对,重复内容高亮标记,可快速定位重复内容原文所在位置,并可导出比对报告。

标书对比王58
查看详情 标书对比王
本文分享结合RealSense深感摄像头与PaddleHub实现目标检测和深度测量的方法。先介绍RealSense的特性及Python调用方式,再说明基于PaddleHub用普通摄像头部署目标检测模型的过程,最后展示整合两者的代码及效果,还提及未来可能分享在其他平台的实现。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

realsense:简单实现对特定目标的深度测量 - php中文网

引入

  • 最近拿到了一个RealSense深感摄像头
  • 本来是想拿来单纯的做一个普通的目标检测的摄像头的
  • 然后发现RealSense的深感传感器还不错,好像能用来做深度测量
  • 于是就试着做一下能不能同时进行检测和距离测量
  • 本次项目就分享一下如何结合PaddleHub和RealSense来进行简单的目标检测和深度测量

效果展示

RealSense:简单实现对特定目标的深度测量 - php中文网        

RealSense

  • 俗话说:知己知彼,百战不殆。开始之前先例行的了解一下RealSense是啥?
  • RealSense是Intel公司出品的一款深感摄像头
  • 顾名思义,它是一款能够感知深度的摄像头,除了能够正常的捕捉RGB图像外,还能额外的获取画面中的深度信息
  • 获取到的图像如下图所示:

RealSense:简单实现对特定目标的深度测量 - php中文网        

快速使用

  • 使用RealSense需要用到其专用的SDK:下载地址
  • 在Windows平台安装SDK之后就可以通过RealSense VIewer这个软件快速使用这个摄像头了(就像上面的图片所示的那样)

Python调用

  • 当然RealSense也支持使用Python直接调用
  • 使用这个方式就能快速的和PaddleDetection的部署代码进行联动
  • 简单实现对特定目标进行检测并测量其距离摄像头的距离
  • 先通过一个官方的Demo来看一下如何进行调用
# 安装pyrealsense2库$ pip install pyrealsense2
登录后复制
       
# 导入必要的库import pyrealsense2 as rsimport numpy as npimport cv2# 配置视频流参数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)try:    while True:        # 等待帧读取
        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

        # 转换为Ndarray
        depth_image = np.asanyarray(depth_frame.get_data())
        color_image = np.asanyarray(color_frame.get_data())        # 对深度图进行着色
        depth_colormap = cv2.applyColorMap(cv2.convertScaleAbs(depth_image, alpha=0.03), cv2.COLORMAP_JET)        # 拼接彩色图和深度图
        images = np.hstack((color_image, depth_colormap))        # 显示画面
        cv2.namedWindow('RealSense', cv2.WINDOW_AUTOSIZE)
        cv2.imshow('RealSense', images)
        cv2.waitKey(1)finally:    # 结束视频流
    pipeline.stop()
登录后复制
       
  • 可以看到调用这个摄像头其实还是很简单的
  • 大致的效果如下图:

RealSense:简单实现对特定目标的深度测量 - php中文网        

基于PaddleHub目标检测部署

  • 先通过一个最简单的例子,使用PaddleHub中的预训练目标检测模型搭配普通摄像头来完成模型部署
# 导入必要的库import cv2import paddlehub as hub# 加载目标检测模型model = hub.Module(name="ssd_mobilenet_v1_pascal")# 启动视频流cap = cv2.VideoCapture(0)while True:    # 读取视频帧
    success, frame = cap.read()    # 进行目标检测,获取检测结果
    results = model.object_detection(
        images=[frame],
        visualization=False
        )[0]['data']    
    # 遍历检测结果,绘制预测框、类别标签和置信度
    for result in results:
        cv2.rectangle(
            frame, 
            (int(result['left']), int(result['top'])), 
            (int(result['right']), int(result['bottom'])), 
            [255, 0, 0], 2)
        cv2.putText(
            frame, 
            '%s %.02f' % (result['label'], result['confidence']*100), 
            (int(result['left']), int(result['top'])), 
            cv2.FONT_HERSHEY_SIMPLEX, 
            1.2, (255, 255, 255), 2)    # 显示画面
    cv2.imshow('Object Detection', frame)    # 等待键盘响应
    key = cv2.waitKey(1)    # 如果按下Esc键,退出程序
    if key == 27:        break# 释放视频流cap.release()
登录后复制
       
  • 效果大致就像下图那样:

RealSense:简单实现对特定目标的深度测量 - php中文网        

基于PaddleHub Demo加入深度检测

  • 换上RealSense并加入后处理代码就可以快速实现了,具体代码如下:
# 导入必要的库import paddlehub as hub
import pyrealsense2 as rs
import numpy as np
import cv2#配置视频流参数align_to = rs.stream.color
pipeline = rs.pipeline()
config = rs.config()
alignedFs = rs.align(align_to)
config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30)
config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)# 加载目标检测模型model = hub.Module(name="ssd_mobilenet_v1_pascal")# 启动视频流pipeline.start(config)while True:    # 读取视频帧
    frames = pipeline.wait_for_frames()
    frames = alignedFs.process(frames) 
    depth_frame = frames.get_depth_frame()
    color_frame = frames.get_color_frame()    # 转换为Ndarray
    depth_image = np.asanyarray(depth_frame.get_data())
    color_image = np.asanyarray(color_frame.get_data())
    depth_colormap = cv2.applyColorMap(cv2.convertScaleAbs(depth_image, alpha=0.03), cv2.COLORMAP_JET)    # 进行目标检测,获取检测结果
    results = model.object_detection(
        images=[color_image],
        visualization=False
        )[0]['data']    
    # 遍历检测结果,绘制预测框、类别标签和置信度
    for result in results:        # 计算中心点
        c_x, c_y = int(result['left'] + (result['right'] - result['left']) / 2), int(result['top'] + (result['bottom'] - result['top']) / 2)        # 取中心周围的25个点
        depths = depth_image[min(0, c_y-2):c_y+3, min(0, c_x-2):c_x+3]        # 去除0求平均得到距离
        depth = np.sum(depths)/np.sum(depths!=0)        
        # 预测框、距离、标签和置信度绘制
        cv2.rectangle(
            color_image, 
            (int(result['left']), int(result['top'])), 
            (int(result['right']), int(result['bottom'])), 
            [255, 0, 0], 2)
        cv2.putText(
            color_image, 
            '%s %.02f %.02fm' % (result['label'], result['confidence']*100, depth/1000), 
            (int(result['left']), int(result['top'])), 
            cv2.FONT_HERSHEY_SIMPLEX, 
            1.2, (255, 255, 255), 2)
        cv2.rectangle(
            depth_colormap, 
            (int(result['left']), int(result['top'])), 
            (int(result['right']), int(result['bottom'])), 
            [255, 0, 0], 2)
        cv2.putText(
            depth_colormap, 
            '%s %.02f %.02fm' % (result['label'], result['confidence']*100, depth/1000), 
            (int(result['left']), int(result['top'])), 
            cv2.FONT_HERSHEY_SIMPLEX, 
            1.2, (255, 255, 255), 2)    # 拼接画面
    images = np.hstack((color_image, depth_colormap))    
    # 显示画面
    cv2.imshow('Object Detection', images)    # 等待键盘响应
    key = cv2.waitKey(1)    # 如果按下Esc键,退出程序
    if key == 27:
        break# 释放视频流pipeline.stop()
登录后复制
       
  • 大致效果展示:

RealSense:简单实现对特定目标的深度测量 - php中文网        

总结

  • 这样就简单实现了所需要的目标检测+距离测量的功能
  • 当然不只是PaddleHub,使用PaddleDetection也可以实现这样的功能,而且效率更高
  • 未来可能会再分享一下如何在Nvidia Jetson/Linux/C++平台上结合PaddleDetection来实现效果更好、效率更优的目标检测+距离测量。

以上就是RealSense:简单实现对特定目标的深度测量的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号