基于yolov5+LPRNet+flask+vue的车牌识别(1)

一. 准备训练文件

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

  • 根据上篇文章安装好yolov5所依赖的环境
  • 使用yolov5识别的车牌,LPRNet识别车牌文字
  • 前后端交互采用flask发送的json数据
  • 前端使用的vue3全家桶
  1. 我这边使用的是CCPD2020数据集的车牌,在csdn搜索一下就可以找到,执行下面py文件可以得到yolo的训练集文件,然后按要求创建好文件夹和文件
ini 复制代码
# ConvertYOLOFormat.py
import os
import os.path
import re
import shutil

import cv2
from tqdm import tqdm

def 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 result

if __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
  • 要改为yolo监测的文件夹结构

  • 其中images中train和val存放的图片,要和label中的train和val标签文件一一对应

  • 在images和val的同级目录下的classes.txt文件中放入监测的类型,这边监测的是一种类型,就是车牌(plate)

  • 如果是两种就是这种格式

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

  • 与yolov5官方提供的coco.yaml文件一样,创建一个plate.yaml文件,修改参数,指向刚刚的训练集文件夹路径

  • 修改train.py的参数,使用plate.yaml

3. 执行train.py训练模型

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

  • 修改参数,刚刚训练好的权重文件best.pt路径,需要检测的图片或视频路径,plate.yaml路径

  • 修改好后,执行detect.py文件,可以看到检测结果

相关推荐
Mr -老鬼16 分钟前
Rust适合干什么?为什么需要Rust?
开发语言·后端·rust
123445233 分钟前
Agent入门实战-一个题目生成Agent
人工智能·后端
IT_陈寒35 分钟前
Java性能调优实战:5个被低估却提升30%效率的JVM参数
前端·人工智能·后端
快手技术37 分钟前
AAAI 2026|全面发力!快手斩获 3 篇 Oral,12 篇论文入选!
前端·后端·算法
颜酱38 分钟前
前端算法必备:滑动窗口从入门到很熟练(最长/最短/计数三大类型)
前端·后端·算法
8***f39539 分钟前
Spring容器初始化扩展点:ApplicationContextInitializer
java·后端·spring
用户2986985301441 分钟前
C#: 如何自动化创建Word可填写表单,告别手动填写时代
后端·c#·.net
用户93761147581611 小时前
并发编程三大特性
java·后端
阿在在1 小时前
Spring 系列(二):加载 BeanDefinition 的几种方式
java·后端·spring
颜酱1 小时前
前端算法必备:双指针从入门到很熟练(快慢指针+相向指针+滑动窗口)
前端·后端·算法