前面介紹過使用 deepstream-app 工具,啟用多個視頻進行車輛與行人的識別,并且啟動“追蹤”功能進行物件追蹤的高級功能,接下來就教大家如何在 deepstream-app 里調用 USB 與 CSI 攝像頭,并且與先前的視頻同時啟用來進行物件識別的應用。
這里使用 Jetson Nano 2GB 作為實驗平臺,上面安裝一個 CSI 攝像頭與一個 USB 攝像頭。
在調用攝像頭之前,建議先確認一下攝像頭的位置與分辨率等信息,因為 DeepStream 會檢查設定文件里的分辨率是否符合要求。使用 v4l2-utils 工具包來檢查攝像頭的信息,請按照以下步驟進行安裝,并且檢測攝像頭分辨率:
sudo apt-get install v4l2-utils v4l2-ctl --list-devices |
下面顯示的信息,表示目前接上一個 imx-219 的 CSI 攝像頭,以及一個 USB 2.0攝像頭。
接下執行以下指令,查看個別攝像頭可使用的分辨率為多少:
v4l2-ctl --list-formats-ext --device=0 v4l2-ctl --list-formats-ext --device=1 |
下面顯示的信息,表示CSI攝像頭(device=0)能支持3264x2464、3264x1848、1920x080、1640x1232、1280x720 等 5 種分辨率
下面顯示的信息,表示 USB 攝像頭(device=1)能支持 640x480、352x288、320x240、176x144、160x120 等 5 種分辨率
接下來看看在DeepStream路徑(/opt/nvidia/deepstream/deepstream)的samples/configs/deepstream-app 下面有個 source2_csi_usb_dec_infer_resnet_int8.txt 文件,這是專門以 CSI 與 USB 攝像頭為輸入源的配置,里面可以看到以下關于攝像頭設置的內容:
[source0] enable=1 #Type - 1=CameraV4L2 2=URI 3=MultiURI 4=RTSP 5=CSI type=5 camera-width=1280 camera-height=720 camera-fps-n=30 camera-fps-d=1 camera-csi-sensor-id=0 [source1] enable=1 #Type - 1=CameraV4L2 2=URI 3=MultiURI type=1 camera-width=1280 camera-height=720 camera-fps-n=30 camera-fps-d=1 camera-v4l2-dev-node=6 |
在[source1]下面的參數有點小問題,用粗體標識出來,因為我們裝載的USB攝像頭最大分辨率為640x480,因此這里的camera-width與camera-height都必須修改為攝像頭所支持的分辨率,此外就是最下面的camera-v4l2-dev-node的部分,前面檢查出來這臺Jetson Nano 2GB上的USB攝像頭編號為“1”,請按照實際狀況修改。
將上面三地方修改完后,就可以直接執行以下指令去啟動攝像頭:
deepstream-app -c source2_csi_usb_dec_infer_resnet_int8.txt |
由于配置文件里面原本設定使用INT8的精度去做推理,但是Jetson Nano 2GB并不支持,因此DeepStream自動切換成FP16精度,這需要重新生成對應的TensorRT引擎,會花點時間。
執行之后就能看的畫面上出現類似以下的畫面,上下分別是CSI攝像頭與USB攝像頭的顯示,由于選擇的模型是檢測“Car”與“Person”的,所以在這里沒有檢測到任何目標物件。
另外看一下先前下指令的終端上,顯示在Jetson Nano 2GB上的執行性能如下截屏
兩個攝像頭都能達到18FPS左右性能,總性能在36FPS左右,已經非常接近實時識別的速度,非常好。您可以試試旋轉攝像頭或者將手放在前面晃一晃,看看延遲狀況如何?應該是很流暢的。
接下來,再添加兩個視頻文件一起進來執行檢測,我們以系統上提供的視頻文件做示范:
/opt/nvidia/deepstream/deepstream/samples/streams/sample_1080p_h264.mp4
/usr/share/visionworks/sources/data/pedestrians.h264
將這兩個的設定添加到文件里的[source2]與[source3],內容如下:
[source2] enable=1 type=2 uri=file://../../streams/sample_1080p_h264.mp4 [source3] enable=1 type=2 uri=file:///usr/share/visionworks/sources/data/pedestrians.h264 |
最后調整文件最開始的“[tiled-display]”下面,將“columns=”的值改成“2”,存檔后重新執行下面指令:
deepstream-app -c source2_csi_usb_dec_infer_resnet_int8.txt |
現在可以看到如下圖,兩個攝像頭與兩個視頻總共4個輸入源同時執行的推理的功能。
接下來看看此時的性能如何?居然每個輸入源只剩下8FPS的性能,總性能在32FPS左右,似乎有點慢了。這個問題有補救的辦法嗎?
實時上問題出現在[primary-gie]使用的模型上,因為Jetson Nano(含2GB)的計算資源較為缺乏,因此DeepStream專門為Nano提供resnet10.caffemodel_b8_gpu0_fp16.engine特調版加速引擎,存放在“../../models/Primary_Detector_Nano”路徑下,這是第一個需要做修改的地方:
model-engine-file=../../models/Primary_Detector_Nano/resnet10.caffemodel_b8_gpu0_fp16.engine
其次就是下面的“config-file”置換成支持Nano版本的配置文件,如下:
config-file=config_infer_primary_nano.txt
修改完使用的模型之后,重新執行deepstream-app進行物件檢測,發現每個數據源的識別性能,立即從原本的8FPS提升到14FPS,也就是總性能從32FPS上升到56FPS左右,提升大約1.8倍。到這里否已經滿足樣的性能呢?
如果還覺得不滿足的時候,那就繼續看下去,還有大招在后面。只要我們將[primary-gie]下面的“interval”參數設為“1”,這時候再執行看看性能如何?
下面的截屏是調整 interval 參數之后的性能,有沒有嚇一跳?瞬間提升一倍。
經過三步驟調整之后,我們在Jetson Nano 2GB上的4個數據源,識別性能都超過27FPS,總性能合計超過100FPS,并且維持識別效果。
現在是不是對Jetson Nano 2GB的性能感到非常滿意了!
編輯:jq
-
攝像頭
+關注
關注
60文章
4851瀏覽量
95904
原文標題:NVIDIA Jetson Nano 2GB系列文章(30):DeepStream 攝像頭“實時性能”
文章出處:【微信號:murata-eetrend,微信公眾號:murata-eetrend】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論