python车牌识别系统开源代码_汽车牌照识别系统【YOLO+MLP】

车牌识别系统可以自动检测并识别图像中的车辆牌照,其算法主要包括牌照定位、牌照分割、字符识别等步骤。本文将给出一种基于深度学习的车牌识别系统方案。

7f254b7451c515672b1ec11cebce98ee.png
要快速掌握开发人工智能系统的技能,推荐汇智网的 机器学习系列在线课程

由于可以自动地从视频图像中提取车辆牌照信息,因此车牌识别系统可以应用于以下行业:

  • 公共安全:用于检测被盗抢车辆,将车牌与盗抢车辆数据库记录比对即可发现。
  • 停车管理:停车场入口自动放行、出口自动计费。
  • 道路安全:与雷达测试配合使用,识别超速车辆并记录违章

我们的项目包含以下三个步骤:车辆牌照检测、牌照字符分割、牌照字符识别。

1、车辆牌照检测

我们使用Yolo(You Only Look One)算法来检测车辆牌照。Yolo是一个基于卷积神经网络的深度学习目标检测架构。该架构由 Joseph Redmon , Ali Farhadi, Ross Girshick和Santosh Divvala引入,2015年推出第一个版本,然后逐渐升级至版本3:

  • Yolo v1;论文
  • Yolo v2:论文
  • Yolo v3;论文

Yolo是一个端到端训练的单一网络,可以用来预测目标的类别与边界框。Yolo网络速度极快,可以每秒45帧的速度实时处理图像。其中一个较小规模的网络,被称为Fast YOLO,甚至达到了令人咂舌的155帧/秒的处理速度。

下面我们来实现YOLO V3网络。首先,我们准备一个有700张包含土耳其车辆牌照的图片的数据集,对每一张图片,我们都使用一个桌面应用LabelImg标注出车牌位置并存入一个xml文件。数据下载及网络训练脚本如下:

# First download Darknet project
$ git clone https://github.com/pjreddie/darknet.git# in "darknet/Makefile" put affect 1 to OpenCV, CUDNN and GPU if you # want to train with you GPU then time thos two commands
$ cd darknet
$ make# Load convert.py to change labels (xml files) into the appropriate # format that darknet understand and past it under darknet/https://github.com/KhazriAchraf/ANPR# Unzip the dataset
$ unzip dataset.zip# Create two folders, one for the images and the other for labels
$ mkdir darknet/images
$ mkdir darknet/labels# Convert labels format and create files with location of images
# for the test and the training
$ python convert.py# Create a folder under darknet/ that will contain your data
$ mkdir darknet/custom# Move files train.txt and test.txt that contains data path to
# custom folder
$ mv train.txt custom/
$ mv test.txt custom/# Create file to put licence plate class name "LP"
$ touch darknet/custom/classes.names
$ echo LP > classes.names# Create Backup folder to save weights
$ mkdir custom/weights# Create a file contains information about data and cfg 
# files locations
$ touch darknet/custom/darknet.data# in darknet/custom/darknet.data file paste those informations
classes = 1
train  = custom/train.txt
valid  = custom/test.txt
names = custom/classes.names
backup = custom/weights/# Copy and paste yolo config file in "darknet/custom"
$ cp darknet/cfg/yolov3.cfg darknet/custom# Open yolov3.cfg and change :
# " filters=(classes + 5)*3" just the ones before "Yolo"
# in our case classes=1, so filters=18
# change classes=... to classes=1# Download pretrained model
$ wget https://pjreddie.com/media/files/darknet53.conv.74 -O ~/darknet/darknet53.conv.74# Let's train our model !!!!!!!!!!!!!!!!!!!!!
$ ./darknet detector train custom/darknet.data custom/yolov3.cfg darknet53.conv.74

在网络训练完之后,为了识别图像中的车辆牌照,我们从darknet/custom/weights中选择最新的模型并在文件object_detection_yolo.py中写入其路径名称,我们也将使用yolov3.cfg文件,注释掉训练部分,然后执行:

python object-detection_yolo.py --image= image.jpg

这就是我们的结果:

1c8d5f268d23be763c0fa5578011b725.png

2、车牌字符分割

现在我们要分割出我们的车牌号码。这个步骤的输入是车牌图像,我们必须能够提取出单个字符的图像。由于这一步骤的输出将用于识别步骤,因此对于一个车牌识别系统而言,车牌分割步骤非常重要。为了尽可能的正确分割车牌字符,我们需要进行必要的预处理。

e6a7f7164947e8204b67392685f03fa2.png

像素投影直方图用来找出字符区域的上限和下限、左边及右边。我们使用水平投影来找出字符的顶部 和底部位置,使用垂直投影来找出字符的左边和右边位置:

bfa93d31db95fdbd258c6310c8ccbcdc.png

从车辆牌照中提取数字的另一个方法时使用形态学的开/闭操作来生成一些连通区域,然后再使用连通跟踪算法提取这些连通区域。

3、车牌字符识别

识别阶段是我们的车牌自动检测与识别系统的最后一个环节,识别是基于前面环节得到的单个字符图像。我们的模型将对这些图像进行预测,从而得到最终的车牌号码。

为了尽可能利用训练数据,我们将每个字符单独切割,得到一个车牌字符数据集,该数据集中包含11个类(数字0-9以及阿拉伯单词),每个类包含30~40张字符图像,图像为28X28的PNG格式。

然后,我们就多层感知器MLP和K近邻分类器KNN的比较进行了一些调研,研究结果标明,对于多层感知器而言,如果隐层的神经元增多,那么分类器的性能就会提高;同样,对于KNN而言,性能也是随着近邻数量的增多而提高。不过由于KNN的可调整潜力要远远小于MLP,因此我们最终选择在这个阶段使用多层感知器MLP网络来识别分割后的车牌字符:

083a932356d578ed21c7ae6fe6233599.png

你可以在这里找到代码及数据集:github


原文链接:车辆牌照自动检测与识别 —— 汇智网

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339117.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

幻灯片演示什么模式最好_清洁单元测试图案–演示幻灯片

幻灯片演示什么模式最好我有机会在2014年GDG DevFestKarlsruhe会议上谈论“清洁单元测试模式”。 感谢组织者邀请我,也感谢所有听我讲话的人。 如所承诺的,我为那些想看一下我在演讲中没有讲过的其他幻灯片的人分享了演示文稿: 清洁单元测试…

js text 和 html,JS DOM innerText和textContent的区别

innerText和textContent很多人会困惑,因为都可以用来获取文本内容,实际上,两者还是有很多区别的,本文就将介绍这两个属性的异同,希望可以对大家的学习有所帮助。一、之前错误的认识innerText IE6就开始支持&#xff0c…

如何用耳机翻页_游戏耳机的经典之作—罗技(G)Astro A40体验

前言经常去网吧玩游戏的朋友,在家玩如果没有头戴式耳机,那体验真的会差一大截。优秀的电竞游戏耳机会带来更好的游戏体验,不仅是舒适性。像绝地求生这类FPS游戏,游戏耳机会让听声辩位更容易更精确。最近因为大促降价入手的罗技&am…

我改了500个Bug,但是!!

IT程序猿 微博网友评论:空白一页blank:不写bug怎么改bug 抠Bee:不经意间病毒都出来了我在海的这边你在哪里丫:好了,发给开发小弟了富贵小小神仙:要不然呢,那些从开发到维护的程序员不都是靠这么…

jboss maven_使用Maven配置JBoss / Wildfly数据源

jboss maven大多数Java EE应用程序在其业务逻辑中使用数据库访问,因此开发人员经常面临在应用程序服务器中配置驱动程序和数据库连接属性的需求。 在本文中,我们将使用Maven为JBoss / Wildfly和Postgre数据库自动化该任务。 这项工作是根据我从以前的魔兽…

globalmapper如何选取图像上的点_OpenCV 进阶应用,用编程手段搞定图像处理

在我们生活中,常见的图像处理软件有Adobe Photoshop、Adobe Illustrator等。然而,并非只有软件才能实现图像处理,通过编程手段也是能实现的!通过编程手段实现图像处理,也就是计算机视觉。所谓计算机视觉,就…

pytorch relu函数实现_什么是pytorch?

PyTorch是一个:机器学习框架,简单易学可以看做是支持GPU计算和自动微分计算的“Numpy”库支持100多种Tensor常规算子,包括:创建、索引、切片、转置、连接、随机数、形状改变,线性代数、数学计算Tensor是一个有值有属性…

C sort 排序函数用法

最近在刷ACM经常用到排序,以前老是写冒泡,可把冒泡带到OJ里后发现经常超时,所以本想用快排,可是很多学长推荐用sort函数,因为自己写的快排写不好真的没有sort快,所以毅然决然选择sort函数用法1、sort函数可…

python人脸_Python 使用 face_recognition 人脸识别

Python 使用 face_recognition 人脸识别 人脸识别 face_recognition 是世界上最简单的人脸识别库。 使用 dlib 最先进的人脸识别功能构建建立深度学习,该模型准确率在99.38%。 Python模块的使用 Python可以安装导入 face_recognition 模块轻松操作,对于简…

osgi 如何引入包_OSGi Testsuite:引入类名过滤器

osgi 如何引入包OSGi Testsuite是一个JUnit测试运行程序 ,它动态地收集要执行的测试类。 它已经由我的同伴Rdiger大约一年前出版,并且已经在某些项目中证明有用。 但是对于gonsole,我们必须使用一个难看的补丁,因为1.0版仅支持.*T…

C语言,一把菜刀。

C 与 C 的真正区别在哪里?C是中餐厨师的菜刀,做啥菜就那一把刀,切菜切肉切鱼,都是这一把刀,刀工好的师傅,豆腐都能切成一朵花。无论你提什么概念,都能用指针给你做出来,如果不行&…

查询计算机专业及选修了英语的学生,实验五 数据库综合查询(学生)

实验五 数据库综合查询一、实验目的1. 掌握SELECT语句的基本语法和查询条件表示方法; 2. 掌握查询条件种类和表示方法; 3. 掌握连接查询的表示及使用; 4. 掌握嵌套查询的表示及使用; 5. 了解集合查询的表示及使用。二、实验内容1.…

python读取写入文件_Python文件读写保存操作

记录下第一次使用Python读写文件的过程,虽然很简单,第一次实现其实也有些注意的事项。 单个文件的读操作: 我们先假设一个需求如下: 读取一个test.txt文件 删除指定字符之前的文本 需求明白之后,下面开始动手写代码&am…

css中设置br标签之后的样式_CSS学习

语法:选择器,声明(由一个属性和一个值)注释:/* */选择器:1. id选择器,class选择器2. 组和选择3. 属性选择创建:外部样式表html <head> <link rel"stylesheet" type"text/css" href"mystyle.css"> </head>内部样式表html <h…

eclipse扩展点_Eclipse扩展点评估变得容易

eclipse扩展点编码Eclipse扩展点评估有点冗长&#xff0c;而且很少能自我解释。 当我最近忙于自己忙于这个话题时&#xff0c;我写了一个小助手&#xff0c;目的是减少通用编程步骤的样板代码&#xff0c;同时增加开发指导和可读性。 它原来是不容易找到一个表现的解决方案&am…

扯淡!C语言怎么可能被淘汰呢?

“第一门编程语言学C靠谱吗&#xff1f;”“C还有未来吗&#xff1f;”“我应该考虑学C吗&#xff1f;”“C太老了吧&#xff01;”你是否也听过类似的话语&#xff1f;听说过无数次&#xff0c;有些是面对面的交谈&#xff0c;而有些来自某个论坛。虽然答案无非是“取决于具体…

如何正确运用计算机技术,如何正确认识与运用计算机网络技术.doc

如何正确认识与运用计算机网络技术如何正确认识与运用计算机网络技术摘要&#xff1a;正如每个人所见&#xff0c;在中国当前的形势下&#xff0c;从小培养计算机网络技术人才还是个薄弱环节。作为中小学计算机网络技术教师的我们必须在透彻了解本校或本地区学生对计算机网络技…

google账号解除游戏绑定_附方法!关于物联卡手机号的绑定与解绑

我们在使用物联卡时第一步都知道绑定手机号&#xff0c;只有绑定了手机号我们才能进行正常的充值、续费、查询等日常操作&#xff0c;当我们不再使用这些物联卡时&#xff0c;你知道怎么解绑吗&#xff1f;今天&#xff0c;我们以中国移动物联卡为例&#xff0c;咱们来看一下移…

elasticsearch原理_花几分钟看一下Elasticsearch原理解析与性能调优

基本概念定义一个分布式的实时文档存储&#xff0c;每个字段 可以被索引与搜索一个分布式实时分析搜索引擎能胜任上百个服务节点的扩展&#xff0c;并支持 PB 级别的结构化或者非结构化数据用途全文检索结构化搜索分析VS传统数据库传统数据库提供精确匹配ES提供精确匹配全文检索…

spark wai_WAI-ARIA对自动完成小部件的支持

spark wai在这篇文章中&#xff0c;我想讨论一个AutoComplete小部件的可访问性。 在您键入该字段时&#xff0c;通常会使用“自动完成”窗口小部件提供建议。 在当前的工作中&#xff0c;我基于Twitter的Typeahead &#xff08;一个灵活JavaScript库&#xff09;实现了JSF组件&…