视频演示
源码调试-带你了解下车牌识别的深度学习模型-LPRNet
大家好,这里是Coding茶水间。本期我们来调试运行一个经典的深度学习网络——LPRNet,它专门用于车牌识别任务。
LPRNet是由Intel团队开发的端到端深度学习模型,专为车牌识别优化,具有轻量级的特性。
下面我们一步步来探索它的源码、环境搭建和实际运行。
1. LPRNet简介
LPRNet支持识别蓝牌和绿牌(新能源车牌)。它基于PyTorch框架,结合OpenCV进行图像处理,适用于Python 3.0以上版本。
在GitHub上,作者提供了模型的识别效果展示,包括模糊、污损或倾斜的车牌图片。
2. 获取源码
打开LPRNet的GitHub页面(网址可在视频简介中获取)。点击“Code”按钮下载ZIP压缩包,或使用Git命令克隆仓库:
下载后解压,使用VS Code或其他IDE打开项目。
3. 源码结构分析
项目结构如下:
- data:数据集文件夹,包含测试用的车牌图片。这些图片包括模糊、污损或倾斜的样本。
- load_data.py:用于加载数据集的脚本。
- model:核心文件夹,包含LPRNet网络结构代码。
- weights:预训练权重文件(Final_LPRNet_model.pth)。
- train_LPRNet.py 和 test_LPRNet.py:训练和测试脚本。
4. 环境要求
- Python 3.0+
- PyTorch
- OpenCV
- NumPy 等基础库
确保安装这些依赖后,即可运行。
5. 测试模型性能
使用作者提供的test_LPRNet.py对测试图片进行批量验证,检查模型性能。
6. 单张图片识别
在实际应用中,我们常需要对单张车牌图像进行识别。下面是针对单张图片的自定义代码(基于LPRNet)。代码使用OpenCV读取图片,进行预处理,并输出识别结果。
代码实现
7. 运行效果演示
选取一张车牌图片(例如从网上下载的分割好的图像),甚至可以对最后一位字符进行裁切测试。运行代码后,结果会直接叠加在图片上显示。
例如:
- 测试一张蓝牌:识别准确。
- 测试一张绿牌(新能源):也支持识别。
8. 代码分析
预训练模型加载
设置预训练模型路径(如./weights/Final_LPRNet_model.pth),检查文件存在性。然后使用build_lprnet构建模型,选择设备(CPU或CUDA)。
图像读取与预处理
使用OpenCV读取图片:
- Resize到94x24分辨率。
- 转换为float32类型。
- 减去127.5,使像素值范围变为-127.5到127.5(以0为中心,便于模型收敛)。
- 乘以0.0078125,使范围接近-1到1(像素归一化)。
- 转置维度:从HWC (Height, Width, Channels) 转为CHW。
- 添加batch维度,成为4维张量(batch_size, channels, height, width)。
预测与解码
如果使用CUDA,将图像移到GPU。关闭梯度计算(with torch.no_grad())以加速预测。得到输出后,解码为字符序列,去除重复和空白标签,最终转换为车牌号字符串。
显示结果
使用PIL在原图上添加文本,显示识别结果。
9. 注意事项
- Mac用户默认使用CPU;NVIDIA显卡用户可启用CUDA加速。
- 如果想获取单张图片处理代码,欢迎三连+关注,并留言邮箱。
- 模型适用于已分割的车牌图像;实际应用中可结合检测模型(如YOLO)进行完整识别。
如果想深入了解车牌识别更多内容,欢迎关注Coding茶水间,我会持续输出相关教程!