百摩网
当前位置: 首页 生活百科

车号识别怎么弄(车号识别系统推荐)

时间:2023-05-21 作者: 小编 阅读量: 11 栏目名: 生活百科

如今在小区停车场、高速公路出入口、监控场所、自动收费站等地都有车牌识别系统的存在,车牌识别的研究也已逐步成熟。车牌颜色组合中,其中最常见的组合为普通小型汽车蓝底白字和新能源汽车的渐变绿底黑字。深度学习技术成熟之后,端到端的网络模型使得这一过程变得简单起来。可以认为检测出的车牌位置才是我们的感兴趣区域。当ROI被检测出来,如何对这一区域中的字符进行识别,这就涉及到采取的处理方式。

前言

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

车牌识别的算法经过了多次版本迭代,检测的效率和准确率有所提升,从最初的基于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进行计算,参考网址:http://gitee.com/zeusees/HyperLPR。级联分类器的方法对于常用场景效果比较好,检测速度较快,曾经一度比较流行,但准确率一般。基于深度学习的检测算法有Mobilene-SSD、YOLO-v5等,利用大批量的标注数据进行训练,训练代码可以参考开源代码http://github.com/zeusees/License-Plate-Detector。

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

我们首先读取图片文件,利用前面的HyperLPR_plate_recognition方法识别出车牌结果,调用以上函数获得带标注框的图片,利用OpenCV的imshow方法显示结果图片,其代码如下:

image = cv.imread('test3.jpg"')# 读取选择的图片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 = 1while (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界面。打开QtDesigner软件,拖动以下控件至主窗口中,车牌识别系统的界面设计如下图所示:控件界面部分设计好,接下来利用PyUIC工具将.ui文件转化为.py代码文件,通过调用界面部分的代码同时加入对应的逻辑处理代码。

    推荐阅读
  • 家常凉皮(红油凉皮的烹饪技巧分享)

    以下内容希望对你有帮助!家常凉皮主料:凉皮200克。辅料:老姜2片、大蒜2瓣、小葱1颗、香菜1颗、小米辣2个、酱油3勺、香醋2勺、油泼辣子1大勺、花椒油1勺、细砂糖0.5勺、盐1勺。姜末、蒜末、小米辣混合,用温开水浸泡出香味。随后调入酱油、香醋、油泼辣子、花椒油、细砂糖、盐,搅拌均匀。捞出,控干水分。撒上小葱、香菜段就做好啦。

  • 游戏画面好的国战类网游(网易第一国战网游再出新职业)

    而提到国战网游,就不得不提到网易旗下在国战和PVP方面一直颇有想法的《大唐无双》。北辰宫身为天星之尊,在战斗中会自动吸引星能为己所用,星能越多伤害提高的也越多。《大唐无双》这么多年一直精心打磨游戏,没有随波逐流,一直不忘初心,希望给玩家更好的国战体验。如果你想要提前体验北辰宫这个新职业的话,那么可以在9月9日至10月8日这个时间段,到《大唐无双》的专服,并达到一定等级就可以拥有体验资格了!

  • 西门夜说名字打分106分

    文章目录:一、西门夜说相关名字打分116二、西门夜说相关名字评分113三、西门夜说相关名字推荐四、西门夜说相关名字大全五、其他人还看了一、西门夜说相关名字打分116西门卓柏伟西门塔牛海勃西门坚黄庆阳关小双瞿绪标许我廖常初西门骑芸朱玉平西门大妈西门子灶林春红西门焰焰邱璇安行书刘同舫爱舒西门行郑紫薇李文军郭里园白丸双极管古楚语周小斌乔颖高裕蓝帕侯向宇马莹莹乐赚网李宗阳廖昊月鱼鱼鱼西门关贝里翁西门杏何善

  • 证婚词致辞简短精辟(简短证婚词精选)

    证婚词致辞简短精辟首先我代表在座来宾祝新郎新娘新婚快乐、永结同心、幸福美满!我受新郎、新娘,及其双方父母的之托,为两位新人证婚,感到荣幸之至。新郎xx先生,英俊潇洒、忠厚诚实,为人和善,认真负责、任劳任怨,是一位才华横溢的好青年。他们的结合是天作之合、佳偶天成!在今天的大喜日子里,我谨代表大家,向两位新人表示热烈地祝贺和美好地祝愿。

  • 红掌花浇水的正确方法(红掌花浇水的正确方法是什么)

    不过要注意的时候,如果是夏季浇水的话,那么则绝不可在中午进行,避免蒸发过大,导致红掌被烧坏。在浇水的时候,因为红掌生长时期的不同,对水分的要求也是有所不同的。当红掌进入到开花期之后,则要适当减少浇水量,施磷钾肥,促使红掌能够多开花。红掌喜欢生长在湿润的环境中,因此要保持湿度较高,土壤含水量高的环境。通常红掌的生长环境要保证在75%左右,如果红掌叶片出现干尖现象的话,要及时喷水。

  • qq留言删除操作频繁多久又可以删 qq留言怎么删除一次全部删除频繁操作

    QQ空间的留言删除操作太频繁主要是腾讯判断为风险操作,临时启动了保护策略,可以删可以隔一天再进行删除,或者可以在删除的时候多选几条批量删除,不用一条条的删除。

  • 玉体横陈冯小怜(玉体横陈冯小怜)

    可想而知北齐皇帝对于美貌女子的喜爱,而冯小怜则是得到了北齐第五任皇帝高纬的青眼。然而北齐的朝局并不安稳,最大的敌人北周不断进犯,晋州危在旦夕。随着北周越战越勇,右丞相背叛高纬,与北周里应外合将高纬活捉于青州。即使已经沦为阶下囚,高纬仍然请求北周皇帝宇文邕将冯小怜还给他,宇文邕虽将高纬羞辱了一番,但把冯小怜还给了高纬。然而此时北周的相国杨坚却选择了篡位,并且杀害了包括宇文达在内的五王,建立了隋朝。

  • 蛇的七寸是哪个部位(蛇的三寸和七寸分别是哪)

    大部分长时间记忆都是对短时记忆内容的加工。在极端情况下,市场会止步萎缩和不存在。民间有“打蛇打七寸”和“打蛇打三寸”两种不同的说法,这或许是因为各个地方风俗习惯的不同。如此一来,蛇不仅无法直起身子咬人,生命也会受到威胁。“七寸”则是指蛇的心脏部位,心脏一旦受到攻击,那么蛇必然丧命,自然不可能再攻击人了。不过,蛇有大小和种类之别,要害部位存在差异,在面对蛇的威胁时,要根据实际情况正确选择。

  • 一万步是多少公里大概多少分钟(大家可以了解一下)

    一般而言,走一万步消耗的热量大约在240至300卡路里,任何针对促进健康的有氧运动而言,对强度都有要求,步行也不例外。健步走想要走出健康,强度是关键因素之一。人体每天摄入的总热量约为1800~2000千卡。对于大多数人而言,除去正常生活所需消耗的热量,每天走一万步恰好能将多余的热量消耗掉。

  • 我的世界最好玩的组件(我的世界万能组件大揭晓)

    我的世界万能组件大揭晓到底什么秘密武器能让《我的世界》锦上添花?还能满足你的一切需求?它就是万能的Decocraft组件!Decocraft是《我的世界》中国版(PC版)的功能组件,它是一个有趣的装饰组件,提供了25类不同。