搞笑网站源代码,网址seo分析,手机可以做app的软件,wordpress 命令插件1 前言
#x1f525; 优质竞赛项目系列#xff0c;今天要分享的是
#x1f6a9; 基于python 机器视觉 的车牌识别系统
#x1f947;学长这里给一个题目综合评分(每项满分5分)
难度系数#xff1a;3分工作量#xff1a;3分创新点#xff1a;3分
#x1f9ff; 更多资…1 前言 优质竞赛项目系列今天要分享的是 基于python 机器视觉 的车牌识别系统
学长这里给一个题目综合评分(每项满分5分)
难度系数3分工作量3分创新点3分 更多资料, 项目分享
https://gitee.com/dancheng-senior/postgraduate
1 课题背景
车牌识别其实是个经典的机器视觉任务了通过图像处理技术检测、定位、识别车牌上的字符实现计算机对车牌的智能管理功能。如今在小区停车场、高速公路出入口、监控场所、自动收费站等地都有车牌识别系统的存在车牌识别的研究也已逐步成熟。尽管该技术随处可见了但其实在精度和识别速度上还需要进一步提升自己动手实现一个车牌识别系统有利于学习和理解图像处理的先进技术。
本文详细介绍基于深度学习的中文车牌识别与管理系统在介绍算法原理的同时给出Python的实现代码以及PyQt的简单UI界面。在界面中可以选择需要识别的车牌视频、图片文件等。
2 效果演示
首先还是用动图先展示一下效果系统主要实现的功能是对图片、视频中的车牌进行检测和识别演示效果如下。
2.1 图片检测识别 2.2视频检测识别 3 车牌检测与识别
目前智能交通系统中集成运用计算机视觉、物联网、人工智能等多种技术成为未来发展方向。其中车牌识别License Plate Recognition, LPR技术作为一项重要技术从获取的图像中提取目标车辆的车牌信息成为完善智能交通管理运行的基础。
由于本文介绍的是中文车牌所以可以简单了解一下国内汽车拍照的特点字符数为七个包括汉字、字母和数字。车牌颜色组合中其中最常见的组合为普通小型汽车蓝底白字和新能源汽车的渐变绿底黑字。 总结来说车牌是一个有特点的图像区域几种特征可以综合起来确定车牌定位所以之前就有利用车牌与周围环境的差异的算法。目前常见的车牌定位算法有以下 4 种基于颜色、纹理、边缘信息的车牌定位算法和基于人工神经网络的车牌定位算法。
如下图所示常规的步骤包括图像采集、预处理、车牌定位、字符分割、字符识别、输出结果。深度学习技术成熟之后端到端的网络模型使得这一过程变得简单起来。从思想上来说基于深度学习的车牌识别实现思路主要包括两个部分1车牌检测定位2车牌字符识别。 其中车牌的检测定位本质是一个特定的目标检测任务即通过算法框选出属于车牌的位置坐标以便将其与背景区分开来。可以认为检测出的车牌位置才是我们的感兴趣区域。好用的方法如Cascade LBP它是一种机器学习的方法可以利用OpenCV训练级联分类器依赖CPU进行计算级联分类器的方法对于常用场景效果比较好检测速度较快曾经一度比较流行但准确率一般。基于深度学习的检测算法有Mobilene- SSD、YOLO-v5等利用大批量的标注数据进行训练.
当ROI被检测出来如何对这一区域中的字符进行识别这就涉及到采取的处理方式。第一种处理方式首先利用一系列字符分割的算法将车牌中的字符逐个分开然后基于深度学习进行字符分类得到识别结果第二种区别于第一种先分割再分类的两步走方式利用端到端的CTC Connectionist Temporal Classification网络直接进行识别。
这里我们使用网上开源的HyperLPR中文车牌识别框架首先导入OpenCV和hyperlpr读取一张车牌图片调用架构中的车牌识别方法获得结果以下代码来自官方的示例
#导入包from hyperlpr import *#导入OpenCV库import cv2#读入图片image cv2.imread(demo.jpg)#识别结果print(HyperLPR_plate_recognition(image))
以上代码运行结果如下可以看出该方法识别了车牌的车牌字符、置信度值、车牌位置坐标、图片尺寸等结果。 这样的结果还不够直观我们写一个函数将车牌的识别结果标注在图片上首先导入相关依赖包其代码如下
# 导入包from hyperlpr import *# 导入OpenCV库import cv2 as cvfrom PIL import Image, ImageDraw, ImageFontimport numpy as np
新建一个函数drawRectBox将图像数据、识别结果、字体等参数传入函数内部利用OpenCV和PIL库添加标注框和识别结果的字符其代码如下
def drawRectBox(image, rect, addText, fontC):cv.rectangle(image, (int(round(rect[0])), int(round(rect[1]))),(int(round(rect[2]) 8), int(round(rect[3]) 8)),(0, 0, 255), 2)cv.rectangle(image, (int(rect[0] - 1), int(rect[1]) - 16), (int(rect[0] 75), int(rect[1])), (0, 0, 255), -1, cv.LINE_AA)img Image.fromarray(image)draw ImageDraw.Draw(img)draw.text((int(rect[0] 1), int(rect[1] - 16)), addText, (255, 255, 255), fontfontC)imagex np.array(img)return imagex
我们首先读取图片文件利用前面的HyperLPR_plate_recognition方法识别出车牌结果调用以上函数获得带标注框的图片利用OpenCV的imshow方法显示结果图片其代码如下
image cv.imread(test3.jpeg) # 读取选择的图片res_all HyperLPR_plate_recognition(image)fontC ImageFont.truetype(./platech.ttf, 14, 0)res, confi, axes res_all[0]image drawRectBox(image, axes, res, fontC)cv.imshow(Stream, image)c cv.waitKey(0) 0xff
此时运行以上代码可以得到如下结果 同理识别视频中的车牌也可以做类似的操作不过我们需要先对视频文件进行逐帧读取然后采用以上的方式在图片中标识出车牌并显示。
这部分代码如下 capture cv.VideoCapture(./车牌检测.mp4) # 读取视频文件
fontC ImageFont.truetype(./platech.ttf, 14, 0) # 字体用于标注图片
i 1
while (True):ref, frame capture.read()if ref:i i 1if i % 5 0:i 0res_all HyperLPR_plate_recognition(frame) # 识别车牌if len(res_all) 0:res, confi, axes res_all[0] # 获取结果frame drawRectBox(frame, axes, res, fontC)cv.imshow(num, frame) # 显示画面 if cv.waitKey(1) 0xFF ord(q):
break # 退出
else:
break
以上代码每5帧识别一次视频中的车牌将车牌的结果标注在画面中进行实时显示运行结果的截图如下所示
车牌的识别部分代码演示完毕对此我们完成了图片和视频的识别然而这些还是简单的脚本呈现。为了方便更换图片、视频以及管理车牌还需要设计文件选择功能以及系统的UI界面。这部分代码如下
class Ui_MainWindow(object):def setupUi(self, MainWindow):MainWindow.setObjectName(MainWindow)MainWindow.resize(800, 600)self.centralwidget QtWidgets.QWidget(MainWindow)self.centralwidget.setObjectName(centralwidget)self.openimage QtWidgets.QPushButton(self.centralwidget)self.openimage.setGeometry(QtCore.QRect(20, 40, 91, 51))self.openimage.setObjectName(openimage)self.showlabel QtWidgets.QLabel(self.centralwidget)self.showlabel.setGeometry(QtCore.QRect(110, 10, 471, 441))self.showlabel.setObjectName(showlabel)self.LPRdetect QtWidgets.QPushButton(self.centralwidget)self.LPRdetect.setGeometry(QtCore.QRect(20, 150, 81, 51))self.LPRdetect.setObjectName(LPRdetect)self.LPR_Rec QtWidgets.QPushButton(self.centralwidget)self.LPR_Rec.setGeometry(QtCore.QRect(20, 292, 75, 31))self.LPR_Rec.setObjectName(LPR_Rec)self.lineEdit_result QtWidgets.QLineEdit(self.centralwidget)self.lineEdit_result.setGeometry(QtCore.QRect(20, 400, 101, 41))self.lineEdit_result.setObjectName(lineEdit_result)self.openvideo QtWidgets.QPushButton(self.centralwidget)self.openvideo.setGeometry(QtCore.QRect(20, 360, 75, 23))self.openvideo.setObjectName(openvideo)MainWindow.setCentralWidget(self.centralwidget)self.menubar QtWidgets.QMenuBar(MainWindow)self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23))self.menubar.setObjectName(menubar)MainWindow.setMenuBar(self.menubar)self.statusbar QtWidgets.QStatusBar(MainWindow)self.statusbar.setObjectName(statusbar)MainWindow.setStatusBar(self.statusbar)self.retranslateUi(MainWindow)QtCore.QMetaObject.connectSlotsByName(MainWindow)def retranslateUi(self, MainWindow):_translate QtCore.QCoreApplication.translateMainWindow.setWindowTitle(_translate(MainWindow, MainWindow))self.openimage.setText(_translate(MainWindow, 打开图片))self.showlabel.setText(_translate(MainWindow, TextLabel))self.LPRdetect.setText(_translate(MainWindow, 车牌检测))self.LPR_Rec.setText(_translate(MainWindow, 车牌识别))self.openvideo.setText(_translate(MainWindow, PushButton))
4 HyperLPR库
4.1 简介
HyperLPR是一个使用深度学习针对对中文车牌识别的实现与较为流行的开源的EasyPR相比它的检测速度和鲁棒性和多场景的适应性都要好于目前开源的EasyPRHyperLPR可以识别多种中文车牌包括白牌新能源车牌使馆车牌教练车牌武警车牌等。
4.2 特点
基于端到端sequence模型无需进行字符分割,识别速度更快。速度快 720p 单核 Intel 2.2G CPU (macbook Pro 2015)平均识别时间90ms识别率高,仅仅针对车牌ROI在EasyPR数据集上0-error达到 95.2%, 1-error识别率达到 97.4% (指在定位成功后的车牌识别率)轻量总代码量不超1k行。带有Android实现其Android Demo可解决一些在一些普通业务场景(如执法记录仪)下的车牌识别任务。支持多种车牌的识别详情见如下
4.3 HyperLPR的检测流程
使用opencv的HAAR Cascade检测车牌大致位置Extend检测到的大致位置的矩形区域使用类似于MSER的方式的多级二值化和RANSAC拟合车牌的上下边界使用CNN Regression回归车牌左右边界使用基于纹理场的算法进行车牌校正倾斜使用CNN滑动窗切割字符使用CNN识别字符
4.4 安装
pip install hyperlpr
4.5 Python 依赖 Keras (2.0.0) Theano(0.9) or Tensorflow(1.1.x) Numpy (1.10) Scipy (0.19.1) OpenCV(3.0) Scikit-image (0.13.0) PIL 使用CNN识别字符
5 最后 更多资料, 项目分享
https://gitee.com/dancheng-senior/postgraduate