0

0

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

P粉084495128

P粉084495128

发布时间:2025-07-31 13:29:46

|

899人浏览过

|

来源于php中文网

原创

本文分享结合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来实现效果更好、效率更优的目标检测+距离测量。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

765

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

639

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

764

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

619

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1285

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

549

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

579

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

709

2023.08.11

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

0

2026.01.20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.5万人学习

Git 教程
Git 教程

共21课时 | 2.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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