失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > CCPD数据集+yolov5+智能驾驶车牌检测

CCPD数据集+yolov5+智能驾驶车牌检测

时间:2022-09-30 16:45:52

相关推荐

CCPD数据集+yolov5+智能驾驶车牌检测

CCPD数据集+yolov5+智能驾驶车牌检测

代码准备ccpd数据集准备ccpd转yolov5目标格式训练测试检测

在此使用MobaXterm_Personal_21.2

CCCPD数据集

CCPD数据集:

CCPD数据集主要采集于合肥市停车场,采集时间为上午7:30到晚上10:00,停车场采集人员手持Android POS机对停车场的车辆拍照进行数据采集。所拍摄的车牌照片涉及多种复杂环境,包括模糊、倾斜、雨天、雪天等。CCPD数据集包含了25万多幅中国城市车牌图像和车牌检测与识别信息的标注。主要介绍如下:

类别 描述 图片数

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

CCPD/CCPD-Base中的图像被拆分为train/val数据集。使用CCPD中的子数据集(CCPD-DB、CCPD-Blur、CCPD-FN、CCPD-Rotate、CCPD-Tilt、CCPD-Challenge)进行测试。

CCPD数据集(数据大小12.26G)下载地址:

链接:/s/1Jh55ufXZZpusg7Vhn4ZYdQ

提取码:f6mo

Ccpd数据集是12G左右的存储,将打包好的数据集上传至MobaXterm_Personal_21.2服务器上

例如: "/data/aimonitor/data/datasets/car_license/1002/license_use/CCPD.7z"

在此我使用的是7z工具打包的,可以在/data/aimonitor/data/datasets/car_license/1002/license_use/目录下使用Linux命令:7za x CCPD.7z解压包

在数据集目录下建立两个文件夹test/car_data

在car_data目录下创建两个文件夹images/labels:

两文件夹下分别创建两个文件夹train,val:

Ccpd转yolov5目标格式

将数据集图片8:2分为训练与测试

# coding=UTF8

import shutil

import os

import random

from shutil import copy2

trainfiles = os.listdir(r"D:\CCPD.tar\CCPD\ccpd_base")

#(图片文件夹)

num_train = len(trainfiles)

print( "num_train: " + str(num_train) )

index_list = list(range(num_train))

print(index_list)

random.shuffle(index_list)

num = 0

trainDir = r"D:\CCPD.tar\ccpd_train\images\train"

#(将图片文件夹中的6份放在这个文件夹下)

validDir = r"D:\CCPD.tar\ccpd_train\images\val"

#(将图片文件夹中的2份放在这个文件夹下)

detectDir = r"D:\CCPD.tar\test_datasets\images"

#(将图片文件夹中的2份放在这个文件夹下)

for i in index_list:

fileName = os.path.join(r"D:\CCPD.tar\CCPD\ccpd_base", trainfiles[i])

if num < num_train*0.6:

print(str(fileName))

copy2(fileName, trainDir)

elif num < num_train*0.8:

print(str(fileName))

copy2(fileName, detectDir)

else:

copy2(fileName, validDir)

num += 1

2.将文件夹下图片命名信息提取切割,存储为txt文档,并存储到文件夹中

import shutil

import cv2

import os

def txt_file(img_path):

x = img_path.split("/", 12)

if x[11] == "train":

y = '/'.join(x[0:10]) + '/labels/' + 'train/'

else:

y = '/'.join(x[0:10]) + '/labels/' + 'val/'

return y

def txt_translate(path, txt_path):

for filename in os.listdir(path):

print(filename)

list1 = filename.split("-", 3) # 第一次分割,以减号'-'做分割

subname = list1[2]

list2 = filename.split(".", 1)

subname1 = list2[1]

if subname1 == 'txt':

continue

lt, rb = subname.split("_", 1) # 第二次分割,以下划线'_'做分割

lx, ly = lt.split("&", 1)

rx, ry = rb.split("&", 1)

width = int(rx) - int(lx)

height = int(ry) - int(ly) # bounding box的宽和高

cx = float(lx) + width / 2

cy = float(ly) + height / 2 # bounding box中心点

img = cv2.imread(path + filename)

if img is None: # 自动删除失效图片(下载过程有的图片会存在无法读取的情况)

os.remove(os.path.join(path, filename))

continue

width = width / img.shape[1]

height = height / img.shape[0]

cx = cx / img.shape[1]

cy = cy / img.shape[0]

txtname = filename.split(".", 1)

txtfile = txt_path + txtname[0] + ".txt"

# 绿牌是第0类,蓝牌是第1类

with open(txtfile, "w") as f:

f.write(str(0) + " " + str(cx) + " " + str(cy) + " " + str(width) + " " + str(height))

if __name__ == '__main__':

# 修改此处地址

trainDir = "/data/aimonitor/data/datasets/car_license/1002/license_new/CCPD/ccpd_train/images/train/"

validDir = "/data/aimonitor/data/datasets/car_license/1002/license_new/CCPD/ccpd_train/images/val/"

# 该处修改为图片存储地址

txt_path1 = txt_file(trainDir)

txt_path2 = txt_file(validDir)

txt_translate(trainDir, txt_path1)

txt_translate(validDir, txt_path2)

打开yolov5文件夹下的data文件夹,将任意选择一个数据集的yaml文件复制,并且将yaml文件内容修改

# YOLOv5 🚀 by Ultralytics, GPL-3.0 license

# COCO128 dataset /ultralytics/coco128 (first 128 images from COCO train)

# Example usage: python train.py --data coco128.yaml

# parent

# ├── yolov5

# └── datasets

# └── coco128 �downloads here

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]

path: /data/aimonitor/data/datasets/car_license/1002/license_new/CCPD/ccpd_train/ # dataset root dir

train: images/train # train images (relative to 'path') 128 images

val: images/train # val images (relative to 'path') 128 images

test: # test images (optional)

# Classes

nc: 1

names: ['lense']

# Download script/URL (optional)

# download: /ultralytics/yolov5/releases/download/v1.0/coco128.zip

修改path和nc,以及names

Path是数据集路径,nc是classes标注标签个数,names是标签名称

开始训练,使用命令:

python3 train.py --data ./data/myData.yaml --cfg ./models/yolov5s.yaml --epochs 30 --weights ''

无基础模型,可选基础模型

--data数据路径

--epochs 训练次数

模型训练开始:

训练结束:

测试数据:

python3 detect.py --weight /data/aimonitor/data/datasets/vehicle/1006/car_2.0/model300_6_nobase/best.pt --source /data/aimonitor/data/datasets/vehicle/1006/car_2.0/test_color/ --project /data/aimonitor/data/datasets/vehicle/1006/car_2.0/test_color/ --save-crop

用来测试车牌检测模型,需要模型和测试数据集

至于—save-crop是用来将被检测到的车牌切割出来,以方便我们后续的车牌识别模型研发数据准备

测试数据:

测试切车牌图片:

如果觉得《CCPD数据集+yolov5+智能驾驶车牌检测》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。