一、系统应用介绍

二、主要实现技术原理

2.1车辆检测

2.2车牌定位

2.3车牌进行字符分割

2.4牌照字符识别方法

三、技术实现

四、开发环境

4.1LabVIEW介绍及数据采集卡

4.2python介绍

五、程序及步骤

5.1车牌类型识别及保存

5.2读取识别图片

5.3图片预处理

5.4排除不属于车牌的矩形区域

5.5颜色定位

5.6缩小非车牌边界

5.7测试

六、LabVIEW OCR实现车牌识别

6.1OCR

6.2前面板

一、系统应用介绍

车牌识别系统(Vehicle License Plate Recognition,VLPR) 是指能够检测到受监控路面的车辆并自动提取车辆牌照信息(含汉字字符、英文字母、阿拉伯数字及号牌颜色)进行处理的技术。车牌识别是现代智能交通系统中的重要组成部分之一,应用十分广泛。它以数字图像处理、模式识别、计算机视觉等技术为基础,对摄像机所拍摄的车辆图像或者视频序列进行分析,得到每一辆汽车唯一的车牌号码,从而完成识别过程。通过一些后续处理手段可以实现停车场收费管理,交通流量控制指标测量,车辆定位,汽车防盗,高速公路超速自动化监管、闯红灯电子警察、公路收费站等等功能。对于维护交通安全和城市治安,防止交通堵塞,实现交通自动化管理有着现实的意义。

         汽车牌照号码是车辆的唯一“身份”标识,牌照自动识别技术可以在汽车不作任何改动的情况下实现汽车“身份”的自动登记及验证,这项技术已经应用于公路收费、停车管理、称重系统、交通诱导、交通执法、公路稽查、车辆调度、车辆检测等各种场合。

二、主要实现技术原理

2.1车辆检测

车辆检测可以采用埋地线圈检测、红外检测、雷达检测技术、视频检测等多种方式。采用视频检测可以避免破坏路面、不必附加外部检测设备、不需矫正触发位置、节省开支,而且更适合移动式、便携式应用的要求。

其次系统进行视频车辆检测,需要具备很高的处理速度并采用优秀的算法,在基本不丢帧的情况下实现图像采集、处理。若处理速度慢,则导致丢帧,使系统无法检测到行驶速度较快的车辆,同时也难以保证在有利于识别的位置开始识别处理,影响系统识别率。因此,将视频车辆检测与牌照自动识别相结合具备一定的技术难度。

2.2车牌定位

在自然环境下,汽车图像背景复杂、光照不均匀,如何在自然背景中准确地确定牌照区域是整个识别过程的关键。首先对采集到的视频图像进行大范围相关搜索,找到符合汽车牌照特征的若干区域作为候选区,然后对这些侯选区域做进一步分析、评判,最后选定一个最佳的区域作为牌照区域,并将其从图像中分离出来。

2.3车牌进行字符分割

在完成牌照区域的定位后,再将牌照区域分割成单个字符,然后进行识别。字符分割一般采用垂直投影法。由于字符在垂直方向上的投影必然在字符间或字符内的间隙处取得局部最小值的附近,并且这个位置应满足牌照的字符书写格式、字符、尺寸限制和一些其他条件。利用垂直投影法对复杂环境下的汽车图像中的字符分割有较好的效果。

2.4牌照字符识别方法

车牌照识别系统主要有基于模板匹配算法和基于人工神经网络算法。基于模板匹配算法首先将分割后的字符二值化并将其尺寸大小缩放为字符数据库中模板的大小,然后与所有的模板进行匹配,选择最佳匹配作为结果。基于人工神经网络的算法有两种:一种是先对字符进行特征提取,然后用所获得特征来训练神经网络分配器;另一种方法是直接把图像输入网络,由网络自动实现特征提取直至识别出结果。

其次实际应用中,车牌识别系统的识别率还与牌照质量和拍摄质量密切相关。牌照质量会受到各种因素的影响,如生锈、污损、油漆剥落、字体褪色、牌照被遮挡、牌照倾斜、高亮反光、多牌照、假牌照等等;实际拍摄过程也会受到环境亮度、拍摄方式、车辆速度等等因素的影响。这些影响因素不同程度上降低了车牌识别的识别率,也正是车牌识别系统的困难和挑战所在。为了提高识别率,除了不断地完善识别算法还应该想办法克服各种光照条件,使采集到的图像最利于识别。

三、技术实现

牌照自动识别是一项利用车辆的动态视频或静态图像进行牌照号码、牌照颜色自动识别的模式识别技术。其硬件基础一般包括触发设备、摄像设备、照明设备、图像采集设备、识别车牌号码的处理机等,其软件核心包括车牌定位算法、车牌字符分割算法和光学字符识别算法等。某些牌照识别系统还具有通过视频图傢判断车辆驶入视野的功能称之为视频车辆检测。一个完整的牌照识别系统应包括车辆检测、图像采集、牌照识别等几部分。当车辆检测部分检测到车辆到达时触发图像采集单元,采集当前的视频图像。牌照识别单元对图像进行处理,定位出牌照位置,再将牌照中的字符分割出来进行识别,然后组成牌照号码输出

四、开发环境

4.1LabVIEW介绍及数据采集卡

LabVIEW是一种由美国国家仪器(NI)公司研制开发的程序开发环境,类似于C和BASIC开发环境。LabVIEW使用的是图形化编辑语言G编写程序,产生的程序是框图的形式,是NI设计平台的核心,也是开发测量或控制系统的理想选择,旨在帮助工程师和科学家解决问题、提高生产力和不断创新。

数据采集(DAQ),是指从传感器和其它待测设备等模拟和数字被测单元中自动采非电量或者电量信号,送到上位机中进行分析,处理。数据采集系统是结合基于计算机或者其他专用测试平台的测量软硬件产品来实现灵活的、用户自定义的测量系统。

视频采集卡:

● DV+AV+Audio全接口视频捕获卡,品质与性能的完美结合,SMD贴片电容,做工精良

●全接口板卡,集成立体声输入端口,无需再转接声卡

●独有音频协处理功能,两路立体声输入捕获,声音质量大幅提高,并杜绝音频、视频不同

●低温优化设计,保证超长时间捕获的稳定性

●杂波屏蔽电路,使捕获的图像画质更清晰

●专业色键抠像功能,影片效果更精彩

●全接口配备,可捕获任何视频播放设备中的素材

输入接口:AV/SVIDEO/DV

视频:720X576/352X288

音频:8/16/32/44。1/48

制式:N/P制

驱动:标准的DSHOW驱动

4.2python介绍

Python是一种解释型脚本语言,可以应用于以下领域:

  • Web和Internet开发

  • 科学计算和统计

  • 人工智能

  • 教育

  • 桌面界面开发

  • 软件开发

  • 后端开发

  • 网络接口:能方便进行系统维护和管理,Linux下标志性语言之一,是很多系统管理员理想的编程工具。

系统编程:提供API(Application Programming Interface应用程序编程接口),能方便进行系统维护和管理,Linux下标志性语言之一,是很多系统管理员理想的编程工具。

图形处理:有PIL、Tkinter等图形库支持,能方便进行图形处理。

数学处理:NumPy扩展提供大量与许多标准数学库的接口。

文本处理:python提供的re模块能支持正则表达式,还提供SGML,XML分析模块,许多程序员利用python进行XML程序的开发。

数据库编程:程序员可通过遵循Python DB-API(数据库应用程序编程接口)规范的模块与Microsoft SQL Server,Oracle,Sybase,DB2,MySQL、SQLite等数据库通信。python自带有一个Gadfly模块,提供了一个完整的SQL环境。

网络编程:提供丰富的模块支持sockets编程,能方便快速地开发分布式应用程序。很多大规模软件开发计划例如Zope,Mnet 及BitTorrent. Google都在广泛地使用它。

Web编程:应用的开发语言,支持最新的XML技术。

多媒体应用:Python的PyOpenGL模块封装了“OpenGL应用程序编程接口”,能进行二维和三维图像处理。PyGame模块可用于编写游戏软件。

五、程序及步骤

算法:

5.1车牌类型识别及保存

class PlateRecognition():client_id = 'LR6w0HKc8Yzjd8q6FPTkrgpR'client_secret = 'UyKYwPp38XkPAwPxl9pYpW0WsccfnBc9'def __init__(self):self.MAX_WIDTH = 1000  # 原始图片最大宽度self.Min_Area = 2000  # 车牌区域允许最大面积self.PROVINCE_START = 1000# 省份代码保存在provinces.json中with open('provinces.json', 'r', encoding='utf-8') as f:self.provinces = json.load(f)# 车牌类型保存在cardtype.json中,便于调整with open('cardtype.json', 'r', encoding='utf-8') as f:self.cardtype = json.load(f)# 字母所代表的地区保存在Prefecture.json中,便于更新with open('Prefecture.json', 'r', encoding='utf-8') as f:self.Prefecture = json.load(f)# 车牌识别的部分参数保存在js中,便于根据图片分辨率做调整f = open('config.js')j = json.load(f)for c in j["config"]:if c["open"]:self.cfg = c.copy()breakdef __del__(self):pass

5.2读取识别图片

    def __imreadex(self, filename):return cv2.imdecode(np.fromfile(filename, dtype=np.uint8), cv2.IMREAD_COLOR)def __point_limit(self, point):if point[0] < 0:point[0] = 0if point[1] < 0:point[1] = 0def accurate_place(self, card_img_hsv, limit1, limit2, color):row_num, col_num = card_img_hsv.shape[:2]xl = col_numxr = 0yh = 0yl = row_num# col_num_limit = self.cfg["col_num_limit"]row_num_limit = self.cfg["row_num_limit"]col_num_limit = col_num * 0.8 if color != "green" else col_num * 0.5  # 绿色有渐变for i in range(row_num):count = 0for j in range(col_num):H = card_img_hsv.item(i, j, 0)S = card_img_hsv.item(i, j, 1)V = card_img_hsv.item(i, j, 2)if limit1 < H <= limit2 and 34 < S and 46 < V:count += 1if count > col_num_limit:if yl > i:yl = iif yh < i:yh = ifor j in range(col_num):count = 0for i in range(row_num):H = card_img_hsv.item(i, j, 0)S = card_img_hsv.item(i, j, 1)V = card_img_hsv.item(i, j, 2)if limit1 < H <= limit2 and 34 < S and 46 < V:count += 1if count > row_num - row_num_limit:if xl > j:xl = jif xr < j:xr = jreturn xl, xr, yh, yl

5.3图片预处理

    def pretreatment(self, car_pic):if type(car_pic) == type(""):img = self.__imreadex(car_pic)else:img = car_picpic_hight, pic_width = img.shape[:2]if pic_width > self.MAX_WIDTH:resize_rate = self.MAX_WIDTH / pic_widthimg = cv2.resize(img, (self.MAX_WIDTH, int(pic_hight * resize_rate)),interpolation=cv2.INTER_AREA)  # 图片分辨率调整# cv2.imshow('Image', img)blur = self.cfg["blur"]

5.4排除不属于车牌的矩形区域

car_contours = []for cnt in contours:# 框选 生成最小外接矩形 返回值(中心(x,y), (宽,高), 旋转角度)rect = cv2.minAreaRect(cnt)# print('宽高:',rect[1])area_width, area_height = rect[1]# 选择宽大于高的区域if area_width < area_height:area_width, area_height = area_height, area_widthwh_ratio = area_width / area_height# print('宽高比:',wh_ratio)# 要求矩形区域长宽比在2到5.5之间,2到5.5是车牌的长宽比,其余的矩形排除if wh_ratio > 2 and wh_ratio < 5.5:car_contours.append(rect)box = cv2.boxPoints(rect)box = np.int0(box)# 框出所有可能的矩形# oldimg = cv2.drawContours(img, [box], 0, (0, 0, 255), 2)# cv2.imshow("Test",oldimg )# print(car_contours)

5.5颜色定位

 for i in range(row_num):for j in range(col_num):H = card_img_hsv.item(i, j, 0)S = card_img_hsv.item(i, j, 1)V = card_img_hsv.item(i, j, 2)if 11 < H <= 34 and S > 34:  # 图片分辨率调整yellow += 1elif 35 < H <= 99 and S > 34:  # 图片分辨率调整green += 1elif 99 < H <= 124 and S > 34:  # 图片分辨率调整blue += 1if 0 < H < 180 and 0 < S < 255 and 0 < V < 46:black += 1elif 0 < H < 180 and 0 < S < 43 and 221 < V < 225:white += 1color = "no"# print('黄:{:<6}绿:{:<6}蓝:{:<6}'.format(yellow,green,blue))limit1 = limit2 = 0if yellow * 2 >= card_img_count:color = "yellow"limit1 = 11limit2 = 34  # 有的图片有色偏偏绿elif green * 2 >= card_img_count:color = "green"limit1 = 35limit2 = 99elif blue * 2 >= card_img_count:color = "blue"limit1 = 100limit2 = 124  # 有的图片有色偏偏紫elif black + white >= card_img_count * 0.7:color = "bw"# print(color)colors.append(color)# print(blue, green, yellow, black, white, card_img_count)if limit1 == 0:continue

5.6缩小非车牌边界

xl, xr, yh, yl = self.accurate_place(card_img_hsv, limit1, limit2, color)if yl == yh and xl == xr:continueneed_accurate = Falseif yl >= yh:yl = 0yh = row_numneed_accurate = Trueif xl >= xr:xl = 0xr = col_numneed_accurate = Truecard_imgs[card_index] = card_img[yl:yh, xl:xr] \if color != "green" or yl < (yh - yl) // 4 else card_img[yl - (yh - yl) // 4:yh, xl:xr]if need_accurate:  # 可能x或y方向未缩小,需要再试一次card_img = card_imgs[card_index]card_img_hsv = cv2.cvtColor(card_img, cv2.COLOR_BGR2HSV)xl, xr, yh, yl = self.accurate_place(card_img_hsv, limit1, limit2, color)if yl == yh and xl == xr:continueif yl >= yh:yl = 0yh = row_numif xl >= xr:xl = 0xr = col_numcard_imgs[card_index] = card_img[yl:yh, xl:xr] \if color != "green" or yl < (yh - yl) // 4 else card_img[yl - (yh - yl) // 4:yh, xl:xr]# cv2.imshow("result", card_imgs[0])# cv2.imwrite('1.jpg', card_imgs[0])# print('颜色识别结果:' + colors[0])return card_imgs, colors

5.7测试

if __name__ == '__main__':c = PlateRecognition()# card_imgs, colors = c.pretreatment('./2.jpg')result = c.get_license_plate('./2.jpg')# cv2.imshow('card', card_imgs)cv2.waitKey(0)

六、LabVIEW OCR实现车牌识别

6.1OCR

OCR(光学字符识别)是指机器自动从图像中识别文本字符的过程,OCR机器视觉系统可用于对被测件的识别和分类。常见的识别应用包括:药品包装标签识别、IC芯片编码读取、冲压零件上的字符识别、汽车零件编码读取以及车牌识别等

OCR对图像中的文本进行读取时,会先将图像中的各个字符图像分割开来,并将字符的特征向量与字符集中保存的特征向量进行对比,选取满足条件的最佳匹配向量所对应的字符值作为读取识别结果。若有必要,也可以通过字符验证过程对OCR的识别质量进行验证。

OCR技术面

6.2前面板

基于LabVIEW+python实现车牌识别智能系统的设计相关推荐

  1. 基于BP神经网络的车牌识别系统的设计

    一.基本原理概述 基于BP神经网络的的汽车牌照识别系统的处理过程分为预处理.边缘提取.车牌定位.字符分割.字符识别五大模块.具体涉及以下几个过程: ① 原始车牌图像:由数码相机或其他扫描装置拍摄到的车 ...

  2. 【深度学习实践】基于深度学习的车牌识别(python,车牌检测+车牌识别)

    车牌识别具有广泛的应用前景,基于传统方法的车牌识别效果一般比较差,随着计算机视觉技术的快速发展,深度学习的方法能够更好的完成车牌识别任务. 本文提供了车牌识别方案的部署链接,您可以在网页上体验该模型的 ...

  3. 基于 Spring Boot 的车牌识别系统(附项目地址)

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! gitee开源地址 " https://git ...

  4. delphi 数字识别_基于STM32单片机的车牌识别

    系统介绍    使用STM32F103RCT6作为主控,摄像头使用OV7670(带FIFO).STM32进行了16倍频.识别过程分别为:图像采集,二值化,识别车牌区域,字符分割,字符匹配. 识别过程分 ...

  5. 基于 Spring Boot 的车牌识别系统(附项目地址)ba

    gitee开源地址 " https://gitee.com/admin_yu/yx-image-recognition 嘿嘿,胖友给艿艿的 https://github.com/YunaiV ...

  6. stm32车牌识别_基于STM32单片机的车牌识别

    系统介绍    使用STM32F103RCT6作为主控,摄像头使用OV7670(带FIFO).STM32进行了16倍频.识别过程分别为:图像采集,二值化,识别车牌区域,字符分割,字符匹配. 识别过程分 ...

  7. 基于matlab的车牌识别系统程序,基于matlab的车牌识别系统的设计(附程序).doc

    基于matlab的车牌识别系统的设计(附程序).doc 1车牌识别系统的设计1.摘要:汽车牌照自动识别系统是制约道路交通智能化的重要因素,包括车牌定位.字符分割和字符识别三个主要部分.本文首先确定车辆 ...

  8. 【车牌识别】基于模板匹配实现车牌识别含Matlab源码

    1 简介 车牌识别系统是计算机视觉与模式识别技术在智能交通里的重要研究课题之一.其功能是将运动中的汽车牌照从复杂背景中提取出来,并识别出车牌号码.车牌识别技术广泛应用于高速公路上的电子收费,日常的停车 ...

  9. 基于 OpenCV + Python 的人脸识别上课签到系统

    目录 前言 安装第三方库 第一步:采集人脸图像 (1)修改姓名学号 (2)运行capture_face.py (3)采集人脸图像 (4)查看采集到的人脸图像 第二步:训练模型 第三步:识别签到 (1) ...

最新文章

  1. 用spss做多组两两相关性分析_两独立样本T检验及如何利用SPSS实现其操作
  2. 布隆过滤器解决缓存穿透_缓冲穿透/缓存击穿/缓存雪崩等问题解决办法
  3. win7建立wifi热点
  4. 在java中null的作用_在java中避免使用!= null有什么好处?
  5. asp.net core2.0中网站发布的时候,怎么样才配置才可以使视图文件不被打包进去?...
  6. Java并发编程的艺术(八)——闭锁、同步屏障、信号量详解
  7. 美国数学家维纳智力早熟,11岁就上了大学,他曾在1935-1936年 应邀参加中国清华大学讲学,一次他参加某个重要会议,年轻的脸孔 引人注意,于是有人询问他的年龄,他回答说“我年龄的立方是个4位数
  8. 网站关键词编写方法,注意事项。
  9. QML 获取当前时间戳 yyyy-MM-dd hh:mm:ss.zzz
  10. Oracle 索引原理和种类
  11. 思岚A1激光雷达hector_mapping建图与定位
  12. 王者荣耀交流协会-小组互评Alpha版本
  13. 淘宝接口 http://ip.taobao.com/service/getIpInfo.php?ip=myip 获取不到手机ip地址
  14. 动态代理之Waiter案例
  15. HttpMessageNotReadableException: Required request body is missing
  16. mysql-22.MySQL有哪些“饮鸩止渴”提高性能的方法?
  17. C语言计算身体质量质数BMI,Python需如何计算身体质量指数BMI从而来判断体型
  18. HC-SR505人体红外报警系统
  19. java jmf变成_java JMF 多媒体
  20. Oracle 常用的字符型函数

热门文章

  1. 某站卖的第八区分发源码/APP分发系统平台源码
  2. Docker基础26--6.1 Etcd—高可用的键值数据库
  3. 互联网公司的前台让我学 Flutter :)
  4. CVPR2020 论文
  5. LaTex实战笔记 4-插入 Python 程序代码块
  6. 辛普森法则(Simposon rule)求参数曲线弧长 Python (NURBS Butterfly 为例)
  7. java学习第188天,javaWeb学习第47天,复习第23天;p257-262(08/21)-4h
  8. 车库,美国IT文明的摇篮
  9. pytorch 利用tensorboard显示loss,acc曲线等
  10. 由浪潮大型机M13说开去