
项目中所用到的算法模型和数据集等信息如下:
算法模型:
yolov8、yolov8 + SE注意力机制
车牌OCR识别模型:
LPRNet
数据集:
CCPD2019、CCPD2020数据集
以上是本套代码算法的简单说明,添加注意力机制可作为创新点 。如果要是需要其他的检测模型,请私信。

功能展示:
部分核心功能如下:
- 功能1: 支持单张图片识别
- 功能2: 支持遍历文件夹识别
- 功能3: 支持识别视频文件
- 功能4: 支持摄像头识别
- 功能5: 支持结果文件导出(xls格式)
- 功能6: 支持切换检测到的目标查看
更多的其他功能可以通过下方视频演示查看。
整体功能演示:
基于深度学习的车牌识别系统
1. 识别单张图片
系统允许选择图片文件进行识别,点击图片选择按钮图标选择图片后,显示所有识别的结果,本功能的界面展示如下图所示:
识别单张图片
2. 识别文件夹下所有图片
系统允许选择整个文件夹进行识别,选择文件夹后,自动遍历文件夹下的所有图片文件,并将识别结果实时显示在右下角的表格中,本功能展示效果如下:
识别文件夹下所有图片
3. 识别视频
很多时候我们需要识别一段视频中的车牌,这里设计了视频选择功能。点击视频按钮可选择待检测的视频,系统会自动解析视频,逐帧识别多个车牌,并将结果记录在右下角表格中,效果如下图所示:
识别视频
4. 导出识别结果
本系统还添加了对识别结果的导出功能,方便后续查看,目前支持导出 csv 和 xls 两种数据格式,功能展示如下:
识别结果保存为csv、xls
下面是对代码中使用到的重点资源、知识点的详细介绍:
🌟 一、环境安装
文档中有详细的环境安装指南,包括 Python、PyCharm、CUDA、Torch 等库的安装步骤,所有版本均已适配。你可以根据文档或视频教程一步步完成安装。
经过三年多的经验积累,我整理了在帮助他人安装环境过程中常见的问题和解决方法,并汇总到这份文档中。无论你是使用 GPU 版还是 CPU 版,都能找到相关的安装细节和说明。文档会定期更新,以确保最新的环境配置和优化,供大家参考。
文档截图如下:

一、数据集
简介
CCPD是一个大型的、多样化的、经过仔细标注的中国城市车牌开源数据集。CCPD数据集主要分为CCPD2019数据集和CCPD2020(CCPD-Green)数据集。CCPD2019数据集车牌类型仅有普通车牌(蓝色车牌),CCPD2020数据集车牌类型仅有新能源车牌(绿色车牌)。
在CCPD数据集中,每张图片仅包含一张车牌,车牌的车牌省份主要为皖。
1. CCPD数据集下载:
(1)百度网盘下载链接(个人上传):
https://pan.baidu.com/s/1ZvbRUsPwpJk_39FujpjObw?pwd=nygt 提取码:nygt
(2)github下载:https://github.com/detectRecog/CCPD,github中包含详细的数据说明介绍
2. 数据集说明
CCPD2019中主要包含以下几个文件夹,
CCPD-Base:通用车牌图片,共200k
CCPD-FN:车牌离摄像头拍摄位置相对较近或较远,共20k
CCPD-DB:车牌区域亮度较亮、较暗或者不均匀,共20k
CCPD-Rotate:车牌水平倾斜20到50度,竖直倾斜-10到10度,共10k
CCPD-Tilt:车牌水平倾斜15到45度,竖直倾斜15到45度,共10k
CCPD-Weather:车牌在雨雪雾天气拍摄得到,共10k
CCPD-Challenge:在车牌检测识别任务中较有挑战性的图片,共10k
CCPD-Blur:由于摄像机镜头抖动导致的模糊车牌图片,共5k
CCPD-NP:没有安装车牌的新车图片,共5k
CCPD2020中的图像被拆分为train/val/test数据集。
3.CCPD数据集标注处理
CCPD数据集没有专门的标注文件,每张图像的文件名就是该图像对应的数据标注。例如图片3061158854166666665-97_100-159&434_586&578-558&578_173&523_159&434_586&474-0_0_3_24_33_32_28_30-64-233.jpg的文件名可以由分割符’-'分为多个部分:
(1)3061158854166666665:区域(这个值可能有问题,无用);
(2)97_100:对应车牌的两个倾斜角度-水平倾斜角和垂直倾斜角, 水平倾斜97度, 竖直倾斜100度。水平倾斜度是车牌与水平线之间的夹角。二维旋转后,垂直倾斜角为车牌左边界线与水平线的夹角。
(3)159&434_586&578:对应边界框左上角和右下角坐标:左上(159, 434), 右下(586, 578);
(4)558&578_173&523_159&434_586&474:对应车牌四个顶点坐标(右下角开始顺时针排列):右下(558, 578),左下(173, 523),左上(159, 434),右上(586, 474);
(5)0_0_3_24_33_32_28_30:为车牌号码(第一位为省份缩写),在CCPD2019中这个参数为7位,CCPD2020中为8位,有对应的关系表;
(6)64:为亮度,数值越大车牌越亮(可能不准确,仅供参考);
(7)233:为模糊度,数值越小车牌越模糊(可能不准确,仅供参考)。
4. CCPD数据集处理相关脚本
(1)CCPD数据集转VOC,xml文件保存
import shutil
import cv2
import os
from lxml import etree
class labelimg_Annotations_xml:
def __init__(self, folder_name, filename, path, database="Unknown"):
self.root = etree.Element("annotation")
child1 = etree.SubElement(self.root, "folder")
child1.text = folder_name
child2 = etree.SubElement(self.root, "filename")
child2.text = filename
# child3 = etree.SubElement(self.root, "path")
# child3.text = path
child4 = etree.SubElement(self.root, "source")
child5 = etree.SubElement(child4, "database")
child5.text = database
def set_size(self, width, height, channel):
size = etree.SubElement(self.root, "size")
widthn = etree.SubElement(size, "width")
widthn.text = str(width)
heightn = etree.SubElement(size, "height")
heightn.text = str(height)
channeln = etree.SubElement(size, "channel")
channeln.text = str(channel)
def set_segmented(self, seg_data=0):
segmented = etree.SubElement(self.root, "segmented")
segmented.text = str(seg_data)
def set_object(self, label, x_min, y_min, x_max, y_max,
pose='Unspecified', truncated=0, difficult=0):
object = etree.SubElement(self.root, "object")
namen = etree.SubElement(object, "name")
namen.text = label
posen = etree.SubElement(object, "pose")
posen.text = pose
truncatedn = etree.SubElement(object, "truncated")
truncatedn.text = str(truncated)
difficultn = etree.SubElement(

最低0.47元/天 解锁文章
1138

被折叠的 条评论
为什么被折叠?



