前面一篇文章已經帶著大家將 DeepStream 容器配置 Python 使用環境,本文的重點就是繼續執行實際的開發操作。
由于前面開啟容器時,透過 “-v” 指令將容器外路徑與容器內形成映射,因此實際代碼文件是存放在主機上(容器外),我們可以在主機上使用 gedit 這個較為便利的編輯器去修改代碼,然后在容器內執行應用,如此搭建起實用性更高的開發環境。
在 DeepStream 范例中的test2是識別功能最豐富的經典范例,不僅能識別對 “Car” 與 “Person” 配置唯一的編號進行跟蹤功能,還能為 “Car” 物體進一步分析 “廠牌”、“顏色”、“車型” 等屬性,我們還可以將這些信息改成中文顯示。
另一個runtime_source_add_delete項目則是實現 “動態添加/刪減視頻源” 的功能,通常在面對 “不均衡” 監控的時候,會需要這項功能的輔助。
例如 “醫院的門診與急診” 的流量在正常工作時間是門診大于急診,下班之后的流量就剛好反轉,如果能根據時間去調整輸入源的增減,就會有很高的實用性;都市中很多道路車流量在上下班高峰期是反轉的,如果中控室的監控屏幕數量有限的時候,也可以根據不同狀態去調整視頻流的來源。
這并不意味著我們得去調整設備的數量,而是調整輸入源的 “接收開關”,例如道路交通的監控有 100 臺攝像頭,是保持 24 小時全年午休地拍攝并傳輸數據,而中控室如果只有 50 個顯示屏幕,就只要切換接收輸入源的開關就可以。
現在就用容器版 DeepStream 的 Python 環境,來執行這兩個應用。
1、DeepStream-test2 項目
這個項目將 DeepStream 關于物體識別的絕大部分人工智能功能都集于一身,包括以下三大類組件:
-
1 個具備四類別的物體檢測器(object detector)作為一階段檢測器;
-
1 個跟蹤器(tracker);
-
3 個基于 “Car” 類別的圖像分類器(image classifier)作為二階段分類器。
三者的合作關系如下:
1)將讀入的圖像傳給一階段檢測器進行物體檢測計算;
2)將識別出的物體傳送給跟蹤器去賦予唯一的編號;
3)如果識別的類別為 “Car”,則將物體位置坐標分別傳送給 3 個二階段分類器,對坐標內圖形進行 “廠牌”、“顏色”、“車型” 等屬性識別;
4)最后將上面的信息合成回原始圖像,然后進行輸出作業。
這里使用的檢測器與 3 個二階段分類器模型都在 samples / models 下,如以下的路徑名:
-
Primary_Detector:一階段監測器
-
Secondary_CarColor:識別車輛顏色的二階段分類器
-
Secondary_CarMake:識別車輛廠牌的二階段分類器
-
Secondary_VehicleTypes:識別車輛種類的二階段分類器
如果前面建立的 Python 容器環境沒有刪除的話,現在就可以執行以下指令進入容器內去執行這個范例:
sudo xhost +si:localuser:root
dockerstartds_python&&dockerexec-itds_pythonbash
進入容器后,執行以下指令:
cd sources/deepstream_python_apps/apps/deepstream-test2
./deepstream_test_2.py../../../../samples/streams/sample_720p.h264
下圖就是執行的效果,可以看到每個識別到的物體都有唯一的識別號,在 “Car 3” 后面還有 “gray” 與 “nissan” 等顏色與廠牌的信息。
不過這個容器版有個還未解決的問題,就是 “中文顯示” 的部分,如果有更精通操作系統的朋友可以試著解決這個中文顯示問題。
2、runtime_source_add_delete 項目
這個項目也是基于 deepstream-test2 多神經網絡組合識別項目基礎上,使用以下的動態處理函數,因此沒有固定的通道結構:
1)create_uridecode_bin:作為 “多輸入源路徑解析” 功能;
2)stop_release_source:停止指定編號數據源,并釋放相關資源的內存空間;
3)delete_sources:首先刪除現有 stream 中已經 End of Stream 的數據源,如果沒有隨機刪除一個視頻源。如果全部視頻源都被刪除時,就結束應用;
4)add_sources:隨機增加數據源,如果數量達到 MAX_NUM_SOURCES,10s 后刪除一個視頻源;
5)bus_call:總線管理機制,作為觸發事件的管理機制。
為了簡化運行,這個示例只接收 1 個 H.264 視頻文件當作 4 個輸入源使用,每 10 秒添加的視頻都會從頭開始播放,系統就是為每個輸入源設置唯一的編號,作為新增與刪除的依據。
cd sources/deepstream_python_apps/apps/runtime_source_add_delete
export DS_ROOT=/opt/nvidia/deepstream/deepstream/
./deepstream_rt_src_add_del.pyfile://$DS_ROOT/samples/streams/sample_720p.mp4
接下去就會執行以下的 7 個畫面變化:
1)顯示第一個輸入源的檢測結果:
2)10 秒后添加第二個輸入源的檢測結果:
3)再 10 秒后添加第三個輸入源的檢測結果:
4)再 10 秒后添加第四個輸入源的檢測結果:
5)再 10 秒后隨機刪除一個輸入源:
6)再 10 秒后又隨機刪除一個輸入源:
7)再 10 秒后又隨機刪除一個輸入源:
8)再 10 秒后刪除最后一個輸入源。
可以修改 deepstream_rt_src_add_del.py 文件的以下兩個粗體下劃線的參數,調整輸出總數量與間隔時間:
-
第 48 行:MAX_NUM_SOURCES = 4
-
第 278 行:GLib.timeout_add_seconds(10, delete_sources, g_source_bin_list)
之后請自行嘗試修改的結果。
審核編輯:湯梓紅
-
NVIDIA
+關注
關注
14文章
4986瀏覽量
103055 -
容器
+關注
關注
0文章
495瀏覽量
22061 -
python
+關注
關注
56文章
4797瀏覽量
84688
原文標題:NVIDIA Jetson 系列文章(8):用DS容器執行Python范例
文章出處:【微信號:NVIDIA-Enterprise,微信公眾號:NVIDIA英偉達企業解決方案】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論