本项目基于 YOLOv8 + CRNN+CTC 双模型流水线实现车牌检测与字符识别,提供完整的训练流程与可视化桌面应用,支持图片、视频、摄像头多种输入方式的实时检测,并能直接输出车牌号码字符串。
一、项目技术栈
| 类别 | 技术 |
|---|---|
| 车牌检测 | Ultralytics YOLOv8(目标检测) |
| 车牌字符识别 | CRNN(CNN + BiLSTM)+ CTC Loss |
| 深度学习框架 | PyTorch |
| 计算机视觉 | OpenCV、Pillow |
| 桌面 UI | PyQt6 |
| 数据处理 | NumPy、Pandas |
| 可视化 | Matplotlib |
| 其他 | PyYAML、EasyOCR |
二、整体识别流程
输入图像/视频/摄像头
│
▼
YOLOv8 检测
└─ 输出:车牌边界框 + 置信度
│
▼
裁剪车牌区域(外扩 12% margin)
│
▼
CRNN + CTC 字符识别
└─ 输出:车牌号码字符串(如 粤B12345)
│
▼
结果叠加展示(PIL 渲染中文)
三、数据集说明
3.1 数据来源
采用 CCPD2020 (Chinese City Parking Dataset 2020)数据集,经 PASCAL VOC 格式整理后的 CCPD2020-voc 版本。文件名中编码了车牌号信息,供 CRNN 训练使用。
3.2 图片种类与数量
| 子集 | 图像数量 | 用途 |
|---|---|---|
| 训练集 (train) | 5,769 | YOLO 检测 + CRNN 字符识别训练 |
| 验证集 (val) | 1,001 | 验证与早停 |
| 测试集 (test) | 5,006 | 最终评估 |
| 合计 | 11,776 | --- |
3.3 数据集结构
CCPD2020-voc/
├── train/
│ ├── Annotations/ # XML 标注
│ └── JPEGImages/ # 训练图像(文件名含车牌编码)
├── val/
│ ├── Annotations/
│ └── JPEGImages/
└── test/
├── Annotations/
└── JPEGImages/
训练前自动将 VOC 格式转换为 YOLO 格式,输出至 dataset/ 目录。
四、模型训练
4.1 YOLO 车牌检测训练
python train.py
| 参数 | 取值 |
|---|---|
| 模型 | YOLOv8n(轻量级) |
| Epochs | 100 |
| Batch size | 16 |
| 图像尺寸 | 640×640 |
| Patience | 50(早停) |
训练完成后,最佳权重保存在:
runs/detect/runs/train/license_plate_detection/weights/best.pt
4.2 CRNN 车牌字符识别训练
python plate_recognition/train_recognition.py --epochs 40 --batch-size 64 --device cuda
| 参数 | 取值 |
|---|---|
| 模型 | CRNN(CNN + BiLSTM × 2 + CTC) |
| 输入尺寸 | 32 × 160(灰度) |
| Epochs | 40 |
| 字符集 | 34 个(省份 + 字母 + 数字) |
| 最佳验证准确率 | ~73.4% |
训练完成后,权重与字符表保存在:
runs/detect/runs/train/license_plate_detection/plate_crnn/
├── best.pt # 模型权重 + 字符表
└── chars.json # 字符集列表
4.3 字符集覆盖
当前训练数据中共覆盖以下省份:沪、浙、皖、粤、苏、藏、豫、鄂、鲁(共 9 个)。字母 A-N(除 I、O)及数字 0-9 均已覆盖。其他省份车牌将无法正确识别,需补充数据后重训。
五、可视化图表
运行可视化脚本:
python visualize_training.py
| 图表文件 | 内容 |
|---|---|
loss_curves.png |
Box Loss / Classification Loss / DFL Loss 训练与验证曲线 |
metrics_curves.png |
Precision / Recall / mAP50 / mAP50-95 曲线 |
learning_rate.png |
学习率调度曲线 |
training_summary.png |
2×2 综合汇总(总损失、核心指标、训练分解、耗时) |
mAP_comparison.png |
mAP50 vs mAP50-95 对比 |
图表输出至 runs/detect/runs/train/license_plate_detection/ 目录。
六、系统功能
6.1 登录与注册
-
本地用户管理,支持注册与登录
-
用户数据存储在
local_data/users.json -
默认账号:
admin/123456
6.2 图片识别
-
打开本地图片进行检测
-
YOLO 检测车牌区域 → CRNN 识别车牌号码 → 图像叠加展示
-
统计卡片:目标总数、类别数、平均置信度、最高置信度
-
详细数据表:序号、类别、车牌号、置信度、坐标、面积
-
支持导出结果图(PNG/JPG)、导出 CSV(含车牌号列)
6.3 视频识别
-
打开本地视频文件,按帧间隔检测(默认每 2 帧)
-
实时显示检测画面及本帧识别车牌号
-
支持导出当前帧
6.4 摄像头识别
-
实时摄像头检测,可切换摄像头索引
-
实时统计面板展示本帧车牌号、累计目标数等
-
支持检测开关与截图保存
6.5 历史记录
-
查询所有检测记录,支持按类型筛选、关键词搜索
-
支持导出历史 CSV
6.6 模型选择
-
YOLO 模型:默认
runs/detect/runs/train/license_plate_detection/weights/best.pt -
CRNN 模型:默认
runs/detect/runs/train/license_plate_detection/plate_crnn/best.pt -
支持浏览并加载自定义
.pt模型 -
可配置置信度阈值、IoU 阈值、最大检测数
6.7 指标展示
-
训练曲线:损失、P/R、mAP、学习率
-
指标汇总:mAP50、mAP50-95、Precision、Recall 统计卡片及图表
七、项目结构
c157/
├── app.py # 桌面应用入口
├── train.py # YOLO 训练脚本
├── visualize_training.py # 训练结果可视化
├── requirements.txt # 依赖列表
├── dataset/ # 转换后的 YOLO 数据集
│ ├── data.yaml
│ ├── images/ (train / val / test)
│ └── labels/ (train / val / test)
├── plate_recognition/ # CRNN 字符识别子包
│ ├── model_crnn.py # CRNN 网络定义
│ ├── dataset_plate.py # 数据集加载(CCPD 文件名解析)
│ ├── ccpd_decode.py # CCPD 文件名 → 车牌号解码
│ └── train_recognition.py # CRNN 训练入口
├── ui_app/ # 桌面应用模块
│ ├── config.py # 路径与常量配置
│ ├── storage.py # 用户、历史、设置存储
│ ├── styles.py # QSS 主题样式
│ ├── detector.py # YOLO 检测 + CRNN 识别联动封装
│ ├── recognizer.py # CRNN 推理服务
│ ├── login_window.py # 登录/注册窗口
│ ├── main_window.py # 主窗口(导航+页面堆栈)
│ └── pages/
│ ├── image_page.py # 图片识别页
│ ├── video_page.py # 视频识别页
│ ├── camera_page.py # 摄像头识别页
│ ├── history_page.py # 历史记录页
│ ├── model_page.py # 模型选择页
│ ├── metrics_page.py # 指标展示页
│ └── common.py # 公共组件
├── local_data/ # 本地数据(自动生成)
│ ├── users.json
│ ├── history.json
│ └── settings.json
└── runs/detect/runs/train/license_plate_detection/
├── weights/best.pt # YOLO 最佳权重
├── plate_crnn/
│ ├── best.pt # CRNN 最佳权重 + 字符表
│ └── chars.json # 字符集列表
├── results.csv # 训练日志
└── args.yaml # 训练参数记录
八、运行说明
8.1 环境要求
-
Python 3.9+
-
建议使用 GPU(CUDA)以加速训练与推理
-
中文显示依赖系统字体(微软雅黑 / 黑体 / 宋体,Windows 系统默认已安装)
8.2 安装依赖
pip install -r requirements.txt
8.3 启动桌面应用
python app.py
8.4 训练流程(可选)
# 1. 训练 YOLO 检测模型
python train.py
# 2. 训练 CRNN 字符识别模型
python plate_recognition/train_recognition.py --epochs 40 --batch-size 64 --device cuda
# 3. 可视化训练结果
python visualize_training.py
九、作者与开发信息
-
作者:Jay
-
定制联系:vx Jay8059
-
开发日期:2026 年










