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

Intel 深度影像攝影機應用- 在NVIDIA Jetson Nano上使用RealSense D435

00_6a2f516185dbcc1ee86faf9c152512643a510aa2.png

 

作者

徐豐智

難度

簡單

材料表

1. NVIDIA Jestson Nano Developer Kit

2. 64GB SD卡

3. Intel RealSense D435

本次分享Intel 推出的深度攝影機RealSense D435相關資訊與應用,D435擁有左右雙鏡頭,搭配IR Sensor,可以使用點雲的方式描繪攝影機前物體的3D座標資料,顯示3D掃描的效果。我們將以嵌入式開發板NVIDIA Jetson Nano為例,分享安裝步驟與教學。

0135_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

0229_f7d3d0c5c0ad8b92a4cc6f3a465a8413ba097773.png

安裝Swapfile

cd installSwapfile
./installSwapfile.sh

0332_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

0430_75b1f8fca9838653f1e5d8bc126787f2144fe640.png

Step2 安裝RealSense SDK

下載SDK

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

0528_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。

0627_dfcefaa36369d60608e5613cf5e64ad1935dc75e.png

執行該指令,建立Librealsense Debian Repository,安裝時間需要30分鐘,請耐心等候

./buildLibrealsense.sh

註:本次build使用libuvc,不需要重新建立kernel。

0730_82b82141c5bf4a9036f1053786425c2ecdf6ec00.png

安裝缺失的套件

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

0825_25648c0df2f211f1498a477344e76556fdd1a2f1.png

安裝套件後重新啟動

sudo reboot

執行RealSense

RealSense Viewer是RealSense SDK很方便的應用,它可以幫助使用者在開發程式之前,先確認這些事:

  • 確認RealSense型號
  • 裝置與RealSense 的USB版本
  • 確認RGB、深度、IR影像
  • 確認RGB與深度的影像整合畫面
  • 設定輸出像素、FPS、ROI與簡易的濾波

開啟terminal輸入以下指令,會顯示RealSense操作介面

realsense-viewer

0923_41ab051cc16c1996befcecb51c0c6710ba5b6eb5.png

接上RealSense D435,在螢幕左上角可以確認RealSense的型號,開發板連結RealSense的USB版本,可從Stereo Module的on/off 開關開啟深度資訊、RGB Camera則是一般的影像串流

1036_b9a9766e5a2f08732f3257936db93d910ac55d4f.png

開啟【Stereo Module】,從【Preset】可以調整影像輸出的模式,以下圖為例,點選【Hand】模式,手指的輪廓可以更清晰呈現。畫面的影響顏色代表深度模組偵測的距離,右方有一個量表,量值的範圍為0~4公尺,分別用漸層的顏色來表示。

我們可以看到圖中藍色的手部輪廓,離攝影機最近,約20~30公分,背後牆壁的部分離攝影機為兩公尺,D435的深度誤差為1~2公分。

1151_859391827675e7d023775784cec573a96cd67c7b.png

點開【Stereo Module】下拉式選單,可以更細緻設定輸出畫面的像素、FPS以及開啟紅外線畫面,圖中是我點擊的紅外線畫面,使用者可以更細緻確認深度、IR、RGB影像,RealSense同時輸出的狀態,每個影像上的選單,個別暫停、拍照、查看設定參數。

使用者想了解影像中的座標資料,可以將滑鼠移至畫面中查看,【Stereo Module】下拉式選單也有【Enable Auto Exposure】設定感興趣的區域(Set ROI)做個別調整。

1245_129a715417e2e07f8ed5fff5c0fbd316c808f2fd.png

1328_23f7ef02363e3114e068d3fed6debe45c397acbc.png

點選右上角的選項【3D】,畫面以3維的視角呈現,下圖可以看到正中心有一個RealSense的縮圖,縮圖延伸出X、Y、Z三個軸作為3維的坐標系,正中心有條對角的黑線,在畫面中顯示成一個由上往下看的立體4角錐,立體四角錐的內部代表RealSense的深度可是範圍,各位可以觀察圖中人物伸出的手掌,當超過立體四角錐的範圍時,不會顯示有的深度於輪廓。

1432_c634282d58f085eb2facba78aa9b48e7105b4de1.png

1524_e9f38269d4b925fdca2e066fbf36f8bf13405f6b.png

執行Python範例

Intel提供C語言與Python等程式語言範例,C語言範例整理於librealsense/example之中,我們做幾個Python範例讓大家參考。

在Terminal上顯示深度資訊

執行指令

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

執行後可以看到Terminal上會不斷顯示影像,下圖顯示攝影機前人的輪廓

執行成果圖

1626_7560d67ea3a8f000a783990c880dc1dee76a2e2d.png

即時深度資訊與RGB影像串流對齊

執行指令

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

程式將右圖中的深度影像,與左邊的RGB影像對齊,將距離較遠的部分刪除,留下較近的RGB影像

執行成果圖

1723_90ab1e54ed61b2681d66818d178683f3a2d496e8.png

使用OpenCV與Numpy顯示深度影像

執行指令

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

習慣使用OpenCV做影像處理的人可以參考這個程式,pyrealsense2 套件處理D435的的影像,整理影像每個點的資料陣列則使用numpy處理,影像顯示於視窗則使用OpenCV,如果您打算將D435結合機器學習影像辨識,這個範例是很好的參考。

執行成果圖

1822_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

1923_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
DesignSpark Electrical Logolinkedin