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