DeepStream5.0系列之车牌识别

点击查看系列文章目录

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),对应的模型路径如下:

关于三种模型的信息如下

模型名称 网络架构 类别数 准确率 功能
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

猜你喜欢

转载自blog.csdn.net/zong596568821xp/article/details/114143709