基于深度学习的中文车牌识别与管理系统(含UI界面,Python代码)
off999 2024-11-05 10:56 38 浏览 0 评论
前言
车牌识别其实是个经典的机器视觉任务了,通过图像处理技术检测、定位、识别车牌上的字符,实现计算机对车牌的智能管理功能。如今在小区停车场、高速公路出入口、监控场所、自动收费站等地都有车牌识别系统的存在,车牌识别的研究也已逐步成熟。尽管该技术随处可见了,但其实在精度和识别速度上还需要进一步提升,自己动手实现一个车牌识别系统有利于学习和理解图像处理的先进技术。
车牌识别的算法经过了多次版本迭代,检测的效率和准确率有所提升,从最初的基于LBP和Haar特征的车牌检测,到后来逐步采用深度学习的方式如SSD、YOLO等算法。车牌的识别部分也由字符匹配到深度神经网络,通过不断验证和测试,其检测和识别效果和适用性都更加突出,支持的模型也更为丰富。
网上的车牌识别程序代码很多,大部分都是采用深度学习的目标检测算法等识别单张图片中的车牌,但几乎没有人将其开发成一个可以展示的完整软件,即使有的也是比较简单的界面。对此这里给出博主设计的界面,不算精美但比较简约风,功能也可以满足单张图片、批量图片、视频和摄像头的识别检测了,初始界面如下图:
检测车牌时的界面截图(点击图片可放大)如下图,也可开启摄像头或视频检测:
详细的功能演示效果参见博主的B站视频或下一节的动图演示,觉得不错的朋友敬请点赞、关注加收藏!系统UI界面的设计工作量较大,界面美化更需仔细雕琢,大家有任何建议或意见和可在下方评论交流。
1. 效果演示
首先还是用动图先展示一下效果,系统主要实现的功能是对图片、视频和摄像头画面中的车牌进行检测和识别,识别的结果可视化显示在界面和图像中,另外提供车牌识别历史记录和回看功能,演示效果如下。
(一)选择单张 / 批量车牌识别
首先还是用动图先展示一下效果。进入软件界面后,点击图片选择按钮选择一张图片,点击“开始运行”即可自动识别车牌并显示结果在界面上;点击历史识别记录的表格序号可回看识别记录。本功能的界面展示如下图所示:
同样的如果需要识别批量图片,可以选择一个包含多张图片文件的文件夹,选择好后点击“开始运行”则逐个对每个文件进行检测和识别,结果与单张图片时类似,可通过表格记录回看识别结果:
(二)车牌视频识别效果展示
很多时候我们需要识别一段视频中的车牌,这里设计了视频选择功能。点击视频按钮可选择待检测的视频,系统会自动解析视频逐帧识别车牌,并将结果记录在右下角表格中,效果如下图所示:
(三)摄像头检测效果展示
在真实场景中,我们往往利用设备摄像头获取实时画面,同时需要对画面中的车牌进行识别,因此本文考虑此功能。如下图所示,点击摄像头按钮后系统进入准备状态,再点击“开始运行”后,系统显示实时画面并开始检测画面中的车牌,识别结果展示并记录:
2. 车牌检测与识别
目前,智能交通系统中集成运用计算机视觉、物联网、人工智能等多种技术成为未来发展方向。其中,车牌识别(License Plate Recognition, LPR)技术作为一项重要技术,从获取的图像中提取目标车辆的车牌信息,成为完善智能交通管理运行的基础。
由于本文介绍的是中文车牌,所以可以简单了解一下国内汽车牌照的特点:字符数为七个,包括汉字、字母和数字。车牌颜色组合中,其中最常见的组合为普通小型汽车蓝底白字和新能源汽车的渐变绿底黑字。
由于本文介绍的是中文车牌,所以可以简单了解一下国内汽车牌照的特点:字符数为七个,包括汉字、字母和数字,车牌轮廓长宽比例基本固定。车牌颜色组合中,其中最常见的组合为普通小型汽车蓝底白字和新能源汽车的渐变绿底黑字。总结来说,车牌是一个有特点的图像区域,几种特征可以综合起来确定车牌定位,所以之前就有利用车牌与周围环境的差异的算法。目前常见的车牌定位算法有以下 4 种:基于颜色、纹理、边缘信息的车牌定位算法和基于人工神经网络的车牌定位算法。
为了方便演示,博主绘制了一张车牌识别的流程图,如下图所示,常规的步骤包括图像采集、预处理、车牌定位、字符分割、字符识别、输出结果。深度学习技术成熟之后,端到端的网络模型使得这一过程变得简单起来。从思想上来说,基于深度学习的车牌识别实现思路主要包括两个部分:(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,读取一张车牌图片调用架构中的车牌识别方法获得结果,以下代码来自官方的示例:
#导入包
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此时运行以上代码可以得到如下结果:
同理,识别视频中的车牌也可以做类似的操作,不过我们需要先对视频文件进行逐帧读取,然后采用以上的方式在图片中标识出车牌并显示。这部分代码如下:
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代码文件,通过调用界面部分的代码同时加入对应的逻辑处理代码。
原文链接:https://blog.csdn.net/qq_32892383/article/details/123088309?spm=1001.2100.3001.7377&utm_medium=distribute.pc_feed_blog_category.none-task-blog-classify_tag-3.nonecase&depth_1-utm_source=distribute.pc_feed_blog_category.none-task-blog-classify_tag-3.nonecase
相关推荐
- 改名字大全生辰八字免费(改名字大全生辰八字免费五行属火的字有哪些)
-
起名步骤:1、分析生辰八字命主五行、格局,找出用神喜忌。2、选出命局所喜用所需要的五行汉字。3、根据姓氏及辈分、时代特征、性别、八字数理合理搭配将要用的字,去其忌讳用字,避开凶数.取其字的意、形、象、...
- 主题字体免费(小猫の字体)
-
在搜索栏里面输入免费字体和主题就出来了1.阿里巴巴普惠体在其官方下载渠道上,明确声明:允许任何个人和企业免费使用,包括商用用途,但禁止用于违法用途。2.方正免费字体免费字体:方正黑体、方正书宋、方正仿...
- 迅雷输入法下载(迅雷输入法最新版本)
-
您好,不管是哪个输入法,都会收集用户的密码和个人资料以及隐私内容的,希望能帮到您,祝您生活愉快!迅雷输入是指在计算机领域中,将数据从一个地方快速、高效地传输到另一个地方的过程,通常用于下载文件、上传...
- 丝瓜app破解版无限次(丝瓜app破解版apk)
-
1、单个软件缓存数据过多。可进入设置--应用程序--全部--查找点击出现闪退的软件名称--清除数据后再使用试试。2、安装位置不合适(部分机型才有该功能))部分软件对手机安装位置有所要求,安装软件更好是...
-
- 免费英语学习网站(有什么免费学英语的网站)
-
现在网上的高中学习网站很多,像高中教育网校,简单学习网,新东方在线,学而思网校,中小学教育网等。各有利弊,选择适合自己的。并且能不能提高成绩,关键还是靠学生自己努力。我们来看下这些课堂总体特点:封闭课堂在听课过程中屏蔽了聊天、游戏等对学生听...
-
2026-01-18 09:03 off999
-
- 在线铃声下载 免费下载(手机铃声制作app下载)
-
移动那叫“彩铃”,联通那叫“炫铃”,电信那叫“悦铃(可能不对)”总之,这些都是由运营商提供的,有的是免费有的是付费,需要订购。也就是需要你手机发指令或到网上营业厅或直接到柜台办理,然后在设置里设置指定某电话听到的回铃音是什么音乐(这个设置是...
-
2026-01-18 08:51 off999
- 种子搜索神器在线搜索(种子搜索神器在线搜索下载)
-
01.磁力熊磁力熊,是一个内容丰富、功能最为强大的一个磁力搜索网站,通过它不仅仅可以搜索到大量纯净的1080P高分电影,像一些比较小众的影视剧这里也都能找到。02.夕阳小站夕阳小站,虽然网站整体界面设...
-
- 模拟炒股软件app排名(模拟炒股软件app排名榜)
-
同花顺、云掌财经、东方财富网、大智慧同花顺是股民使用比较多的软件了,实时的行情更新,数据分析,模拟炒股都是同花顺的有点所在,在炒股软件使用中占有率非常高。自定义设置的8个板块等按快捷代码查看相当方便(一键查看自选股)。炒股入门首选。大智慧也...
-
2026-01-18 08:03 off999
- oa办公系统功能介绍(oa办公系统都有哪些)
-
以下是一些可能包含在OA办公系统中的常见功能:1.通讯录管理:包括添加、编辑和删除联系人信息,可按部门、职位等分类浏览联系人。2.日程管理:提供个人和团队日程安排功能,可创建、编辑和共享日程,设置...
- 绝地求生(国际服)下载官方(绝地求生国际服下载安装免费正版)
-
首先需要安装和登录Steam(一个游戏平台);然后在Steam搜索"playerunknown'sbattlegrounds"并选择购买;下载并安装游戏,选择要加入的Serv...
- 麻花影视下载(麻花影视下载官方破解版)
-
被人举报了,然后关掉了国内的服务器,现在国内用的都是海外服务器而且用的人太多了所以卡
- 诺基亚n72(诺基亚n72上市时间价格多少)
-
n72是N系列中唯一一款不支持3G的智能机,还有N70。另外说说N72的十大缺点:1、电池待机时间较短,键盘较小,按键不方便2、嘈杂状态下铃声及振动较小,通话声音也较小3、短信书写中没有常用的网络符号...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
系统u盘安装(win11系统u盘安装)
-
Python 批量卸载关联包 pip-autoremove
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
