1、简介
车牌识别(License Plate Recognition, LPR)作为智能交通与安防系统的核心模块,对算法精度、推理速度及部署灵活性提出了极高要求。LPRNet 是由 Xiang Bai 团队于 2018 年提出的一种轻量级、端到端、无需字符分割的车牌识别网络,因其结构简洁、推理高效而被广泛应用于工业场景。
本文基于开源项目 LPRNet_Pytorch 进行深度改造与功能扩展,构建了一套全流程、可复现、支持中文特殊车牌的车牌识别系统。该系统不仅保留了原始 LPRNet 的高效特性,还新增了多数据集兼容处理、ONNX 导出、单图测试、自动旋转校正、中文路径支持等关键能力,显著提升了工程实用性与部署友好性。
尤为关键的是,针对 PyTorch 的 nn.MaxPool3d 在 ONNX 导出时存在的兼容性问题,设计并实现了自定义的 maxpool_3d 模块,从根本上解决了模型在边缘设备和工业推理引擎中的部署障碍。
2、改进与新增功能
2.1、扩展中文车牌字符集
原始项目仅支持基础省份+字母数字,无法识别“学”、“警”、“挂”、“港”、“澳”等特殊车牌。
在 load_data.py 中重新定义字符集:
CHARS = [
'京', '沪', '津', '渝', ..., '新', # 31 省份
'学', '警', '挂', # 新增特殊类型
'0', '1', ..., '9',
'A', 'B', ..., 'Z', '-', # 注意:剔除易混淆 I/O
]
支持中国主流民用车牌、武警车牌、教练车、临时号牌等,覆盖更全面。
2.2、数据集自动化处理工具
为解决训练数据获取难题,开发了两套专用脚本,支持主流公开数据集:
关键增强:
自动跳过含非法字符的车牌;
- 支持中文路径读写(使用
np.fromfile + cv2.imdecode); - 图像统一缩放至
94×24(LPRNet 标准输入尺寸); - 文件名直接设为车牌号(如
京A12345.jpg),简化标签管理。
2.3、完整的训练-验证-测试闭环
在 train_LPRNet.py 和 test_LPRNet.py 中,完善了以下功能:
- 动态学习率调度:按 [4,8,12,14,16] 轮次阶梯式衰减;
- CTC Loss 正确实现:使用 nn.CTCLoss(blank=len(CHARS)-1);
- Greedy Decode 解码器:去除重复字符与空白符(blank);
- 批量测试评估:输出准确率、成功/失败样本统计;
实验表明:在 24 万张混合车牌上训练 15 轮后,测试集(105 张)准确率达 90.4%
2.4、添加ONNX 导出
- 支持动态 batch(可选);
- 兼容 ONNX Runtime / TensorRT / OpenVINO。
2.5、推理与可视化
- 支持
.pth(PyTorch)和.onnx双模型加载; - 内置 Hough 直线检测 + 自动旋转校正(
auto_rotate_image):
3、数据集
统计数量
- test_lprnet :总 105 张
- val_lprnet:总 690 张
- train_lprnet:总 254703 张
test_lprnet 部分测试集
val_lprnet 部分验证集
train_lprnet 部分训练集
详细介绍请看文章
【深度学习04】基于改进 LPRNet 的高效车牌识别系统:从数据构建到工业部署的完整实践(包含源码+数据集(25万张)+训练模型)-CSDN博客
4、购买获得以下内容
源代码
数据集
提醒:本项目目前只识别单层中国区黄绿蓝车牌,如要支持其他地区可自行搜集数据集训练。