掘金 人工智能 07月29日 16:05
基于yolov5+LPRNet+flask+vue的车牌识别(1)
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文详细介绍了如何使用YOLOv5进行车牌识别。首先,通过Python脚本将CCPD2020数据集转换为YOLOv5所需的训练格式,包括创建images和labels文件夹,并生成yolo格式的标签文件。接着,指导用户创建自定义的'plate.yaml'配置文件,并修改train.py脚本以加载该配置文件进行模型训练。最后,演示了如何修改detect.py脚本,利用训练好的权重文件对图片或视频进行车牌检测,从而实现车牌的识别功能。整个流程清晰明了,便于用户快速上手。

🚗 **数据格式转换**:文章提供了一个名为`ConvertYOLOFormat.py`的Python脚本,用于将CCPD2020数据集(或其他类似格式)转换为YOLOv5所需的训练格式。该脚本能够遍历指定目录下的图片,提取文件名中的边界框信息,计算并归一化中心点坐标、宽度和高度,然后生成对应的`.txt`标签文件,并按要求组织图片和标签文件到`images`和`labels`子文件夹中,为模型训练做好准备。

📝 **配置文件准备**:在数据准备完成后,需要创建一个YAML配置文件(例如`plate.yaml`),其结构与YOLOv5官方提供的`coco.yaml`类似。该文件需要指定训练集和验证集的路径,以及监测对象的类别名称(如`plate`)。同时,需要修改`train.py`脚本中的相关参数,使其指向新创建的`plate.yaml`文件,以便模型能够正确加载数据集和配置信息。

🚀 **模型训练执行**:配置完成后,通过执行`train.py`脚本即可启动YOLOv5模型的训练过程。训练过程中,模型会不断学习识别车牌的特征,并生成权重文件(如`best.pt`)。用户可以通过监控训练日志来了解模型的性能表现,并根据需要调整训练参数或数据集以优化模型效果。

💡 **检测应用实现**:模型训练完成后,可以通过修改`detect.py`脚本来执行实际的车牌检测任务。用户需要指定训练好的权重文件路径(`best.pt`)、待检测的图片或视频路径,以及之前创建的`plate.yaml`配置文件。执行`detect.py`后,程序将在指定的图片或视频上框出识别到的车牌,并输出检测结果,完成了整个车牌识别的应用流程。

一. 准备训练文件

总结:采用的前后端分离的结构

    我这边使用的是CCPD2020数据集的车牌,在csdn搜索一下就可以找到,执行下面py文件可以得到yolo的训练集文件,然后按要求创建好文件夹和文件
# ConvertYOLOFormat.pyimport osimport os.pathimport reimport shutilimport cv2from tqdm import tqdmdef listPathAllfiles(dirname):    """    遍历指定目录下的所有文件并返回一个包含这些文件路径的列表。    """    result = []    for maindir, subdir, file_name_list in os.walk(dirname):        for filename in file_name_list:            apath = os.path.join(maindir, filename)            result.append(apath)    return resultif __name__ == '__main__':    # 原始数据集的路径,改为自己要保存的路径    data_path = "E:\yolo\CCPD2020\ccpd_green\val"    # 转换后数据的保存路径,改为自己要保存的路径    save_path = "E:\yolo\CCPD2020\ccpd_green\valData"    # 图片和标签文件的保存路径    images_save_path = os.path.join(save_path, "images")    labels_save_path = os.path.join(save_path, "labels")    # 如果不存在则创建图片和标签的保存文件夹    if not os.path.exists(images_save_path): os.makedirs(images_save_path)    if not os.path.exists(labels_save_path): os.makedirs(labels_save_path)    # 获取数据集中所有的图片文件路径    images_files = listPathAllfiles(data_path)    # 初始化计数器用于生成新的文件名    cnt = 1    # 使用tqdm显示进度条    for name in tqdm(images_files):        # 只处理图片文件        if name.endswith(".jpg") or name.endswith(".png"):            # 读取图片            img = cv2.imread(name)            # 获取图片的高度和宽度            height, width = img.shape[0], img.shape[1]            # 使用正则表达式从文件名中提取坐标信息            str1 = re.findall('-\d+&\d+_\d+&\d+-', name)[0][1:-1]            str2 = re.split('&|_', str1)            # 提取边界框坐标            x0 = int(str2[0])            y0 = int(str2[1])            x1 = int(str2[2])            y1 = int(str2[3])            # 计算边界框的中心点坐标以及宽度和高度,并进行归一化            x = round((x0 + x1) / 2 / width, 6)            y = round((y0 + y1) / 2 / height, 6)            w = round((x1 - x0) / width, 6)            h = round((y1 - y0) / height, 6)            # 构建标签文件名和路径            txtfile = os.path.join(labels_save_path, "green_plate_" + str(cnt).zfill(6) + ".txt")            # 构建图片文件名和路径            imgfile = os.path.join(images_save_path,                                   "green_plate_" + str(cnt).zfill(6) + "." + os.path.basename(name).split(".")[-1])            # 写入标签文件            open(txtfile, "w").write(" ".join(["0", str(x), str(y), str(w), str(h)]))            # 移动图片到新位置            shutil.move(name, imgfile)            # 更新计数器            cnt += 1

2. 准备好训练集文件后,创建yaml文件,改变train.py文件参数,再执行train.py训练模型

3. 执行train.py训练模型

4.执行detect.py检测图片或视频

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

YOLOv5 车牌识别 目标检测 深度学习 数据集转换
相关文章