你觉得这篇文章怎么样? 帮助我们为您提供更好的内容。
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
註:本次build使用libuvc,不需要重新建立kernel。
安裝缺失的套件
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/example
python3 python-tutorial-1-depth.py
執行後可以看到Terminal上會不斷顯示影像,下圖顯示攝影機前人的輪廓
執行成果圖
即時深度資訊與RGB影像串流對齊
執行指令
cd ~/librealsense/wrappers/python/example
python3 align-depth2color.py
程式將右圖中的深度影像,與左邊的RGB影像對齊,將距離較遠的部分刪除,留下較近的RGB影像
執行成果圖
使用OpenCV與Numpy顯示深度影像
執行指令
cd ~/librealsense/wrappers/python/example
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 深度攝影機的文章
评论