本项目基于 YOLOv8 实现车牌检测与定位,提供完整的训练流程与可视化桌面应用,支持图片、视频、摄像头多种输入方式的实时检测。
一、项目技术栈
| 类别 | 技术 |
|---|---|
| 深度学习框架 | PyTorch、Ultralytics YOLOv8 |
| 计算机视觉 | OpenCV |
| 桌面 UI | PyQt6 |
| 数据处理 | NumPy、Pandas |
| 可视化 | Matplotlib |
| 其他 | PyYAML、Pillow、EasyOCR |
二、数据集说明
2.1 数据来源
采用CCPD2020(Chinese City Parking Dataset 2020)数据集,经 PASCAL VOC 格式整理后的CCPD2020-voc版本。
2.2 图片种类与数量
| 子集 | 图像数量 | 标注数量 | 用途 |
|---|---|---|---|
| 训练集 (train) | 5,769 | 5,769 | 模型训练 |
| 验证集 (val) | 1,001 | 1,001 | 验证与早停 |
| 测试集 (test) | 5,006 | 5,006 | 最终评估 |
| 合计 | 11,776 | 11,776 | — |
2.3 图片内容
- 格式:JPG
- 内容:含车牌的完整场景图像(车辆、道路等)
- 标注:PASCAL VOC XML,包含车牌边界框 (xmin, ymin, xmax, ymax)
- 类别:单类别
plate(车牌)
2.4 数据集结构
CCPD2020-voc/ ├── train/ │ ├── Annotations/ # XML 标注 │ └── JPEGImages/ # 训练图像 ├── val/ │ ├── Annotations/ │ └── JPEGImages/ └── test/ ├── Annotations/ └── JPEGImages/训练前会将 VOC 格式转换为 YOLO 格式(归一化坐标),输出至dataset/目录。
三、训练过程与参数
3.1 训练流程
- 数据准备:从
CCPD2020-voc读取 VOC 标注,转换为 YOLO 格式 - 配置生成:生成
dataset/data.yaml(路径、类别等) - 模型训练:使用 YOLOv8n 预训练权重进行微调
3.2 主要训练参数
| 参数 | 取值 | 说明 |
|---|---|---|
| 模型 | YOLOv8n | 轻量级 backbone |
| Epochs | 100 | 训练轮数 |
| Batch size | 16 | 每批样本数 |
| 图像尺寸 | 640×640 | 输入分辨率 |
| Patience | 50 | 早停耐心值 |
| 设备 | 0 | GPU 编号 |
| Workers | 4 | 数据加载线程数 |
3.3 运行训练
python train.py训练完成后,最佳权重保存在runs/train/license_plate_detection/weights/best.pt。
四、可视化图表含义
训练结果可视化脚本visualize_training.py基于results.csv生成以下图表:
4.1 损失曲线 (loss_curves.png)
| 子图 | 含义 |
|---|---|
| Box Loss | 边界框回归损失,衡量预测框与真实框的偏差 |
| Classification Loss | 分类损失,衡量类别预测的准确性 |
| DFL Loss | 分布焦点损失,用于边界框的分布建模 |
每条曲线包含 Train(训练集)与 Val(验证集),用于判断过拟合与收敛情况。
4.2 评估指标曲线 (metrics_curves.png)
| 指标 | 含义 |
|---|---|
| Precision | 精确率,预测为正例中实际为正例的比例 |
| Recall | 召回率,实际正例中被正确预测的比例 |
| mAP50 | IoU=0.5 时的平均精度均值 |
| mAP50-95 | IoU 从 0.5 到 0.95 步长 0.05 的 mAP 均值,综合评估指标 |
图中会标注最佳 Epoch 及对应 mAP50-95 值。
4.3 学习率曲线 (learning_rate.png)
展示训练过程中学习率随 Epoch 的变化,用于检查学习率调度是否合理。
4.4 综合汇总图 (training_summary.png)
2×2 子图,包含:总损失、核心指标、训练损失分解、累计训练时间。
4.5 mAP 对比图 (mAP_comparison.png)
对比 mAP50 与 mAP50-95 随 Epoch 的变化,并标注最佳 Epoch。
4.6 运行可视化
python visualize_training.py图表输出至runs/detect/runs/train/license_plate_detection/目录。
五、系统功能
5.1 登录与注册
- 本地用户管理,支持注册与登录
- 用户数据存储在
local_data/users.json
5.2 图片识别
- 打开本地图片进行检测
- 左侧预览原图与检测结果,右侧展示统计与明细
- 支持导出结果图、导出 CSV
- 统计卡片:目标总数、类别数、平均置信度、最高置信度
- 类别分布表、详细数据表(序号、类别、置信度、坐标、面积)
5.3 视频识别
- 打开本地视频文件
- 支持按帧间隔检测(默认每 2 帧)
- 实时显示检测结果与累计统计
- 支持导出当前帧
5.4 摄像头识别
- 实时摄像头画面检测
- 可切换摄像头索引、检测开关
- 支持截图保存
- 显示当前帧与累计统计
5.5 历史记录
- 只读查询所有检测记录
- 支持按类型(图片/视频/摄像头)筛选、关键词搜索
- 支持导出历史 CSV
5.6 模型选择
- 默认使用
runs/detect/runs/train/license_plate_detection/weights/best.pt - 支持浏览并加载自定义
.pt模型 - 可配置置信度阈值、IoU 阈值、最大检测数
5.7 指标展示
- 训练曲线:损失、P/R、mAP、学习率
- 指标汇总:mAP50、mAP50-95、Precision、Recall 等统计卡片及条形图、雷达图
- 可视化图表:mAP 对比、总损失曲线等
六、项目结构
c90/ ├── app.py # 桌面应用入口 ├── train.py # 训练脚本 ├── visualize_training.py # 训练结果可视化 ├── requirements.txt # 依赖列表 ├── dataset/ # 转换后的 YOLO 数据集 │ ├── data.yaml │ ├── images/ │ │ ├── train/ │ │ ├── val/ │ │ └── test/ │ └── labels/ │ ├── train/ │ ├── val/ │ └── test/ ├── ui_app/ # 桌面应用模块 │ ├── config.py # 路径与常量配置 │ ├── storage.py # 用户、历史、设置存储 │ ├── styles.py # QSS 样式 │ ├── detector.py # YOLO 检测封装 │ ├── 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/ # 本地数据(用户、历史、设置) ├── runs/ # 训练输出与权重 │ └── detect/runs/train/license_plate_detection/ │ ├── weights/ │ │ └── best.pt │ ├── results.csv │ └── args.yaml └── 数据集结构说明.md # 数据集说明文档七、运行说明
7.1 环境要求
- Python 3.9+
- 建议使用 GPU(CUDA)以加速训练与推理
7.2 安装依赖
pip install -r requirements.txt7.3 启动桌面应用
python app.py默认账号:admin/123456。
7.4 数据准备
将CCPD2020-voc数据集置于项目根目录,结构与数据集结构说明.md一致。运行train.py时会自动完成 VOC→YOLO 转换。
八、作者与开发信息
- 作者:Jay
- 定制联系:vx Jay8059
- 开发日期:2026 年