news 2026/8/14 11:28:36

基于YOLOv8的车牌识别与定位系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于YOLOv8的车牌识别与定位系统

本项目基于 YOLOv8 实现车牌检测与定位,提供完整的训练流程与可视化桌面应用,支持图片、视频、摄像头多种输入方式的实时检测。


一、项目技术栈

类别技术
深度学习框架PyTorch、Ultralytics YOLOv8
计算机视觉OpenCV
桌面 UIPyQt6
数据处理NumPy、Pandas
可视化Matplotlib
其他PyYAML、Pillow、EasyOCR

二、数据集说明

2.1 数据来源

采用CCPD2020(Chinese City Parking Dataset 2020)数据集,经 PASCAL VOC 格式整理后的CCPD2020-voc版本。

2.2 图片种类与数量

子集图像数量标注数量用途
训练集 (train)5,7695,769模型训练
验证集 (val)1,0011,001验证与早停
测试集 (test)5,0065,006最终评估
合计11,77611,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 训练流程

  1. 数据准备:从CCPD2020-voc读取 VOC 标注,转换为 YOLO 格式
  2. 配置生成:生成dataset/data.yaml(路径、类别等)
  3. 模型训练:使用 YOLOv8n 预训练权重进行微调

3.2 主要训练参数

参数取值说明
模型YOLOv8n轻量级 backbone
Epochs100训练轮数
Batch size16每批样本数
图像尺寸640×640输入分辨率
Patience50早停耐心值
设备0GPU 编号
Workers4数据加载线程数

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召回率,实际正例中被正确预测的比例
mAP50IoU=0.5 时的平均精度均值
mAP50-95IoU 从 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.txt

7.3 启动桌面应用

python app.py

默认账号:admin/123456

7.4 数据准备

CCPD2020-voc数据集置于项目根目录,结构与数据集结构说明.md一致。运行train.py时会自动完成 VOC→YOLO 转换。


八、作者与开发信息

  • 作者:Jay
  • 定制联系:vx Jay8059
  • 开发日期:2026 年

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 15:56:01

提醒饮水系统(有完整资料)

资料查找方式:特纳斯电子(电子校园网):搜索下面编号即可编号:T0662205M设计简介:本设计是基于单片机的提醒饮水系统,主要实现以下功能:1、可设置提醒次数与提醒时间间隔 2、可通过温…

作者头像 李华
网站建设 2026/7/14 15:56:03

渗透测试之MSF讲解

一.MSF的简介 MSF全称是The Metasploit Framework,是一个开源的漏洞检测工具,可用于信息收集、漏洞探测、漏洞利用等渗透测试的全流程,本身附带2000多个已知软件漏洞的专业级漏洞攻击工具,被安全社区称为可以黑掉全宇宙&#xff0…

作者头像 李华
网站建设 2026/7/14 15:56:02

编写一个dockerfile,实现一个打包好的jenkins直接用

文章目录 前言 一、总体文件需求 二、编写Dockerfile 三、docker build& docker push 四、使用docker pull&docker run 五、相关连接 前言 我有一篇文章,关于如何在centos中安装jenkins并且配置的方法。但是因为每次安装都要安装很多东西(jdk17,jenkins,git,maven,n…

作者头像 李华
网站建设 2026/7/14 15:56:02

【AI领域】OpenClaw 实战指南:手把手教你更新大模型

OpenClaw 作为轻量高效的 AI Agent 调度平台,凭借灵活的扩展性成为开发者连接多模型的首选工具。但官方默认配置仅支持有限接口,对于追求低成本、高稳定性的开发者来说,接入第三方 API是更优解 —— 不仅能大幅降低 token 消耗,还…

作者头像 李华
网站建设 2026/7/14 15:56:01

Python爬虫实战:基于 Python 的多版本文档差异自动化追踪系统!

㊗️本期内容已收录至专栏《Python爬虫实战》,持续完善知识体系与项目实战,建议先订阅收藏,后续查阅更方便~ ㊙️本期爬虫难度指数:⭐⭐⭐ (进阶) 🉐福利: 一次订阅后,专栏内的所有文…

作者头像 李华
网站建设 2026/7/14 15:56:03

没有学不会的义务之动态内存管理

为什么要有动态内存管理:让程序员自己可以申请和释放空间(数组等开辟空间的大小是固定的)内存中的不同区malloc函数功能:向内存的堆区申请一块连续可用的空间,并返回指向这块空间的起始地址。1.如果开辟成功&#xff0…

作者头像 李华