AI 助理
备案 控制台
开发者社区 人工智能 文章 正文

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

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

前言


       车牌识别其实是个经典的机器视觉任务了,通过图像处理技术检测、定位、识别车牌上的字符,实现计算机对车牌的智能管理功能。如今在小区停车场、高速公路出入口、监控场所、自动收费站等地都有车牌识别系统的存在,车牌识别的研究也已逐步成熟。尽管该技术随处可见了,但其实在精度和识别速度上还需要进一步提升,自己动手实现一个车牌识别系统有利于学习和理解图像处理的先进技术。

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

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



       检测车牌时的界面截图(点击图片可放大)如下图,也可开启摄像头或视频检测:



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


1. 效果演示


       首先还是用动图先展示一下效果,系统主要实现的功能是对图片、视频和摄像头画面中的车牌进行检测和识别,识别的结果可视化显示在界面和图像中,另外提供车牌识别历史记录和回看功能,演示效果如下。


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

       首先还是用动图先展示一下效果。进入软件界面后,点击图片选择按钮选择一张图片,点击“开始运行”即可自动识别车牌并显示结果在界面上;点击历史识别记录的表格序号可回看识别记录。本功能的界面展示如下图所示:



       同样的如果需要识别批量图片,可以选择一个包含多张图片文件的文件夹,选择好后点击“开始运行”则逐个对每个文件进行检测和识别,结果与单张图片时类似,可通过表格记录回看识别结果:



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

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



(三)摄像头检测效果展示

       在真实场景中,我们往往利用设备摄像头获取实时画面,同时需要对画面中的车牌进行识别,因此本文考虑此功能。如下图所示,点击摄像头按钮后系统进入准备状态,再点击“开始运行”后,系统显示实时画面并开始检测画面中的车牌,识别结果展示并记录:




2. 车牌检测与识别


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

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



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

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



       其中,车牌的检测定位本质是一个特定的目标检测(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,读取一张车牌图片调用架构中的车牌识别方法获得结果,以下代码来自官方的示例:

java
#导入包
from hyperlpr import *
#导入OpenCV库
import cv2
#读入图片
image = cv2.imread("demo.jpg")
#识别结果
print(HyperLPR_plate_recognition(image))


       以上代码运行结果如下,可以看出该方法识别了车牌的车牌字符、置信度值、车牌位置坐标、图片尺寸等结果。



       这样的结果还不够直观,我们写一个函数将车牌的识别结果标注在图片上,首先导入相关依赖包,其代码如下:

java
# 导入包
from hyperlpr import *
# 导入OpenCV库
import cv2 as cv
from PIL import Image, ImageDraw, ImageFont
import numpy as np
        新建一个函数drawRectBox,将图像数据、识别结果、字体等参数传入,函数内部利用OpenCV和PIL库添加标注框和识别结果的字符,其代码如下:
java
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方法显示结果图片,其代码如下:
java
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


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



       同理,识别视频中的车牌也可以做类似的操作,不过我们需要先对视频文件进行逐帧读取,然后采用以上的方式在图片中标识出车牌并显示。这部分代码如下:

java
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界面。打开QtDesigner软件,拖动以下控件至主窗口中,车牌识别系统的界面设计如下图所示:



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



下载链接


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



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



注意:本资源已经过调试通过,下载后可通过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

思绪无限
目录
相关文章
Svan.
|
3天前
|
计算机视觉 Python
基于Dlib的人脸识别客户端(UI界面)
基于Dlib的人脸识别客户端(UI界面)
Svan.
18 2
Svan.
|
3天前
|
机器学习/深度学习 API 计算机视觉
基于Python_opencv人脸录入、识别系统(应用dlib机器学习库)(下)
基于Python_opencv人脸录入、识别系统(应用dlib机器学习库)(下)
Svan.
10 2
Svan.
|
3天前
|
机器学习/深度学习 存储 算法
基于Python_opencv人脸录入、识别系统(应用dlib机器学习库)(上)
基于Python_opencv人脸录入、识别系统(应用dlib机器学习库)(上)
Svan.
12 1
zzy的aly
|
7天前
|
Ubuntu Linux Python
Ubuntu学习笔记(六):ubuntu切换Anaconda和系统自带Python
本文介绍了在Ubuntu系统中切换Anaconda和系统自带Python的方法。方法1涉及编辑~/.bashrc和/etc/profile文件,更新Anaconda的路径。方法2提供了详细的步骤指导,帮助用户在Anaconda和系统自带Python之间进行切换。
zzy的aly
27 1
LKIDTI数据
|
3天前
|
Python
Python实现系统基础信息
Python实现系统基础信息
LKIDTI数据
14 0
Svan.
|
3天前
|
机器学习/深度学习 数据可视化 计算机视觉
基于opencv的车牌识别系统(UI界面采用tkinter设计)
基于opencv的车牌识别系统(UI界面采用tkinter设计)
Svan.
10 0
Svan.
|
3天前
|
机器学习/深度学习 缓存 数据可视化
基于Python_opencv的车牌识别系统
基于Python_opencv的车牌识别系统
Svan.
12 0
一行玩python
|
小程序 Python
如何用python做一个简单的输入输出交互界面?
想问下你写的程序怎么分享给别人使用? **直接发代码!**那不会代码的人岂不是得抓瞎 **那做成网站或者微信小程序!**时间成本太高了,更何况服务器又是一笔成本,后期可能还得不断维护
一行玩python
688 0
如何用python做一个简单的输入输出交互界面?
肥猪肥猪-17824
|
7天前
|
存储 程序员 开发者
Python编程基础:从入门到实践
【10月更文挑战第8天】在本文中,我们将一起探索Python编程的奇妙世界。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供有价值的信息。我们将从Python的基本概念开始,然后逐步深入到更复杂的主题,如数据结构、函数和类。最后,我们将通过一些实际的代码示例来巩固我们的知识。让我们一起开始这段Python编程之旅吧!
肥猪肥猪-17824
37 3
我不是游客20240119
|
8天前
|
机器学习/深度学习 数据采集 数据挖掘
探索Python编程的奥秘
【10月更文挑战第7天】本文将带你走进Python的世界,探索其背后的逻辑与魅力。我们将从基础语法开始,逐步深入到函数、面向对象编程等高级特性,最后通过实际项目案例,让你体验Python的强大与便捷。无论你是编程新手,还是有一定基础的开发者,都能在这篇文章中找到你需要的信息和启发。
我不是游客20240119
22 5

热门文章

最新文章

  • 1
    手把手教你用Python实践深度学习
  • 2
    DL:深度学习框架Pytorch、 Tensorflow各种角度对比
  • 3
    行人车辆检测与计数系统(Python+YOLOv5深度学习模型+清新界面)
  • 4
    《阿里云天池大赛赛题解析(深度学习篇)》导读
  • 5
    Facebook这样看“深度学习”技术
  • 6
    如何从系统层面优化深度学习计算?
  • 7
    云栖科技评论第15期:IBM联合NVIDIA开发世界上“最快商用深度学习系统”
  • 8
    IBM:最新突破将大幅提升深度学习速度
  • 9
    深度学习caffe实践学习
  • 10
    通过深度学习将 L1000 图谱转换为类似 RNA 的图谱
  • 1
    用 Python 优雅地玩转 Elasticsearch:实用技巧与最佳实践
    185
  • 2
    【python】在pycharm创建一个新的项目
    448
  • 3
    深入浅出Python机器学习:从零开始的SVM教程/厾罗
    187
  • 4
    深入浅出:讲解Python中的列表推导式
    87
  • 5
    如何将python命令链接到Python3
    192
  • 6
    vscode 使用python无法导入库
    142
  • 7
    Python 爬虫:Spring Boot 反爬虫的成功案例
    639
  • 8
    1688快速获取整店铺列表 采集接口php Python
    45
  • 9
    Python网络数据抓取(5):Pandas
    61
  • 10
    python 数字验证码 自动识别
    115
  • 相关课程

    更多
  • Python Web开发基础
  • Python爬虫实战
  • Python常用数据科学库
  • Python网络爬虫实战
  • Python完全自学手册图文教程
  • Python基础快速入门实战教程
  • 相关电子书

    更多
  • From Python Scikit-Learn to Sc
  • Data Pre-Processing in Python:
  • 双剑合璧-Python和大数据计算平台的结合
  • 相关实验场景

    更多
  • 函数计算实战-云开发创建视觉AI应用
  • 自然语言入门:NLP数据读取与数据分析
  • Python新手入门
  • Python入门
  • 一键创建和部署高分电影推荐语音技能
  • Python选择及循环结构
  • 推荐镜像

    更多
  • python-release
  • nodejs-release
  • debian-cd
  • 下一篇
    AI助理直击要害,从繁复中提炼精华——使用CDN加速访问OSS存储的图片

    深圳坪山网站建设公司网站站外优化华蓥网站优化推广网站全网优化推广联系方式白云网站优化方案郑州网站权重优化一年多少钱网站内外部优化需要学什么惠州企业优化网站许昌网站排名优化怎么选北京低价婚纱摄影网站优化厦门优化网站公司网站优化的费用沁阳网站自然优化服务商云浮网站优化入门锦江网站优化选哪家莱州商城网站优化公司天河网站推广优化方案枣庄网站外部优化嘉兴网站排名优化报价建筑网站优化方案书泰安济南网站排名优化公司网站推广优化正确选择谷歌从化网站排名推广优化公司海珠网站seo优化多少钱珠海网站界面优化网站制作优化仍亿灬云速捷华容区网站做优化多少钱新乡网站的优化压缩优化网站晋源区网站排名优化价格肇庆公司网站关键词优化方法香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

    深圳坪山网站建设公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化