基于深度学习的中文车牌识别与管理系统(含UI界面,Python代码)

摄像头车牌识别

摘要:本文详细介绍基于深度学习的中文车牌识别与管理系统,在介绍算法原理的同时,给出Python的实现代码以及PyQt的UI界面。在界面中既可以选择需要识别的车牌视频、图片文件、批量图片进行检测识别,也可以通过电脑自带的摄像头进行实时检测、识别、管理车牌,通过车牌记录查看历史识别的车牌。博文提供了完整的Python代码和使用教程,适合新入门的朋友参考,完整代码资源文件请转至文末的下载链接。本博文目录如下:

➷点击跳转到文末所有涉及到的完整代码文件的下载页面☇

前言

车牌识别实际上是一项经典的机器视觉任务。它通过图像处理技术对车牌上的文字进行检测、定位和识别,通过计算机实现车牌的智能管理功能。目前,车牌识别系统存在于小区停车场、高速公路出入口、监控点、自动收费站等,车牌识别研究逐渐成熟。虽然这项技术随处可见,但其实准确率和识别速度还有待进一步提升。自己实现一个车牌识别系统,有利于学习和理解先进的图像处理技术。

车牌识别的算法经过了多次版本迭代,检测的效率和准确率有所提升,从最初的基于LBP和Haar特征的车牌检测,到后来逐步采用深度学习的方式如SSD、YOLO等算法。车牌的识别部分也由字符匹配到深度神经网络,通过不断验证和测试,其检测和识别效果和适用性都更加突出,支持的模型也更为丰富。

网上有很多车牌识别程序代码,大部分都是使用深度学习目标检测算法来识别单张图片中的车牌,但几乎没有人开发成可以展示的完整软件,即使有些是比较简单。界面。对此,这里给出博主设计的界面。它并不精致,但相对简单。功能还可以满足单张图片、批量图片、视频和摄像头的识别检测。初始界面如下:

基于深度学习的中文车牌识别与管理系统(含UI界面,Python代码)
检测车牌时的界面截图(点击图片放大)如下图,也可以开启摄像头或视频检测:

车牌展示
详细的功能演示效果参见博主的B站视频或下一节的动图演示,觉得不错的朋友敬请点赞、关注加收藏!系统UI界面的设计工作量较大,界面美化更需仔细雕琢,大家有任何建议或意见和可在下方评论交流。

1.效果演示

首先,让我们用动态图像来展示效果。该系统的主要功能是对图片、视频和摄像头屏幕中的车牌进行检测和识别。识别结果显示在界面和图像中。看功能,演示效果如下。

(1)选择单/批量车牌识别

首先,让我们使用动画来展示效果。进入软件界面后,点击图片选择按钮选择一张图片,点击“开始”自动识别车牌并在界面显示结果;点击历史识别记录的表号,查看识别记录。该函数的界面如下图所示:

图片选择
同理,如果需要批量识别图片,可以选择包含多个图片文件的文件夹,选择后点击“开始”,对每个文件进行逐一检测识别。结果类似于单个图像的结果。记录并审核识别结果:

基于深度学习的中文车牌识别与管理系统(含UI界面,Python代码)

(2)车牌视频识别效果展示

很多时候我们需要识别视频中的车牌,这里设计了视频选择功能。点击视频按钮,选择要检测的视频。系统会自动解析视频逐帧识别车牌,并将结果记录在右下角的表格中。效果如下图所示:

车牌视频识别演示
(3) 摄像头检测效果展示

在真实场景中,我们经常使用设备摄像头获取实时图片,同时需要识别图片中的车牌,所以本文考虑了这个功能。如下图,点击拍照按钮后,系统进入就绪状态,然后点击“开始操作”,系统显示实时画面,开始检测画面中的车牌,识别结果显示并记录:

摄像头车牌识别

2.车牌检测与识别

目前,智能交通系统中集成运用计算机视觉、物联网、人工智能等多种技术成为未来发展方向。其中,车牌识别(License Plate Recognition, LPR)技术作为一项重要技术,从获取的图像中提取目标车辆的车牌信息,成为完善智能交通管理运行的基础。

由于本文介绍的是中文车牌,所以可以简单了解一下国内汽车拍照的特点:字符数为七个,包括汉字、字母和数字。车牌颜色组合中,其中最常见的组合为普通小型汽车蓝底白字和新能源汽车的渐变绿底黑字1。

基于深度学习的中文车牌识别与管理系统(含UI界面,Python代码)
由于本文介绍的是中文车牌,所以可以简单了解一下国内汽车拍照的特点:字符数为七个,包括汉字、字母和数字,车牌轮廓长宽比例基本固定。车牌颜色组合中,其中最常见的组合为普通小型汽车蓝底白字和新能源汽车的渐变绿底黑字。总结来说,车牌是一个有特点的图像区域,几种特征可以综合起来确定车牌定位,所以之前就有利用车牌与周围环境的差异的算法。目前常见的车牌定位算法有以下 4 种:基于颜色、纹理、边缘信息的车牌定位算法和基于人工神经网络的车牌定位算法2。

为了方便演示,博主绘制了一张车牌识别的流程图,如下图所示,常规的步骤包括图像采集、预处理、车牌定位、字符分割、字符识别、输出结果。深度学习技术成熟之后,端到端的网络模型使得这一过程变得简单起来。从思想上来说,基于深度学习的车牌识别实现思路主要包括两个部分:(1)车牌检测定位;(2)车牌字符识别。

基于深度学习的中文车牌识别与管理系统(含UI界面,Python代码)
其中,车牌的检测定位本质是一个特定的目标检测(Object Detection)任务,即通过算法框选出属于车牌的位置坐标,以便将其与背景区分开来。可以认为检测出的车牌位置才是我们的感兴趣区域(Region Of Interest, ROI)。好用的方法如Cascade LBP,它是一种机器学习的方法,可以利用OPenCV训练级联分类器,依赖CPU进行计算,参考网址:https://gitee.com/zeusees/HyperLPR。级联分类器的方法对于常用场景效果比较好,检测速度较快,曾经一度比较流行,但准确率一般。基于深度学习的检测算法有Mobilene-SSD、YOLO-v5等,利用大批量的标注数据进行训练,训练代码可以参考开源代码https://github.com/zeusees/License-Plate-Detector。

当ROI被检测出来,如何对这一区域中的字符进行识别,这就涉及到采取的处理方式。第一种处理方式,首先利用一系列字符分割的算法将车牌中的字符逐个分开,然后基于深度学习进行字符分类,得到识别结果,可参考的代码地址:https://github.com/LCorleone/A-Simple-Chinese-License-Plate-Generator-and-Recognition-Framework;第二种,区别于第一种先分割再分类的两步走方式,利用端到端的CTC( Connectionist Temporal Classification)网络直接进行识别,代码地址:https://github.com/armaab/hyperlpr-train。

这里我们使用网上开源的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 cv
from PIL import Image, ImageDraw, ImageFont
import 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), font=fontC)
    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

此时,运行上述代码可以得到如下结果:

基于深度学习的中文车牌识别与管理系统(含UI界面,Python代码)
同样的,可以做类似的操作来识别视频中的车牌,但是我们需要逐帧读取视频文件,然后用上面的方法来识别并显示图片中的车牌。这部分代码如下:

capture = cv.VideoCapture("./车牌检测.mp4")  # 读取视频文件
fontC = ImageFont.truetype("./platech.ttf", 14, 0)  # 字体,用于标注图片

i = 1
while (True):
    ref, frame = capture.read()
    if ref:
        i = i + 1
        if i % 5 == 0:
            i = 0
            res_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界面,Python代码)
车牌的识别部分代码演示完毕,对此我们完成了图片和视频的识别,然而这些还是简单的脚本呈现。为了方便更换图片、视频以及管理车牌,还需要设计文件选择功能以及系统的UI界面。打开QtDesigner软件,拖动以下控件至主窗口中,车牌识别系统的界面设计如下图所示:

基于深度学习的中文车牌识别与管理系统(含UI界面,Python代码)

控件界面部分设计好,接下来利用PyUIC工具将.ui文件转化为.py代码文件,通过调用界面部分的代码同时加入对应的逻辑处理代码。博主对其中的UI功能进行了详细测试,最终开发出一版流畅得到清新界面,就是博文演示部分的展示,完整的UI界面、测试图片视频、代码文件,以及Python离线依赖包(方便安装运行,也可自行配置环境),均已打包上传,感兴趣的朋友可以通过下载链接获取。

下载链接

若您想获得博文中涉及的实现完整全部程序文件(包括测试图片、视频,py, UI文件等,如下图),这里已打包上传至博主的面包多平台和CSDN下载资源。本资源已上传至面包多网站和CSDN下载资源频道,可以点击以下链接获取,已将所有涉及的文件同时打包到里面,点击即可运行,完整文件截图如下:

基于深度学习的中文车牌识别与管理系统(含UI界面,Python代码)

在文件夹下的资源显示如下,其中包含了Python的离线依赖包,读者可在正确安装Anaconda和Pycharm软件后,点击bat文件进行安装,详细演示也可见本人B站视频。

基于深度学习的中文车牌识别与管理系统(含UI界面,Python代码)

注意:本资源已经过调试通过,下载后可通过Pycharm运行;运行界面的主程序为runMain.py,测试识别图片脚本可运行testPic.py,视频测试脚本可运行testVideo.py文件,为确保程序顺利运行,请配置Python依赖包的版本如下:➷➷➷
(Python版本:3.7)
hyperlpr 0.0.2
Keras 2.2.4
tensorflow 1.13.1
numpy 1.21.5
Pillow 9.0.1
PyQt5 5.15.4
pyqt5-tools 5.15.4.3.2
opencv-python 3.4.9.31

完整资源下载链接1:博主在面包多网站上的完整资源下载页

完整资源下载链接2:https://mianbaoduo.com/o/bread/mbd-YpiUlphp

注:以上两个链接为面包多平台下载链接,CSDN下载资源频道下载链接稍后上传。

结束语

由于博主能力有限,即使博文中提到的方法经过测试,也难免有疏漏。希望大家多多指出错误,让下一次的修改能以更完善、更严谨的方式呈现给大家。同时,如果有更好的实现方法,请告诉我。

中华人民共和国公安部.GA36-2014。中华人民共和国公共安全行业标准–中华人民共和国机动车号牌[S]。北京:群众出版社, 2014, 2-4↩︎Du S, Ibrahim M, Shehata M, et al。Automatic license plate recognition (ALPR): A state-of-the-art review[J]。IEEE Transactions on circuits and systems for video technology, 2012, 23(2): 311-325.↩︎

版权声明:本文为博主思绪无限原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/qq_32892383/article/details/123088309

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2022年2月28日
下一篇 2022年2月28日

相关推荐