一. 准备训练文件
总结:采用的前后端分离的结构
- 根据上篇文章安装好yolov5所依赖的环境使用yolov5识别的车牌,LPRNet识别车牌文字前后端交互采用flask发送的json数据前端使用的vue3全家桶
- 我这边使用的是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
- 要改为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文件,可以看到检测结果