超赞的学习笔记——《Python深度学习7:车牌检测》

续写序列Python深度学习,想了解更多可点击上篇超赞的学习笔记——《Python深度学习6:预测顾客是否流失》_wpgddt的博客-CSDN博客

►前言

现在许多停车场使用车牌识别系统,停车时需要先使用摄像头拍摄图像,透过AI检测车牌再进行识别,本篇博客介绍如何训练车牌检测模型。

►代码讲解

在Kaggle网站内搜寻Car License Plate Detection并下载,解压缩文件夹,更改名称为“CarLicensePlateDetection”,将文件夹上传至Google云端硬盘,开启Colab并设定为GPU执行,连接Google云段硬盘。

先建立训练文件夹,代码如下:

import numpy as np

import pandas as pd

import os

import numpy

os.mkdir(“/content/plate_train_data”)

os.mkdir(“/content/plate_train_data/images”)

os.mkdir(“/content/plate_train_data/labels”)

os.mkdir(“/content/plate_train_data/images/train”)

os.mkdir(“/content/plate_train_data/images/val”)

os.mkdir(“/content/plate_train_data/labels/train”)

os.mkdir(“/content/plate_train_data/labels/val”)

将xml文件转换为txt文件,因为Yolo需要使用归一化边界框的txt文件,格式为「class id,x,y,width,height」,数据呈现如下:

0 0.39375 0.34615384615384615 0.0975 0.05263157894736842

0 0.64375 0.35020242914979755 0.0625 0.06072874493927125

转换代码如下:

import xml.etree.ElementTree as ET

from xml.dom.minidom import parse

path =“/content/drive/MyDrive/AI/dataset/CarLicensePlateDetection/annotations”

classes = {“licence”:0}

for annotations in os.listdir(path):

dom = parse(os.path.join(path,annotations))

root = dom.documentElement

filename =“.txt”.join(root.getElementsByTagName(“filename”)[0].childNodes[0].data.split(“.png”))

image_width = root.getElementsByTagName(“width”)[0].childNodes[0].data

image_height = root.getElementsByTagName(“height”)[0].childNodes[0].data

with open(“/content/plate_train_data/labels/train/”+filename,“w”)as r:

for items in root.getElementsByTagName(“object”):

name = items.getElementsByTagName(“name”)[0].childNodes[0].data

xmin = items.getElementsByTagName(“xmin”)[0].childNodes[0].data

ymin = items.getElementsByTagName(“ymin”)[0].childNodes[0].data

xmax = items.getElementsByTagName(“xmax”)[0].childNodes[0].data

ymax = items.getElementsByTagName(“ymax”)[0].childNodes[0].data

x_center_norm =((int(xmin)+int(xmax))/ 2)/ int(image_width)

y_center_norm =((int(ymin)+int(ymax))/2)/ int(image_height)

width_norm =((int(xmax)-int(xmin))/int(image_width))

height_norm =((int(ymax)-int(ymin))/int(image_height))

r.write(str(classes[name])+“”)

r.write(str(x_center_norm)+“”)

r.write(str(y_center_norm)+“”)

r.write(str(width_norm)+“”)

r.write(str(height_norm)+“\n”)

复制CarLicensePlateDetection内的image至plate_train_data/images/train

import shutil

path =“/content/drive/MyDrive/AI/dataset/CarLicensePlateDetection/images”

for images in os.listdir(path):

image_path = os.path.join(path,images)

shutil.copy(image_path,“/content/plate_train_data/images/train/”+images)

将训练数据集随机数分割120至验证数据集内

from random import shuffle

from glob import glob

import random

import shutil

random.seed(42)

files = glob(“/content/plate_train_data/images/train/*.png”)

shuffle(files)

txt_train_path =“/content/plate_train_data/labels/train/”

img_train_path =“/content/plate_train_data/images/train/”

txt_val_path =“/content/plate_train_data/labels/val/”

img_val_path =“/content/plate_train_data/images/val/”

for i in files[:120]:

filename = i.split(“/”)[-1]

shutil.move(txt_train_path+filename.replace(“.png”,“.txt”),\

txt_val_path+filename.replace(“.png”,“.txt”))

shutil.move(img_train_path+filename,img_val_path+filename)

建立yaml档案,train后面为train数据集位置

%cd /content

!echo“train: /content/plate_train_data/images/train”> licence.yaml

!echo“val: /content/plate_train_data/images/val”>> licence.yaml

!echo“nc:1”>> licence.yaml

!echo“names: ['licence']”>> licence.yaml

下载Yolov5,并安装相关套件

%cd /content/

%rm -rf yolov5

!git clonehttps://github.com/ultralytics/yolov5

%cd yolov5

!pip install -r requirements.txt

开始训练

--img为图象大小

--batch批次量

--epochs循环几次

--data训练数据的yaml档案

训练指令如下:

!python train.py --weights yolov5s.pt --cfg models/yolov5s.yaml --img 416 --batch 48 --epochs 40 --data /content/licence.yaml --cache

P(Precision)为正确数/预测总数

R(Recall)为预测正确数/真实总数

mAP(mean Average Precision):每个类的AP值的平均数,mAP越高,推论准确度越好。

mAP50-95表示在不同区段IoU阔值,从0.5~0.95,间隔0.05

训练完成后显示推论结果

from IPython.display import Image

Image('/content/yolov5/runs/train/exp/val_batch0_labels.jpg')

►小结

以上流程是使用Yolov5训练车牌检测的流程,当检测出车牌就可以裁切进行文字OCR,让客户缴费时输入自己的车牌,点选自己的车子照片进行缴费,之后有空再来整理发文。

►参考资料

Car License Plate Detection

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值