基于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文件,可以看到检测结果

相关推荐
Brookty1 小时前
Java线程安全与中断机制详解
java·开发语言·后端·学习·java-ee
你的人类朋友2 小时前
❤️‍🔥BFF架构版的hello world
前端·后端·架构
孟婆来包棒棒糖~2 小时前
SpringCloude快速入门
分布式·后端·spring cloud·微服务·wpf
雾林小妖2 小时前
springboot集成deepseek
java·spring boot·后端
知识浅谈3 小时前
基于Dify构建本地化知识库智能体:从0到1的实践指南
后端
网络安全打工人3 小时前
CentOS7 安装 rust 1.82.0
开发语言·后端·rust
梦兮林夕3 小时前
04 gRPC 元数据(Metadata)深入解析
后端·go·grpc
pe7er4 小时前
RESTful API 的规范性和接口安全性如何取舍
前端·后端
山风呼呼4 小时前
golang--通道和锁
开发语言·后端·golang
Ice__Cai5 小时前
Django + Celery 详细解析:构建高效的异步任务队列
分布式·后端·python·django