文章目录:

一、前言二、训练分类器2.1、准备训练用单字符图片2.2、图片预处理2.3、用opencv的preprocess_hog()处理图片2.4、用SVM训练分类器三、车牌定位四、字符分割五、字符识别六、Mysql保存七、总结八、参考资料一、 前言:

最近一直在学习机器学习,花了段时间把《机器学习实战》(【美】Peter Harrington著)看了一遍,当中讲述的几个机器学习经典算法虽说有所掌握(监督学习:k-近邻、决策树、朴素贝叶斯、Logistic回归、SVM、AdaBoost、线性回归、树回归,无监督学习:k-means,FP-Growth),但是还是觉得有点不踏实,于是就找了车牌识别的例子,算是把其中的算法用到了实际的项目中。

环境:

系统:win10

语言:Python3.6

平台:Jupyter Notebook

机器学习库:OpenCV

数据库:Mysql

机器学习算法:SVM

用到的Python库:matplotlib、numpy、opencv、sklearn,这些库通过pip install package安装即可

二、训练分类器

2.1、准备训练用单字符图片

相同字符放在一个文件夹下,文件夹名代表标签

2.2、图片预处理

读取图片、标签用于后续处理

##########################################描述:读取图片数据集##filename_1:图片数据集路径##return:## dataArr:读取到的数据集,拉伸成(4200, 1280) 4200表示有4200张图片 1280 每张图片的宽*高## np.array(label_list) 图片对应的标签## np.array(img_org) 原图片########################################def load_data_en(filename_1):'''这个函数用来加载数据集,其中filename_1是一个文件的绝对地址'''sample_number = 0 # 用来计算总的样本数dataArr = np.zeros((4200, 1280))label_list = []provinces = ['京','闽','粤','苏','沪','浙']temp_address = []temp = []img_org = []for i in range(34):## filename_1 = r'E:/Phthon/car_detect/datasets/'with open(filename_1+str(i)+'.txt', 'r') as fr_1:temp = [row.strip() for row in fr_1.readlines()]temp_address.extend(temp)length = len(temp_address)##pattern = compile(r'\d+') # 查找数字,代表特征值pattern_en = compile(r'datasets/train_images/training-set/(\d+)*')pattern_zh = compile(r'datasets/train_images/training-set/chinese-characters/(\d+)*')for j in range(length):# print(middle_route[i])# print(temp_address_2[j])temp_img = cv2.imread(temp_address[j], cv2.COLOR_BGR2GRAY)if temp_img is None:# print(temp_address[j])continuesample_number += 1img_org.append(temp_img)temp_img = temp_img.reshape(1, 40 * 32)dataArr[sample_number - 1, :] = temp_imglabel = pattern_en.findall(temp_address[j])[0]if len(label) == 0: ## 汉字字符pass# label = provinces[int(pattern_zh.findall(temp_address[j])[0])]else: ## 非汉字字符if int(label) < 10: # 数字0-9passelif int(label)>=10 and int(label)<=17: # 字母A-H 没有Ilabel = chr(int(label)+55)elif int(label)>=18 and int(label)<=22: # 字母J-N 没有Olabel = chr(int(label)+56)else: # 字母P-Zlabel = chr(int(label)+57)label_list.append(label)return dataArr, np.array(label_list) , np.array(img_org)2.3、用opencv的preprocess_hog()处理图片

由于光照明暗不同、拍摄角度不同、车牌新旧程度不同,导致拍摄的车牌差异大,并且需要训练时间长,因此需要使用opencv的preprocess_hog()处理图片,取图片的64个主要特征用于训练SVM训练

X2 = preprocess_hog(img_org)2.4、使用sklearn自带的SVM算法训练分类器

对于训练数据集的训练比较耗时,因此对于训练完成的分类器,最好单独存放,使用时在做load

from sklearn.svm import SVCsvc = SVC(C = 1, gamma = 0.5)svc.fit(X2, label_list) # 使用默认配置初始化SVM,对原始1280维像素特征的训练数据进行建模,并在测试集上做出预测三、车牌定位

对于车牌定位,有多种方法可以实现,可以对原图像经过形态学处理(高斯平滑,中值滤波,Sobel算子,膨胀、腐蚀)后,再使用opencv的findContours检测物体轮廓,根据车牌宽高比这个几何特性,可找到车牌区域并进行切割

用opencv导入已训练好的分类器plate.xml,对灰度图进行车牌定位

########################## 描述:从原始图片中定位出车牌区域,用于后续识别## 输入:## img:原始图片## 输出:## 切割出的车牌区域## 返回值:## 车牌区域########################def detect(img):# 灰度化image = cv2.imread(img)image = cv2.GaussianBlur(image,(3,3),0)resize_h = 1000resize_w = int(image.shape[1] / image.shape[0] * resize_h)image = cv2.resize(image , (resize_w,resize_h))image_gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)clf = cv2.CascadeClassifier('plate.xml')area = clf.detectMultiScale(image_gray)image_copy = image.copy()for (x,y,w,h) in area:# print((x,y,w,h))cv2.rectangle(image_copy,(x,y),(x+w,y+h),(0,0,255),5)image_save = image_copy[y:y+h,x:x+w]cv2.imwrite('result2.png', image_save)return image_save四、字符分割

字符分割有多种方法,其中用

python车牌识别_python+opencv实现车牌识别相关推荐

  1. python圈出车牌字符_Python+OpenCV实现车牌字符分割和识别

    最近做一个车牌识别项目,入门级别的,十分简单. 车牌识别总体分成两个大的步骤: 一.车牌定位:从照片中圈出车牌 二.车牌字符识别 这里只说第二个步骤,字符识别包括两个步骤: 1.图像处理 原本的图像每 ...

  2. python车牌识别系统开源代码_python+opencv实现车牌定位功能(实例代码)

    写在前面 HIT大三上学期视听觉信号处理课程中视觉部分的实验三,经过和学长们实验的对比发现每一级实验要求都不一样,因此这里标明了是2019年秋季学期的视觉实验三. 由于时间紧张,代码没有进行任何优化, ...

  3. python 视觉技术_python+opencv实现机器视觉基础技术(边缘提取,图像滤波,边缘检测算子,投影,车牌字符分割)...

    机器视觉是人工智能正在快速发展的一个分支.简单说来,机器视觉就是用机器代替人眼来做测量和判断.它是一项综合技术,包括图像处理.机械工程技术.控制.电光源照明.光学成像.传感器.模拟与数字视频技术.计算 ...

  4. python人脸识别门禁_Python+Opencv+Tkinter指纹识别与人脸识别的门禁兼考勤(一)

    一.设计目标:旨在PC端上搭建一款具有指纹识别与人脸识别功能的门禁兼考勤系统.该系统同时具备普通用户模式.管理员模式与超级管理员模式,下面具体介绍每种模式下的功能. 1)普通用户模式 该模式可分为收集 ...

  5. pythonopencv人脸识别考勤_Python+Opencv+Tkinter指纹识别与人脸识别的门禁兼考勤(一)...

    一.设计目标:旨在PC端上搭建一款具有指纹识别与人脸识别功能的门禁兼考勤系统.该系统同时具备普通用户模式.管理员模式与超级管理员模式,下面具体介绍每种模式下的功能. 1)普通用户模式 该模式可分为收集 ...

  6. python数据挖掘视频_python+opencv实时视频目标检测

    python+opencv实时视频目标检测 opencv环境 1.访问Python Extension Packages for Windows,下载python对应版本的opencv. 比如小编下载 ...

  7. python人头识别_python+opencv实现人头检测

    python+opencv实现人头检测 python+opencv实现人头检测 前段时间琢磨了下人头检测这个功能,现在有了初步的认知和体会,下面开始讲下我在实现人头检测过程中遇到的坑和解决方法. 环境 ...

  8. python信用卡识别_python opencv实现信用卡的数字识别

    本项目利用python以及opencv实现信用卡的数字识别 前期准备 导入工具包 定义功能函数 模板图像处理 读取模板图像 cv2.imread(img) 灰度化处理 cv2.cvtColor(img ...

  9. python相似图片识别_Python+Opencv识别两张相似图片

    Python+Opencv识别两张相似图片 在网上看到python做图像识别的相关文章后,真心感觉python的功能实在太强大,因此将这些文章总结一下,建立一下自己的知识体系. 当然了,图像识别这个话 ...

  10. python人脸识别门禁_Python+Opencv+Tkinter指纹识别与人脸识别的门禁兼考勤(二)

    一. 门禁考勤系统硬件设计 1 .硬件总体结构 PC端的intel处理器作为硬件平台的核心,是衡量系统能否达到标准的主要标志.本文结合考勤系统,采用intel i5处理器的PC与51单片机共同构建了门 ...

最新文章

  1. [HDOJ3652]B-Number(数位dp)
  2. golang中的strings.Join
  3. php mongodb 别名,PHP mongo与mongodb扩展 | 码路春哥
  4. 按汇总分组/多维数据集
  5. Android10弹出截屏对话框,Android一个美丽而聪明的警告对话框SweetAlert
  6. MySQL中的SQL Mode及其作用
  7. Centos7 FastDFS 安装和配置启动
  8. 计算机真有趣作文,真有趣作文10篇
  9. C#控制Bartender自动列印的2种方法(附源码)
  10. react 实现展示公司层级,选择人员的功能
  11. 无线网络的几种认证与加密方式
  12. python中ix用法_在python的pandas模块中,DataFrame对象,如何选择一行?索引、loc、iloc、ix的用法及区别...
  13. CodeForces-767C Garland
  14. 计算机维修培训教材,计算机芯片级维修中心芯片级维修培训教材.pdf
  15. 用PHP输出对称菱形的简易办法
  16. 前端三刺客---JS(WebAPI)
  17. mysql组复制(MGR)——背景
  18. 西游记中如来佛祖来降服孙悟空时为什么说可惜他的真面目
  19. Oracle11g新特性密码延迟验证的坑
  20. 中考可以使用计算机吗,中考物理课可以带计算机吗

热门文章

  1. android播放器 重音,如何在SQLite查询中忽略重音(Android)
  2. HashMap,TreeMap,Hashtable,LinkedHashMap的区别
  3. oracle 归档模式 ASM,oracle rac启用归档模式
  4. PHP中self和static的区别,php面向对象程序设计中self与static的区别分析
  5. docker privileged作用_docker容器性能监控cAdvisor+influxDB+grafana监控系统安装部署
  6. php改变文件模式的函数,php chmod 函数 改变文件模式
  7. Java基本数据类型与包装数据类型的使用标准
  8. 关于MD5加密,及linux环境获取文件MD5值的脚本
  9. 数据库中的字段NULL值和''
  10. logback的日志文件中出现大量的ESC符号