前一篇文章提到使用deepstream-test的范例代碼,修改成“車牌識別”與“遮蓋(redaction)”的應用,本文就直接帶著大家實現這兩個范例的實踐,但是并不花時間去解釋代碼內容,因為基本工作流與邏輯是大致相同的,就是需要開發人員能夠多做實驗去熟悉每個插件直接的互動關系。
redaction_with_deepstream項目
雖然名稱上的“redaction”是“修改”的意思,但這里執行的效果其實就是識別視頻上的“私人信息”進行遮蓋,主要包括“人臉”、“車牌”這些重要信息,因為近年來越來越多的網上小視頻的播放,以及個人隱私保護程度高漲,內容提供人如果沒有適度地遮蓋視頻中的隱私信息,很可能遭受到維權的法律訴訟。
因此這個項目雖然看起來并沒有太高深的技術含量,但是實用性非常強,在Jetson Nano 2GB上用DeepStream直接幫視頻中需要遮蓋的信息,進行全自動化的處理,這樣就能減少非常多不必要的糾紛。
項目地址在https://github.com/NVIDIA-AI-IOT/redaction_with_deepstream,下面的簡易流水線圖也相當簡單(如下圖)。
不過比較有參考價值的流水線圖在“Pipeline Description”下面的兩張圖,將整個流水線的內容說明的非常詳細,強烈建議讀者自行下載去研究,這對于提升對DeepStream流水線的理解是很有幫助的,這部分能連貫起來之后就差不多有足夠的掌握程度。
項目執行非常簡單,執行以下指令就可以:
cd 《deepstream主目錄》/sources/apps
git clone https://github.com/NVIDIA-AI-IOT/redaction_with_deepstream
cd redaction_with_deepstream && make
。/deepstream-reaction-app -c configs/pgie_config_fd_lpd.txt
如果你的Jetson設備上有安裝USB攝像頭,執行之后應該就會顯示攝像頭的畫面,看看人頭過去的時候是否會把臉遮住?
打開 USB 攝像頭,對著電腦屏幕上播放的視頻進行測試,左邊車牌用藍色色塊遮蓋,右邊人臉部分用黑色色塊遮蓋,假如對“遮蓋”的顏色不滿意,可以調整代碼中第109~111行與118~120行的設定值,就可以改變顏色。
您可以自行嘗試用視頻文件來做輸入,并將檢測的結果輸出成一個視頻文件,這部分的指令在開源項目內都有很詳細的說明。執行完之后還會顯示本次檢測的實際性能,在Jetson Nano 2GB上的性能也能到達128FPS,非常好的表現
deepstream_lpr_app車牌識別項目
這個項目是個很經典的檢測器(detector)與分類器(classifier)共同合作的項目
主檢測器還是使用原本的4類檢測器,其中有“car”類別
在圖像中檢測到Car之后,再從這個物體的范圍內去尋找車牌,因此需要一個專門檢測車牌的次檢測器,這需要從NVIDA的NGC下載已經訓練好的模型,當然您也可以自己重新收集車牌數據集然后重新訓練。
當檢測到車牌的時候,將車牌圖像送交分類器,將上面的字符逐個分離出來,最后回饋車牌的字符串。整個識別需要先找到“car”這個物體,如果您直接提供車牌的圖片,在這里是辨識不出來的。
這個項目提供“美國”與“中國”的lpd車牌識別模型與lpr字符分類模型,兩組是不能混用的。經過測試,發現在“中國車牌”識別的模型中,應該沒有將屬于電動車的“綠色”車牌放進去,因此這種車牌也是識別不出來的。
因為deepstream-app這個強大的工具,雖然提供“多檢測器”級聯的處理功能,但是沒有提供“檢測器與分類器”級聯的功能,因此必須自己撰寫代碼來實現這個功能。根據的代碼內容的風格判斷,應該是以deepstream-test2范例為基礎進行開發的。
接下來就用這個項目的“中文車牌”識別的部分,帶著大家復現一下,里面有些小坑,不過我們都已找到問題的答案,請按照一下步驟執行:
1. 下載項目與模型:
git clone https://github.com/NVIDIA-AI-IOT/deepstream_lpr_app.git
cd deepstream_lpr_app
。/download_ch.sh
這會從NGC下載三個預訓練的中文車牌識別模型文件,以及各自配套的設置文件,腳本為這些模型、配套文件都設置好對應路徑,不需要修改:
1) 主檢測模型(四分類):resnet18_trafficcamnet_pruned.etlt
2) 次檢測模型(一分類):ccpd_pruned.etlt
3) 次分類模型:ch_lprnet_baseline18_deployable.etlt
2. 模型轉換:
前面下載的次分類模型(ch_lprnet_baseline18_deployable.etlt)是個中間文件,必須在目標設備(這里是Jetson Nano 2GB)使用tlt-converter轉換成該設備能使用的TensorRT加速引擎,需要先到https://developer.nvidia.com/cuda102-trt71-jp45下載cuda10.2_trt7_jp45-xx.zip,解壓縮就能看到tlt-converter這個工具。
下載后執行以下轉換指令:
。/tlt-converter -k nvidia_tlt
-p image_input,1x3x48x96,4x3x48x96,16x3x48x96
models/LP/LPR/ch_lprnet_baseline18_deployable.etlt
-t fp16 -e models/LP/LPR/lpr_ch_onnx_b16.engine
再次強調,這個轉換步驟必須在目標設備上執行,例如在Xavier上所專換的加速引擎是不能復制到NX或Nano(含2GB)上使用。
3. 編譯與修改設定:
直接執行以下指令:
cd deepstream_lpr_app # 進入到主代碼的目錄中
make # 編譯
cp dict_ch.txt dict.txt # 處理中文版的字典
最后,中文版設定文件lpd_ccpd_config.txt里第52行“model-color-format”設定值改為“0”,這樣就能正常識別了。
4. 執行:
這個步驟必須您自己去找到合適的視頻,或者自行錄制一小段視頻作為輸入,然后在這個目錄下執行編譯好的執行文件,在deepstream-lpr-app后面需要跟隨以下幾個參數:
1. 識別種類:1 -》 美國車牌識別、2 -》 中國車牌識別
2. 輸出種類:1 -》 輸出h264視頻文件、2 -》 fakesink、3 -》 顯示到屏幕上
3. ROI開關:0 -》 關閉、1 -》 開啟
4. 輸入文件:可以一次給多個.mp4視頻文件
5. 最后一個:指定輸出.h264視頻文件
例如:
。/deepstream-lpr-app 2 1 0 test1.mp4 test2.mp4 out.h264
下面是使用我們自行在停車場錄制的視頻、行車記錄儀、VisionWorks的范例,總共6個視頻文件作為輸入的測試結果,提供大家參考。
結語
本文的重點是要告訴大家,雖然使用deepstream-app調用設定文件的方式是很容易上手,但卻沒辦法解決一些特殊的應用。
本文所介紹的兩個實用性非常高的應用,就不能套用這種方式,必須自行撰寫代碼去執行特殊的處理,分別基于deepstream-test1與deepstream-test2兩個C/C++范例去開發,這給了初學者更開放的思路,不能只拘泥于deepstream-app設定文件的配置修改上,應該回歸正途從DeepStream的插件流去解決問題。
下一篇文章我們將以NVIDIA在DeepStream 4.0版時所提供的一個Jupyter學習環境,更有條例與有效率地一步一步在deepstrem-test上添加功能,包括將輸出的視頻流透過RTSP/RTP裝向其他設備去顯示、多數據源輸入、多網絡模型組合檢測等等功能。
不熟悉C/C++的朋友也不用著急,因為DeepStream也提供相當成熟的Python開發借口與范例,工作原理與C/C++版本完全一致,因此我們還是先用現有資源讓大家逐步體驗,最后還會再用Python的代碼進行示范,這樣就能事半功倍。
-
檢測器
+關注
關注
1文章
868瀏覽量
47733 -
代碼
+關注
關注
30文章
4809瀏覽量
68825 -
分類器
+關注
關注
0文章
152瀏覽量
13204 -
USB攝像頭
+關注
關注
0文章
22瀏覽量
11314
原文標題:NVIDIA Jetson Nano 2GB 系列文章(33):DeepStream 車牌識別與私密信息遮蓋
文章出處:【微信號:NVIDIA-Enterprise,微信公眾號:NVIDIA英偉達企業解決方案】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論