在最開始介紹 Jetbot 的時候有提到,這套智能小車只使用一個 CSI 攝像頭作為全部輸入的設備,因為這種設備的體積輕巧、功耗較低,并且 NVIDIA Jetson 系列針對 CSI 攝像頭提供了一組 Camera SubSystem 來提高效率,非常適合用在智能車方案上的視頻圖像輸入。下表是各種攝像頭的簡單比較表,這樣就能一目了然地理解 Jetbot 為何挑選 CSI 攝像頭作為輸入設備。

首先要提示的,Jetson Nano(含2GB)所支持的是 CSI-2 版本接口,早期用在樹莓派上 50 元以下的 CSI 接口攝像頭是不能使用的,主要以 IMX219 芯片的攝像頭為主,價格大約在 100 元以上,因此請勿選購錯誤。
本文并不花時間去說明 CSI 攝像頭的工作原理,主要配合 Jetbot 的安裝,以及執(zhí)行最簡單指令去確認您手上的攝像頭是否良好可用,否則等整機都裝好之后再進行測試,如果遇到不良的攝像頭還得再拆卸下來,是一件頗為浪費時間的事情。
將CSI攝像頭裝到Jetson Nano(含2GB)上
這種接口并不支持即插即用(PnP, Plug and Play)功能,不能像 USB 攝像頭可以隨時插入 Jetson Nano(含2GB),必須在開機之前就先裝好。如果開機后測試發(fā)現(xiàn)不成功,就得關機后再檢查是否有什么地方安裝不正確?或者接觸不良的問題,就便利性而言不如 USB 攝像頭那么順手。
安裝 CSI 攝像頭的接口如下圖左方的卡座,要拔取卡筍進行安裝時千萬小心力度,這個塑料件比較脆弱,一不小心弄斷了,不僅無法再安裝 CSI 攝像頭,也嚴重影響 Jetson Nano(含2GB)的質保,需要非常小心處理!
卡座上透過一根專屬的軟排線(如上圖右)與 CSI 攝像頭進行連接,這個軟排線是有方向性的,如上圖右所顯示,軟排線有金屬針腳的一面要朝內(核心模塊)方向,將排線完整塞進卡座之后,再將卡筍往下壓,確保完全壓倒底,否則攝像頭可能因為排線接觸不良而無法正常工作。
請參考“菜鳥手冊(2):給 Jetson Nano 安裝 CSI 攝像頭”(https://cloud.tencent.com/developer/article/1421907)一文,有非常詳盡的步驟與動態(tài)簡圖能完整表達過程。總而言之,這個攝像頭的安裝有些細微之處,需要細心處理。一旦安裝測試好之后,也盡量不要拆卸。
測試CSI攝像頭的運行
由于 Jetbot 會關閉 Ubuntu 圖形桌面,因此過去所學到調用 nvarguscamera 指令,去啟動 CSI 攝像頭并在圖形桌面上顯示的方法,在這里都不能適用,但是 v4l2-ctl 工具還是能做最基本的檢測。
下面的測試都在 Jetbot 上的 Jupyter 環(huán)境上進行,也順便講解一下 Jupyter 上調用攝像頭與顯示內容的方法,先熟悉一下這方面的使用是很重要,因為后面所有實驗都要用到 CSI 攝像頭。
現(xiàn)在從 PC 上的瀏覽器輸入 “:8888” 進入 Jetbot 的 Jupyter 操作界面,然后開啟一個命令終端(如下圖):

現(xiàn)在先用 v4l2-ctl 工具檢查一下 CSI 攝像頭的狀況,請在終端輸入以下指令:
#如果是Docker版,請先安裝v4l-utils工具aptinstallv4l-utils#執(zhí)行檢測指令v4l2-ctl--list-devices#如果檢測到/dev/video0,繼續(xù)檢測這個設備的細部參數(shù)v4l2-ctl --device=/dev/video0 --all
細部參數(shù)就不花時間說明,主要讓大家知道當有需要的時候,就可以用 v4l2-ctl 這個工具查看細節(jié)。
接下去開始用 Jupyter 的代碼,來測試 CSI 攝像頭的工作狀況。首先創(chuàng)建一個新的“Notebook”(如下圖步驟),這是 Jupyter 的工作區(qū)域。

每次新開的 Notebook 都是如下圖的狀況,會有一個[ ] 與一個方框:

現(xiàn)在就將下面代碼復制到在 Notebook 的方框內里,由于前面“v4l2-ctl”檢測到這個攝像頭的寬高為(1640, 1232),因此在代碼中將攝像頭與 widgets 的圖形尺寸都設為這兩個數(shù)字:
fromjetbotimportCamera,bgr8_to_jpegimportipywidgets.widgetsaswidgetsfromIPython.displayimportdisplayimporttraitletscamera=Camera.instance(width=1640,height=1232)image=widgets.Image(format='jpeg',width=1640,height=1232)camera_link=traitlets.dlink((camera,'value'),(image,'value'),transform=bgr8_to_jpeg)display(image)
然后按一下“Ctrl-Enter”組合鍵就能執(zhí)行,正常的話就能在下方看到一個方框顯示攝像頭所捕捉的動態(tài)畫面,這樣就完成 CSI 攝像頭的測試。顯示有點小延遲是正常的,畢竟這里選擇的是(1640, 1232)尺寸,試試將尺寸都縮小到 1/2 之后,是不是就流暢的多?
如果要停止攝像頭播放,就用上面的“+”號添加一個“指令格”,然后在里面輸入:
camera_link.unlink()
然后用“Ctrl-Enter”執(zhí)行這個指令,這時候顯示畫面就處于凍結狀態(tài),不會播放顯示器所捕捉的內容。
假如想要讓攝像頭再次執(zhí)行播放,就在下面再添加一個“指令格”,輸入:
camera_link.link()
按下“Ctrl-Enter”執(zhí)行,就會看到顯示框里的內容又開始執(zhí)行動態(tài)播放了。
代碼解說
由于 Jupyter 并不支持 OpenGL 功能,無法像圖形桌面那樣直接播放視頻,因此在這里需要使用一些固定的技巧,將視頻轉成圖形方式去顯示,上面這段代碼可以說是 Jetbot 所有實驗啟動 CSI 攝像頭的標準內容。
這個代碼中有幾個關鍵的部分:
1. jetbot的Camera模塊:
早期 Jetbot 的攝像頭是基于 NVIDIA 的 JetCam 項目,提供對 CSI 與 USB 兩類攝像頭的支持,不過最新版本中仿佛只對 CSI 攝像頭提供支持,并且將底層的代碼放在 jetbot/camera 下面的幾只 .py 里面。
這使得調用方式變得非常簡單,只要將寬與高提供給 Camera.instance (寬,高)就可以,不需要再指定攝像頭的編號。
2. ipywidgets:
這個模塊為 jupyter 提供非常好用的“互動式小部件”,為原本只提供靜態(tài)顯示的教學環(huán)境,注入非常生動與多樣化互動的功能。
熟悉圖形化開發(fā)工具的朋友就應該知道,很多這類工具會提供下拉式選項、滑塊調整、復選框、文字框這類的小部件,可以組建較為復雜的儀表盤。
在后面控制 Jetbot 車輪的實驗中會使用到多種這類小部件,這里只是用到比較簡單的 widgets.image 功能,設定輸出為“jpeg”格式圖像。
3. iPython.display:
這是一個 python 互動式界面里的顯示功能,這里就是將 widget.image 輸出的 jpeg 圖像顯示在 Jupyter。
4. traitlets:
如果從整個英文字去翻譯,這個庫就被稱為“叛徒庫”,其實是蠻奇怪的東西。但如果將這個字切割成“trait”與“-let”組合,就能解釋成“小特征”的含義,例如 booklet 是小冊子、eaglet 是小老鷹的意思。
這個庫的功能非常強大,除了能為我們處理“類型檢查”之外,還能為動態(tài)計算提供預設值、修改屬性之后發(fā)出更改的事件信號、處理屬性值之間的交互影響,為我們簡化很多復雜的交錯關系。
在上述代碼中“camera_link=traitlets.dlink((camera, 'value'), (image, 'value'), transform=bgr8_to_jpeg)”,將攝像頭讀取的圖像與 widgets.image 所創(chuàng)建的 image 對象產(chǎn)生動態(tài)關聯(lián),并將攝像頭圖形執(zhí)行“bgr8_to_jpeg”轉換,存放到 image 里,最后再由 display(image)顯示出來。
至于 camera_link 物件就能在后面透過.link()與.unlink()執(zhí)行開關人任務,以實現(xiàn)“暫停”與“再啟動”的功能。
這樣我們對 Jetbot 攝像頭的調用與使用,就有個初步的了解,在后面實驗中就能更清楚的感受到這些功能的使用。
原文標題:NVIDIA Jetson Nano 2GB 系列文章(43):CSI攝像頭安裝與測試
文章出處:【微信公眾號:NVIDIA英偉達企業(yè)解決方案】歡迎添加關注!文章轉載請注明出處。
-
NVIDIA
+關注
關注
14文章
5594瀏覽量
109738 -
攝像頭
+關注
關注
61文章
5091瀏覽量
103122 -
瀏覽器
+關注
關注
1文章
1043瀏覽量
37086
原文標題:NVIDIA Jetson Nano 2GB 系列文章(43):CSI攝像頭安裝與測試
文章出處:【微信號:NVIDIA-Enterprise,微信公眾號:NVIDIA英偉達企業(yè)解決方案】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
ESP32-S3在初始化攝像頭時檢測到攝像頭模組型號不被支持
資產(chǎn)管理怎么提高效率
【EASY EAI Nano-TB(RV1126B)開發(fā)板試用】桌面系統(tǒng)功能測試-驅動攝像頭-Mediapipe人體姿態(tài)檢測1
車載雙目攝像頭如何“看見”世界?
BPI-AIM7 RK3588 AI與 Nvidia Jetson Nano 生態(tài)系統(tǒng)兼容的低功耗 AI 模塊
在多相降壓轉換器中使用耦合電感器可提高效率
車載攝像頭產(chǎn)線“智”造升級!RFID解鎖效率與質量“雙引擎”
創(chuàng)世SD NAND貼片卡:智能攝像頭存儲難題的完美解決方案 #人工智能 #智能攝像頭 #攝像頭
【EASY EAI Orin Nano開發(fā)板試用體驗】--USB攝像頭使用
【Milk-V Duo S 開發(fā)板免費體驗】4 - OV5647 攝像頭攝像頭測試
如何使用Banana Pi BPI-M7,BPI-M5 Pro 瑞芯微RK3588,RK3576芯片攝像頭功能
Made with KiCad(126):Antmicro OV5640 雙攝像頭子板
基于RK3576開發(fā)板的網(wǎng)絡攝像頭方案
一拖四USB多攝像頭同步采集方案:高效數(shù)據(jù)處理的革新突破
NVIDIA Jetson 系列針對CSI攝像頭提供Camera SubSystem提高效率
評論