前面教大家使用 DeepStream 的 Docker 鏡像去創(chuàng)建自己的 Python 工作環(huán)境,其好處是即使 Jetson 設備需要使用 JetPack 重新安裝系統(tǒng),我們只要重新啟動這個 Docker 容器就可以,無需重復環(huán)境配置的工作。
輸入源在視頻分析中是至關重要的部分,先前的視頻文件只是單純的測試目的,真正實用的部分還是需要接上攝像頭或網絡的視頻流,這樣才能應用到實際的工作場景。本文的內容就是帶領讀者將攝像頭與 RTSP 流接入容器內使用,搭建具有實用價值的容器。
1、接入攝像頭
第一件任務就是要判斷攝像頭的種類與數(shù)量,用最簡單的 “l(fā)s /dev/video*” 指令并不能分辨其種類,因此最好的方法還是使用 v4l2 工具。請先執(zhí)行以下指令安裝這個工具:
sudo apt install -y v4l-utils
安裝好之后,請執(zhí)行以下指令:
v4l2-ctl --list-devices
如果檢測到以下 “imx219” 之類的信息,表示這個攝像頭為 CSI 類型:
如果檢測到以下 “USB Camera” 信息的,就表示為 USB 攝像頭:
在 Jetson Orin 開發(fā)套件的 USB 攝像頭都會占用 2 個 video 口,例如上圖中的一臺 USB 攝像頭占用 video0 與 video1 兩個端口,但實際能調用作為輸入功能的是第一個 video0 的編號,如果設備上有多個攝像頭的時候,就需要特別注意這些細節(jié)。
由于 CSI 攝像頭與 USB 攝像頭的調用方式不同,因此在創(chuàng)建 Docker 容器時,需要使用以下兩種不同的映射方式將設備指到容器內使用:
-
CSI 攝像頭:使用 “-v /tmp/argus_socket:/tmp/argus_socket” 方式進行映射;
-
USB 攝像頭:使用 “--device/dev/video
” 方式進行映射,如果有多個 USB 攝像頭則可以使用 “--device /dev/video --device /dev/video ...” 方式添加到容器內。
這些攝像頭加到容器之后,會發(fā)現(xiàn)容器內的編號與容器外是對應的,例如原本 video0 與 video2 兩個 USB 攝像頭,進到容器之后同樣為 video0 與 video2 的編號。
由于 Jetson Orin 開發(fā)套件的 CSI 攝像頭比較特殊,因此這里使用兩個 USB 攝像頭來做演示,并以 nvcr.io/nvidia/deepstream-l4t:6.1-samples 鏡像來創(chuàng)建執(zhí)行容器,如果您按照前面文章將 samples 內容復制到容器外的話,請執(zhí)行以下指令:
sudo xhost +siroot
docker run -it --net=host --runtime=nvidia -e DISPLAY=$DISPLAY
-w /opt/nvidia/deepstream/deepstream -v /tmp/.X11-unix/:/tmp/.X11-unix
-v ~/deepstream/samples:/opt/nvidia/deepstream/deepstream/samples
--device/dev/video0--device/dev/video2nvcr.io/nvidia/deepstream-l4t:6.1-samples
現(xiàn)在進入容器后先檢查攝像頭數(shù)量,請執(zhí)行以下指令:
apt install -y v4l-utils
v4l2-ctl--list-devices
會看到如下的信息,表示有兩個 USB 攝像頭:
這樣就能在容器內調用攝像頭來進行工作。
2、執(zhí)行容器內 deepstream-app 調用 USB 攝像頭
在容器內用 deepstream-app 進行演示,使用 samples/config/deepstream-app 下的 source1_usb_dec_infer_resnet_int8.txt 配置文件,不過需要對配置文件進行以下的修改:
-
將 [tiled-display] 設置組的 columns 設為 2,配合兩個攝像頭的顯示;
-
確認 [source0] 設置組最后的 camera-v4l2-dev-node 設為 0;
-
將 [source0] 設置組復制一份為 [source1],將 camera-v4l2-dev-node 設為 2;
-
將 [sink0] 設置組的 type 設為 2。
主要修改部分如下:
[tiled-display]
...
columns=2
...
[source0]
...
camera-v4l2-dev-node=0
# 將[source0]內容復制一份成下面的[source1],并修改節(jié)點編號
[source1]
...
camera-v4l2-dev-node=2
...
[sink0]
...
type=2
修改完后,就在容器內執(zhí)行以下指令:
cd samples/config/deepstream-app
deepstream-app-csource1_usb_dec_infer_resnet_int8.txt
就應該能看到顯示兩個攝像頭的畫面。
3、執(zhí)行容器內 Python 調用 USB 攝像頭范例
如果您已經按照前面文章創(chuàng)建支持 Python 開發(fā)環(huán)境的 DeepStream 容器,現(xiàn)在就可以用前面存好的 deepstream-l4t:6.1-python 鏡像創(chuàng)建 ds_python 容器,如果還沒有創(chuàng)建好的話,可參考上一篇文章中去調試 Python 執(zhí)行環(huán)境。
現(xiàn)在執(zhí)行以下指令,使用 deepstream-l4t:6.1-python 鏡像創(chuàng)建可執(zhí)行 Python 范例的容器:
sudo xhost +siroot
docker run -id --net=host --name=ds_python --runtime=nvidia -e DISPLAY=$DISPLAY
-w /opt/nvidia/deepstream/deepstream -v /tmp/.X11-unix/:/tmp/.X11-unix
-v ~/deepstream/deepstream/sources:/opt/nvidia/deepstream/deepstream/sources
-v ~/deepstream/deepstream/samples:/opt/nvidia/deepstream/deepstream/samples --device /dev/video0 --device /dev/video2 deepstream-l4t:6.1-python
dockerexec-itds_pythonbash
進入容器后,先使用以下指令檢查攝像頭是否完成連接:
apt install -y v4l-utils
v4l2-ctl--list-devices
如果看到如下的信息,表示有兩個 USB 攝像頭:
現(xiàn)在使用 Python 范例的 deepstream-test1-usbcam 項目來執(zhí)行 USB 攝像頭的測試,請執(zhí)行以下指令:
cd sources/deepstream_python_apps/apps/deepstream-test1-usbcam/
./deepstream_test_1_usb.py/dev/video0
這樣就能在容器內調用 USB 攝像頭。
-
usb
+關注
關注
60文章
8175瀏覽量
272623 -
NVIDIA
+關注
關注
14文章
5299瀏覽量
106304 -
攝像頭
+關注
關注
61文章
4973瀏覽量
98272 -
python
+關注
關注
56文章
4827瀏覽量
86666
原文標題:NVIDIA Jetson 系列文章(9):為容器接入USB攝像頭
文章出處:【微信號:NVIDIA-Enterprise,微信公眾號:NVIDIA英偉達企業(yè)解決方案】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
解決USB攝像頭所導致的花屏故障
USB 攝像頭
[轉載]迅為4412開發(fā)板 android系統(tǒng)原生態(tài)的攝像頭程序驅動USB攝像頭
STM32單片機如何實現(xiàn)連接USB攝像頭
USB攝像頭及其應用
USB攝像頭接在RK3399Pro上設備檢測不到攝像頭是什么原因
【解決方案】如何將USB攝像頭轉換為網絡攝像頭?
STM32單片機實現(xiàn)連接USB攝像頭

評論