别再调云端接口!用 YOLO + LPRNet 搞定中文车牌识别

80 阅读4分钟

中文车牌识别系统(YOLO + LPRNet)

一个基于深度学习的中文车牌识别系统,集成 YOLO 目标检测LPRNet 字符识别 技术,支持从单张图片、视频文件或实时摄像头流中自动检测并识别车牌信息,涵盖蓝牌、绿牌(新能源)等中国主流车牌类型。

图片检测效果

b5129689384198131183dd6bab8fbce9_run_image.png

视频检测效果

23c56282eb12f480865e53a8a487c8a6_run_video.png

项目特点

1、精准检测:采用 YOLO 系列模型(支持 YOLOv8 / YOLOv11),高效定位复杂场景下的车牌位置

2、高效识别:基于 LPRNet 端到端识别模型,直接输出包含中文、字母、数字的完整车牌号

3、友好界面:使用 PySide6 构建图形用户界面,一键切换图片/视频/摄像头模式

4、多源输入:无缝支持静态图像、视频文件和实时摄像头流

5、多种车牌支持:兼容蓝牌、黄牌、绿牌(新能源八位车牌)等中国常见类型

6、跨平台运行:可在 Windows、Linux 和 macOS 上部署运行

项目结构

YOLO_LPRNet_Pytorch/
├── main.py                       # GUI 主程序入口
├── demo_integrated_lpr.py        # 集成演示脚本
├── train_yolo.py                 # YOLO 检测模型训练
├── train_LPRNet.py               # LPRNet 识别模型训练
├── test_yolo.py / test_LPRNet.py # 模型测试脚本
├── prepare_ccpd_data.py          # CCPD 数据集预处理
├── install_dependencies.py       # 依赖自动安装脚本
├── requirements.txt              # 依赖清单
├── data/
│   ├── NotoSansCJK-Regular.ttc   # 中文字体(用于结果绘制)
│   └── lprnet/                   # LPRNet 训练数据
├── model/
│   └── LPRNet.py                 # LPRNet 网络定义
├── images/                       # 示例图片与视频
├── weights/                      # 预训练模型权重
│   ├── best.pt                   # YOLO 最佳权重
│   └── Final_LPRNet_model.pth    # LPRNet 权重
├── yolo_utils.py                 # YOLO 工具函数
├── yolo_config.yaml              # YOLO 配置文件
└── yolov8n.pt / yolo11n.pt       # YOLO 预训练主干模型

快速开始

1、环境配置

确保已安装 Python ≥ 3.8,运行:

python install_dependencies.py

核心依赖包括:

  • torch >= 1.7.1torchvision

  • opencv-python >= 4.5.0

  • ultralytics >= 8.0.0(YOLOv8/v11 支持)

  • PySide6 >= 6.4.0(GUI)

  • pillow(含中文字体支持)

2、启动应用

python main.py

启动后可通过 GUI 界面选择图片、视频或开启摄像头进行实时识别。

3、功能操作

  • 选择图片:上传单张图像进行识别

  • 选择视频:加载本地视频文件逐帧分析

  • 打开摄像头:调用默认摄像头实时检测

  • 暂停/停止:控制视频或摄像头流处理状态

模型训练(可选)

1、训练 YOLO 车牌检测模型

  • 使用 CCPD 数据集(推荐 CCPD2020 + ccpd_green
  • 预处理
python prepare_ccpd_data.py --ccpd_root ./data/CCPD/CCPD2020/ccpd_green --output_dir ./data/yolo
  • 训练
python train_yolo.py --model yolov8n.pt --epochs 50 --batch_size 16

2、训练 LPRNet 字符识别模型

  • 先用训练好的 YOLO 模型裁剪车牌区域:
python extract_ccpd_plates.py --ccpd_root ./data/CCPD/... --model_path ./weights/best.pt
  • 再训练 LPRNet:
python train_LPRNet.py

测试与评估

  • 单独测试 YOLO
python test_yolo.py --model ./weights/best.pt --input ./images/test.jpg --save
  • 单独测试 LPRNet
python test_LPRNet.py
  • 端到端集成测试
python demo_integrated_lpr.py --yolo_model ./weights/best.pt --lpr_model ./weights/Final_LPRNet_model.pth --image ./images/test.jpg

技术原理

1、YOLO 车牌检测

单阶段目标检测,一次前向传播完成定位,速度快、精度高,适应多角度、遮挡、光照变化场景。

2、LPRNet 字符识别

专为车牌设计的轻量 CNN 模型,无需字符分割,通过 CTC 损失直接输出变长车牌字符串,支持中文+字母+数字混合识别。

3、系统流程

输入 → YOLO 检测车牌 → 裁剪区域 → LPRNet 识别 → 叠加结果 → 显示/保存

常见问题与解决方案

  • 中文乱码:确保系统有中文字体(如 SimHei 或项目内置 NotoSansCJK

  • 模型加载失败:检查权重路径是否正确,文件是否完整

  • 检测漏检/误检:调整 --conf(置信度)和 --iou 阈值

  • 性能不足:改用 yolov8nyolo11n 小模型,降低输入分辨率

  • 摄像头打不开:尝试修改设备索引(如 cv2.VideoCapture(0)(1)

关键词

YOLOv8、LPRNet、中文车牌识别、车牌检测、字符识别、PySide6、CCPD、端到端识别、新能源车牌、本地部署

最后

如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。

也可以加入微信公众号 [DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!

优秀是一种习惯,欢迎大家留言学习!