车牌检测识别系统实战:YOLOv8/YOLO11/YOLO26、HyperLPR3与PyQt5界面(源码、数据集、训练及SE改进)
车牌检测识别系统实战YOLOv8/YOLO11/YOLO26、HyperLPR3与PyQt5界面源码、数据集、训练及SE改进大家好我是孔一学长。这篇文章完整拆解一套Python车牌检测识别系统。它不是只运行一行YOLO预测命令而是把车牌数据集、模型训练、车牌框检测、HyperLPR3文字识别、PyQt5界面和CSV结果保存接在了一起。项目整理了YOLOv8、YOLO11、YOLO26和YOLO11SE四个版本。下面以YOLO11为主线说明项目目录、数据配置、训练参数、评价指标和界面调用关系。1. 先看车牌检测识别效果运行main.py后可以选择单张图片、图片文件夹、测试视频或摄像头。下面是单张图片的实际运行结果。完整运行演示包含单图、批量图片、视频检测和结果导出车牌检测识别系统运行效果视频。视频以YOLO11版本演示其他版本的功能入口和操作流程基本一致。系统先用YOLO定位车牌再裁剪车牌区域交给HyperLPR3。界面显示检测框、车牌文字“沪KR9888”、检测置信度、文字识别置信度、坐标和耗时下方表格保存完整结果。这里要分清两个置信度YOLO的检测置信度评价车牌框HyperLPR3的识别置信度评价车牌文字。两者不能互相替代。2. 项目环境与主要依赖项目使用Python主要组件包括Ultralytics YOLO完成车牌目标检测HyperLPR3识别裁剪后的车牌文字PyQt5负责界面、按钮、表格和状态显示OpenCV读取图片、视频和摄像头画面Pandas或CSV相关模块保存表格结果。不同YOLO版本分别放在独立项目文件夹中。第一次配置时应先打开项目内的requirements.txt和“打开后必看”说明按照所选版本建立环境。不要把四个版本的依赖和权重路径混在同一个配置里。最小运行入口是python main.py如果界面没有正常打开先检查Python解释器是否选中了刚配置的环境再检查项目配置.yaml中的权重路径。3. 项目目录结构YOLO11版本的主要目录如下车牌检测_YOLO11_PyQt5_标准成品项目/ ├── main.py # 程序入口和检测逻辑 ├── ui.py # PyQt5界面 ├── lpr_utils.py # 车牌裁剪与文字识别 ├── train.py # 训练入口 ├── val.py # 独立验证 ├── predict.py # 命令行预测 ├── config_utils.py # 配置读取 ├── 项目配置.yaml # 权重、阈值与界面标题 ├── myvoc.yaml # 数据集路径和类别 ├── datasets/ # 图像与YOLO标签 ├── runs/ # 权重、日志和指标图 ├── test_images/ # 单图、批量测试素材 ├── test_video.mp4 # 视频测试素材 └── 数据指标图表/ # 架构、流程和实验图片想看界面从main.py和ui.py开始想重新训练从myvoc.yaml、datasets和train.py开始想研究文字识别就沿着main.py中的检测函数找到lpr_utils.py。4. 车牌数据集配置项目共有24238张车牌图像按照8:1:1划分训练集19390张、验证集2424张、测试集2424张。数据集只有一个目标检测类别License_Plate。myvoc.yaml配置如下path:datasets/datasettrain:images/trainval:images/valtest:images/testnc:1names:0:License_Plate每张图像对应一个同名TXT标签保存车牌框的归一化中心点坐标、宽度和高度。准备自己的数据时图片和标签要一一对应否则训练阶段会出现找不到标签或有效目标数量异常。5. 图像预处理与数据增强训练输入尺寸为640×640。图像缩放时保持长宽比空余区域补边再进行归一化。训练阶段还使用轻微旋转、平移、尺度缩放、剪切和水平翻转。前90轮启用Mosaic最后10轮关闭让模型在训练末期回到更接近原始图像的分布。这些增强是为了让模型适应拍摄距离、角度和背景变化不代表任何增强组合都一定有效。改动参数后应重新查看验证集指标。6. YOLO11训练参数正式训练配置为epochs100,batch16,imgsz640optimizerSGD,lr00.01,lrf0.01momentum0.937,weight_decay0.0005warmup_epochs3.0,cos_lrTrueseed42,deterministicTrue显存不足时可以降低batch但新的实验要保留自己的训练记录不能直接沿用原来的结果数字。训练结束后runs/train/yolo11_license_plate/中会生成best.pt、last.pt、results.csv、参数文件、损失曲线、PR曲线和混淆矩阵。7. 训练结果与指标解释YOLO11的best.pt在验证集上独立评估得到指标结果Precision0.9816Recall0.9794mAP500.9930mAP50-950.7195Precision回答“框出来的目标有多少是真车牌”Recall回答“原本存在的车牌有多少被找到”。mAP50-95使用更严格的一组IoU阈值所以通常低于mAP50。这些数字只评价车牌位置检测。车牌文字是否正确需要单独建立带真实文本标注的测试集不能把YOLO的mAP写成字符识别准确率。8. YOLO与HyperLPR3怎样连接系统调用关系可以简化成图片/视频/摄像头 ↓ YOLO输出车牌边界框 ↓ lpr_utils.py裁剪车牌区域 ↓ HyperLPR3输出车牌文字和识别置信度 ↓ ui.py更新图像、信息栏和结果表格 ↓ 保存CSV结果main.py中可以重点查看这些函数select_img()选择单张图片select_folder()批量读取文件夹select_video()、display_video_frame()视频逐帧检测button_open_camera_clicked()、show_camera()摄像头输入detect_pic()复用检测和文字识别逻辑save_current_result()保存表格结果。9. 权重和阈值配置项目配置.yaml集中管理模型路径和阈值model:name:YOLO11基础版algorithm:YOLO11weights:runs/train/yolo11_license_plate/weights/best.ptconf:0.5iou:0.5lpr:enabled:truelibrary:hyperlpr3更换自己训练的模型时先修改weights再启动界面。相对路径以项目根目录为基准项目文件夹被拆散或PyCharm工作目录设置错误时最容易出现权重找不到的问题。10. 四个版本与SE改进YOLOv8适合任务书明确指定YOLOv8YOLO11本文主讲版本训练、验证和界面链路完整YOLO26适合指定版本或多版本实现比较YOLO11SE在P3高分辨率融合位置加入SE通道注意力。同一验证方式下SE版本的mAP50-95从约0.71947提高到0.72676增加约0.73个百分点mAP50没有同步提升。做改进实验时应把这两个结果一起写清楚而不是概括成所有指标都提升。11. 常见运行检查界面启动后提示权重不存在检查项目配置.yaml路径和PyCharm工作目录。训练时找不到图片或标签检查myvoc.yaml、images/labels目录层级和同名文件。能检测车牌但不显示文字检查HyperLPR3依赖是否安装以及车牌裁剪区域是否有效。视频显示卡顿完整流程还包含读取、YOLO推理、文字识别、界面绘制和表格更新不能只用YOLO单次推理时间判断界面帧率。这套项目适合课程学习、算法实验和答辩演示不应直接用于道路执法或商业生产。极端夜间、严重遮挡和特殊车牌需要额外数据验证。12. 项目代码获取当前项目已整理好四个版本的源码、数据集、训练权重、训练结果、PyQt5界面、测试素材、版本说明和使用说明。由于篇幅限制完整源码、训练好的模型权重以及项目配套资料请复制下方地址在浏览器中打开获取。https://smallerkong.com/?utm_sourcecsdnutm_mediumarticleutm_campaignlisting-yolov8-car-plate-pyqt5-20260831-v1#project/yolov8-car-plate-pyqt5