點擊查看系列文章目錄
0 背景
車牌識別是一個常見的功能需求,NVIDIA 也提供了相應的解決方案,并且部署在 deepstream 中,支持 TLT 遷移學習,訓練自己的模型,本文對該模型的使用方法做一個介紹,
專案地址: https://github.com/NVIDIA-AI-IOT/deepstream_lpr_app
測驗環境:Jetson Xavier, Jetpack 4.4, deepstream5.0.1
1 專案介紹
如圖所示,基于 deepstream 5.0.1 搭建 pipeline 如下,完成端到端車牌識別功能,即輸入視頻流,經過硬體解碼、合流、推理、渲染等程序,得到視頻中的車牌號

主要包括三個模型:車輛檢測模型(PGIE)、車牌檢測模型(SGIE)、車牌識別模型(SGIE),對應的模型路徑如下:
- Car detection model https://ngc.nvidia.com/catalog/models/nvidia:tlt_trafficcamnet
- LPD (car license plate detection) model https://ngc.nvidia.com/catalog/models/nvidia:tlt_lpdnet
- LPR (car license plate recognization/text extraction) model https://ngc.nvidia.com/catalog/models/nvidia:tlt_lprnet
關于三種模型的資訊如下
| 模型名稱 | 網路架構 | 類別數 | 準確率 | 功能 |
|---|---|---|---|---|
| TrafficCamNet | DetectNet_v2-ResNet18 | 4 | 83.5%mAP | 車輛檢測及跟蹤 |
| License Plate Detection | DetectNet_v2-ResNet18 | 1 | 98%mAP | 車牌檢測及定位 |
| License Plate Recognition | Tuned ResNet18 | 36(US)/68(CH) | 97%(US)/99%(CH) | 字符識別 |
專案支持在 Jetson 以及 dGPU 上部署,并且同時支持中文車牌識別和英文車牌識別(美國),檢測性能如下
| 設備 | 輸入路數 | batch size | 合計FPS |
| Jetson Nano | 1 | 1 | 9.2 |
| Jetson NX | 3 | 3 | 80.31 |
| Jetson Xavier | 5 | 5 | 146.43 |
| T4 | 14 | 14 | 447.15 |
2 專案部署
了解了關于專案的介紹,接下來進行實地部署測驗,本文以中文車牌識別為例,測驗環境是 Jetson Xavier
git clone https://github.com/NVIDIA-AI-IOT/deepstream_lpr_app.git
cd deepstream_lpr_app/
模型下載及轉換(模型下載程序中,如果網速較慢,可以直接到 NGC 對應的模型地址手動下載,然后放到對應的目錄即可)
./download_ch.sh
// DS5.0.1 gst-nvinfer cannot generate TRT engine for LPR model, so generate it with 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
其中 tlt-converter 工具可以直接在官網下載
| Platform | Compute | Link |
|---|---|---|
| x86 + GPU | CUDA 10.2/cuDNN 8.0/TensorRT 7.1 | link |
| x86 + GPU | CUDA 10.2/cuDNN 8.0/TensorRT 7.2 | link |
| x86 + GPU | CUDA 11.0/cuDNN 8.0/TensorRT 7.1 | link |
| x86 + GPU | CUDA 11.0/cuDNN 8.0/TensorRT 7.2 | link |
| Jetson | JetPack 4.4 | link |
| Jetson | JetPack 4.5 | link |
模型準備好之后,models 目錄結構如下
.
├── LP
│ ├── LPD
│ │ ├── ccpd_cal.bin
│ │ ├── ccpd_label.txt
│ │ ├── ccpd_pruned.etlt
│ │ └── ccpd_pruned.etlt_b16_gpu0_int8.engine
│ └── LPR
│ ├── ch_lprnet_baseline18_deployable.etlt
│ ├── labels_ch.txt
│ └── lpr_ch_onnx_b16.engine
└── tlt_pretrained_models
└── trafficcamnet
├── resnet18_trafficcamnet_pruned.etlt
├── resnet18_trafficcamnet_pruned.etlt_b1_gpu0_int8.engine
└── trafficnet_int8.txt
然后準備編譯測驗
make
cd deepstream-lpr-app
cp dict_ch.txt dict.txt
./deepstream-lpr-app 2 2 0 ch_car_test.mp4 ch_car_test.mp4 output.264
其中,deepstream-lpr-app 的引數含義如下
Usage: ./deepstream-lpr-app [1:us model|2: ch_model] [1:file sink|2:fakesink|3:display sink] [0:ROI disable|0:ROI enable] <In mp4 filename> <in mp4 filename> ... <out H264 filename>
注意:
- 目前只支持 mp4 檔案輸入以及 H264 檔案輸出
- 車輛檢測和車牌檢測模型是 INT8 格式,字符識別是 FP16 格式
運行后會保存檢測結果視頻,輸出到 output.264 檔案中,用 VLC 等軟體可以打開查看,官方檢測效果如圖所示

我實際測驗時,對中文車牌的識別效果一般,主要是測驗場景與模型訓練場景差異較大,提供的模型是在 CCPD 資料集上訓練的,如果要想在自己的場景中有一個好的檢測效果,需要用 TLT 工具進行遷移訓練,這塊的內容不再繼續展開,參考下邊的方法即可,
TLT 訓練:https://ngc.nvidia.com/catalog/models/nvidia:tlt_lprnet
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/265507.html
標籤:其他
