嘿!您似乎在 United States,您想使用我们的 English 网站吗?
Switch to English site
Skip to main content

Intel 深度影像摄影机应用- 在NVIDIA Jetson Nano上使用RealSense D435

 

作者

徐丰智

难度

简单

材料表

1.       NVIDIA Jestson Nano Developer Kit

2.       64GB SD卡

3.       Intel RealSense D435

 

本次分享Intel 推出的深度摄影机RealSense D435相关信息与应用,D435拥有左右双镜头,搭配IR Sensor,可以使用点云的方式描绘摄影机前物体的3D坐标数据,显示3D扫描的效果。我们将以嵌入式开发板NVIDIA Jetson Nano为例,分享安装步骤与教学。

0136_3175f4dc828568c2e7f1c53a4197c607193dbb7b.png

 

注意:

如果您是第一次使用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

0230_f7d3d0c5c0ad8b92a4cc6f3a465a8413ba097773.png

 

安装Swapfile

cd installSwapfile
./installSwapfile.sh

0333_b8a80875c7816a4a4b48e1a7a4b1b83a190d53ac.png

 

安装成功后重新启动

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

0431_75b1f8fca9838653f1e5d8bc126787f2144fe640.png

 

Step2 安装RealSense SDK

下载SDK

git clone https://github.com/jetsonhacksnano/installLibrealsense

0529_dfc7c81d15dd55f7249ba493911453172adcfc4a.png

这个SDK是以Intel RealSense提供的SDK做修改https://github.com/IntelRealSense/librealsense ,支持Intel D400系列、T265、SR300的函式库,

执行该指令,安装Intel Intel Librealsense Debian Repository。安装时可能要输入用户密码

cd installLibrealsense
./installLibrealsense.sh

注:使用者不会因使用JetsonNano而需要另外修改kernel。

0628_dfcefaa36369d60608e5613cf5e64ad1935dc75e.png

 

执行该指令,建立Librealsense Debian Repository,安装时间需要30分钟,请耐心等候

./buildLibrealsense.sh

0731_82b82141c5bf4a9036f1053786425c2ecdf6ec00.png

 

安装缺失的套件

sudo apt-get install libcanberra-gtk-module libcanberra-gtk3-module

0826_25648c0df2f211f1498a477344e76556fdd1a2f1.png

 

安装套件后重新启动

sudo reboot

 

执行RealSense

RealSense Viewer是RealSense SDK很方便的应用,它可以帮助用户在开发程序之前,先确认这些事:

  • 确认RealSense型号
  • 装置与RealSense 的USB版本
  • 确认RGB、深度、IR影像
  • 确认RGB与深度的影像整合画面
  • 设定输出像素、FPS、ROI与简易的滤波

 

开启terminal输入以下指令,会显示RealSense操作接口

Realsense-viewer

0924_41ab051cc16c1996befcecb51c0c6710ba5b6eb5.png

 

接上RealSense D435,在屏幕左上角可以确认RealSense的型号,开发板连结RealSense的USB版本,可从Stereo Module的on/off 开关开启深度信息、RGB Camera则是一般的影像串流

1037_b9a9766e5a2f08732f3257936db93d910ac55d4f.png

 

开启【Stereo Module】,从【Preset】可以调整影像输出的模式,以下图为例,点选【Hand】模式,手指的轮廓可以更清晰呈现。画面的影响颜色代表深度模块侦测的距离,右方有一个量表,量值的范围为0~4公尺,分别用渐层的颜色来表示。

我们可以看到图中蓝色的手部轮廓,离摄影机最近,约20~30公分,背后墙壁的部分离摄影机为两公尺,D435的深度误差为1~2公分。

1154_859391827675e7d023775784cec573a96cd67c7b.png

 

点开【Stereo Module】下拉式选单,可以更细致设定输出画面的像素、FPS以及开启红外线画面,图中是我点击的红外线画面,使用者可以更细致确认深度、IR、RGB影像,RealSense同时输出的状态,每个影像上的选单,个别暂停、拍照、查看设定参数。

用户想了解影像中的坐标数据,可以将鼠标移至画面中查看,【Stereo Module】下拉式选单也有【Enable Auto Exposure】设定感兴趣的区域(Set ROI)做个别调整。

1246_129a715417e2e07f8ed5fff5c0fbd316c808f2fd.png

1329_23f7ef02363e3114e068d3fed6debe45c397acbc.png

 

点选右上角的选项【3D】,画面以3维的视角呈现,下图可以看到正中心有一个RealSense的缩图,缩图延伸出X、Y、Z三个轴作为3维的坐标系,正中心有条对角的黑线,在画面中显示成一个由上往下看的立体4角锥,立体四角锥的内部代表RealSense的深度可是范围,各位可以观察图中人物伸出的手掌,当超过立体四角锥的范围时,不会显示有的深度于轮廓。

1433_c634282d58f085eb2facba78aa9b48e7105b4de1.png

1525_e9f38269d4b925fdca2e066fbf36f8bf13405f6b.png

 

 

执行Python范例

Intel提供C语言与Python等程序语言范例,C语言范例整理于librealsense/example之中,我们做几个Python范例让大家参考。

 

Terminal上显示深度信息

执行指令

cd ~/librealsense/wrappers/python/examples
python3 python-tutorial-1-depth.py

 

执行后可以看到Terminal上会不断显示影像,下图显示摄影机前人的轮廓

执行成果图

1627_7560d67ea3a8f000a783990c880dc1dee76a2e2d.png

 

实时深度信息与RGB影像串流对齐

执行指令

cd ~/librealsense/wrappers/python/examples
python3 align-depth2color.py

 

程序将右图中的深度影像,与左边的RGB影像对齐,将距离较远的部分删除,留下较近的RGB影像

执行成果图

1724_90ab1e54ed61b2681d66818d178683f3a2d496e8.png

 

使用OpenCV与Numpy显示深度影像

执行指令

cd ~/librealsense/wrappers/python/examples
python3 opencv_viewer_example.py

 

习惯使用OpenCV做图像处理的人可以参考这个程序,pyrealsense2 套件处理D435的的影像,整理影像每个点的数据数组则使用numpy处理,影像显示于窗口则使用OpenCV,如果您打算将D435结合机器学习影像辨识,这个范例是很好的参考。

执行成果图

1823_703cbd569abfed551c16ee3b902eeb1a0f2a7ca9.png

 

以下是结合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

1924_2e475c020121787f5a17f3402b11284e105110ef.png

 

  1. Tutorial 1– 一个用ASCII显示图形的画面
  2. NumPy and OpenCV– 测试OpenCV跟NumPy是否能顺利使用
  3. Stream Alignment– 简易的去背程序
  4. RS400 Advanced Mode– 用于控制D400摄像机不同选项的高级模式界面范例
  5. Realsense Backend– 使用后端接口控制设备的范例
  6. Read bag file– 有关如何读取bag文件并使用着色器在喷射色图中显示记录的深度流的范例
  7. Box Dimensioner Multicam– 用于控制D400摄像机不同选项的高级模式界面范例
  8. Realsense over Ethernet– 透过以太网络做影像串流的教学文件

 

以上是本次分享内容,我们将分享更多关于Intel 深度摄影机的文章

CAVEDU Education is devoted into robotics education and maker movement since 2008, and is intensively active in teaching fundamental knowledge and skills. We had published many books for readers in all ages, topics including Deep Learning, edge computing, App Inventor, IoT and robotics. Please check CAVEDU's website for more information: http://www.cavedu.com, http://www.appinventor.tw