你觉得这篇文章怎么样? 帮助我们为您提供更好的内容。
Thank you! Your feedback has been received.
There was a problem submitting your feedback, please try again later.
你觉得这篇文章怎么样?
作者 |
徐丰智 |
难度 |
简单 |
材料表 |
1. NVIDIA Jestson Nano Developer Kit 2. 64GB SD卡 |
本次分享Intel 推出的深度摄影机RealSense D435相关信息与应用,D435拥有左右双镜头,搭配IR Sensor,可以使用点云的方式描绘摄影机前物体的3D坐标数据,显示3D扫描的效果。我们将以嵌入式开发板NVIDIA Jetson Nano为例,分享安装步骤与教学。
注意:
如果您是第一次使用NVIDIA Jetson Nano,建议先参考[第一次用Jetson Nano 就上手]硬件介绍、开机步骤、远程联机,安装操作系统。
本文将分成三个部分说明
- 在Jetson Nano安装RealSense套件
- 执行RealSense-Viewer
- 执行Python范例
在Jetson Nano上安装RealSense 套件
本安装流程套件参考JetsonHacks分享的Github资源,推荐给正在研究与使用NVIDIA JetsonNano的开发者。
安装时间约30~60分钟
Step1 安装Swapfile提高JetsonNano记忆容量
目标:解决Jetson Nano内存压力的问题,可以使用在USB的随身碟或SSD上,预设扩充的内存为6GB。
下载Github资料:
git clone https://github.com/jetsonhacksnano/installSwapfile
安装Swapfile
cd installSwapfile
./installSwapfile.sh
安装成功后重新启动
sudo reboot
请注意:在NVIDIA Jetson更新的L4T/JetPack套件中,也有预设分配swap的方法,是使用zram来实行。此方法依然可以使用,目前Github作者测试的版本为L4T 32.1.0 (JetPack 4.2),我测试在L4T 32.3.1 (JetPack 4.3)也可以正常使用。
检查版本可以用这个方法
下载jetsonUtilities
git clone https://github.com/jetsonhacks/jetsonUtilities
执行jetsonInfo.py
cd ./jetsonUtilities/
python jetsonInfo.py
Step2 安装RealSense SDK
下载SDK
git clone https://github.com/jetsonhacksnano/installLibrealsense
这个SDK是以Intel RealSense提供的SDK做修改https://github.com/IntelRealSense/librealsense ,支持Intel D400系列、T265、SR300的函式库,
执行该指令,安装Intel Intel Librealsense Debian Repository。安装时可能要输入用户密码
cd installLibrealsense
./installLibrealsense.sh
注:使用者不会因使用JetsonNano而需要另外修改kernel。
执行该指令,建立Librealsense Debian Repository,安装时间需要30分钟,请耐心等候
./buildLibrealsense.sh
安装缺失的套件
sudo apt-get install libcanberra-gtk-module libcanberra-gtk3-module
安装套件后重新启动
sudo reboot
执行RealSense
RealSense Viewer是RealSense SDK很方便的应用,它可以帮助用户在开发程序之前,先确认这些事:
- 确认RealSense型号
- 装置与RealSense 的USB版本
- 确认RGB、深度、IR影像
- 确认RGB与深度的影像整合画面
- 设定输出像素、FPS、ROI与简易的滤波
开启terminal输入以下指令,会显示RealSense操作接口
Realsense-viewer
接上RealSense D435,在屏幕左上角可以确认RealSense的型号,开发板连结RealSense的USB版本,可从Stereo Module的on/off 开关开启深度信息、RGB Camera则是一般的影像串流
开启【Stereo Module】,从【Preset】可以调整影像输出的模式,以下图为例,点选【Hand】模式,手指的轮廓可以更清晰呈现。画面的影响颜色代表深度模块侦测的距离,右方有一个量表,量值的范围为0~4公尺,分别用渐层的颜色来表示。
我们可以看到图中蓝色的手部轮廓,离摄影机最近,约20~30公分,背后墙壁的部分离摄影机为两公尺,D435的深度误差为1~2公分。
点开【Stereo Module】下拉式选单,可以更细致设定输出画面的像素、FPS以及开启红外线画面,图中是我点击的红外线画面,使用者可以更细致确认深度、IR、RGB影像,RealSense同时输出的状态,每个影像上的选单,个别暂停、拍照、查看设定参数。
用户想了解影像中的坐标数据,可以将鼠标移至画面中查看,【Stereo Module】下拉式选单也有【Enable Auto Exposure】设定感兴趣的区域(Set ROI)做个别调整。
点选右上角的选项【3D】,画面以3维的视角呈现,下图可以看到正中心有一个RealSense的缩图,缩图延伸出X、Y、Z三个轴作为3维的坐标系,正中心有条对角的黑线,在画面中显示成一个由上往下看的立体4角锥,立体四角锥的内部代表RealSense的深度可是范围,各位可以观察图中人物伸出的手掌,当超过立体四角锥的范围时,不会显示有的深度于轮廓。
执行Python范例
Intel提供C语言与Python等程序语言范例,C语言范例整理于librealsense/example之中,我们做几个Python范例让大家参考。
在Terminal上显示深度信息
执行指令
cd ~/librealsense/wrappers/python/examples
python3 python-tutorial-1-depth.py
执行后可以看到Terminal上会不断显示影像,下图显示摄影机前人的轮廓
执行成果图
实时深度信息与RGB影像串流对齐
执行指令
cd ~/librealsense/wrappers/python/examples
python3 align-depth2color.py
程序将右图中的深度影像,与左边的RGB影像对齐,将距离较远的部分删除,留下较近的RGB影像
执行成果图
使用OpenCV与Numpy显示深度影像
执行指令
cd ~/librealsense/wrappers/python/examples
python3 opencv_viewer_example.py
习惯使用OpenCV做图像处理的人可以参考这个程序,pyrealsense2 套件处理D435的的影像,整理影像每个点的数据数组则使用numpy处理,影像显示于窗口则使用OpenCV,如果您打算将D435结合机器学习影像辨识,这个范例是很好的参考。
执行成果图
以下是结合OpenCV的程序代码,针对每部份的程序代码附上中文批注
#汇入RealSense、Numpy、OpenCV模块
import pyrealsense2 as rs
import numpy as np
import cv2
#设定深度影像与RGB影像串流
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:
# 读取一个完整深度、颜色的Frame
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
# 将影像转换为Numpy数组
depth_image = np.asanyarray(depth_frame.get_data())
color_image = np.asanyarray(color_frame.get_data())
# 将深度影像应用为一般影像(必须将影像转换为每像素8位)
depth_colormap = cv2.applyColorMap(cv2.convertScaleAbs(depth_image, alpha=0.03), cv2.COLORMAP_JET)
# 水平堆栈两个影像(RGB影像与深度影像)
images = np.hstack((color_image, depth_colormap))
# 显示影像
cv2.namedWindow('RealSense', cv2.WINDOW_AUTOSIZE)
cv2.imshow('RealSense', images)
cv2.waitKey(1)
finally:
# 关闭影像串流
pipeline.stop()
RealSense的范例可以参考
https://github.com/IntelRealSense/librealsense/tree/master/wrappers/python/examples
- Tutorial 1– 一个用ASCII显示图形的画面
- NumPy and OpenCV– 测试OpenCV跟NumPy是否能顺利使用
- Stream Alignment– 简易的去背程序
- RS400 Advanced Mode– 用于控制D400摄像机不同选项的高级模式界面范例
- Realsense Backend– 使用后端接口控制设备的范例
- Read bag file– 有关如何读取bag文件并使用着色器在喷射色图中显示记录的深度流的范例
- Box Dimensioner Multicam– 用于控制D400摄像机不同选项的高级模式界面范例
- Realsense over Ethernet– 透过以太网络做影像串流的教学文件
以上是本次分享内容,我们将分享更多关于Intel 深度摄影机的文章