基于 YOLOv8 + CRNN 的车牌识别系统

本项目基于 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 年

相关推荐
君为先-bey1 小时前
LightningDiT----重建与生成:在潜在扩散模型中驯服优化困境
深度学习·扩散模型·视频生成·潜在扩散模型
装不满的克莱因瓶1 小时前
掌握基于YOLO v5实现车牌目标检测任务的完整流程——从数据到部署的工业级实践
人工智能·python·深度学习·yolo·目标检测·计算机视觉·目标跟踪
逻辑君1 小时前
认知神经科学研究报告【20260087】
人工智能·深度学习·机器学习
大模型最新论文速读1 小时前
TRUST:RL 时保留模型的不确定性,效果提升 8%
论文阅读·人工智能·深度学习·机器学习·自然语言处理
大奎帝国1 小时前
Segearth-r2-05
计算机视觉·cv
有来有去95272 小时前
【训推框架】Vime-大规模 LLM/VLM 强化学习训练框架
人工智能·深度学习·语言模型·gpu算力·vllm
2401_885665192 小时前
从零搭建CNN到迁移学习:以食物分类为例深入理解PyTorch图像分类实战
人工智能·pytorch·深度学习·分类·cnn·迁移学习
云和数据.ChenGuang2 小时前
metrics的解释 人工智能
人工智能·深度学习·学习·机器学习·概率论
奔袭的算法工程师2 小时前
论文解读--Sparse4D v3: Advancing End-to-End 3D Detection and Tracking
人工智能·目标检测·计算机视觉·自动驾驶·信号处理