1、内容摘要 本毕设基于iOS平台实现了移动手机上的车牌识别,可以通过相机或者相册选取图像,将图像中的车牌识别并以文本的形式输出。系统主要使用了开源计算机视觉库OpenCV和SVM等机器学习算法,完成了车牌的定位检测,字符的分割识别等步骤,最终实现了车牌识别。本系统可用于交警在不良条件下执法,亦可以用于私家车车主,方便车主在事故现场取证报警。关键字 iOS;OpenCV;车牌识别1、引言1.1 国内外现状模式识别(Pattern Recognition)技术于二十世纪八十年代开始迅速发展,基于这一技术的相关应用也迅速被人们付诸于实践,如人脸识别、指纹识别等,这其中也包括了车牌识别(License
2、Plate Recognition)技术。在车牌识别方面,国外的研究要早于国内,且技术相对成熟。二十世纪九十年代,A.S.Johnson等人通过字符的模版匹配技术设计并实现了一种车牌识别系统,与此同时,R.A.Lotufo等采用自适应阈值,边界跟踪,垂直投影,统计最近邻分类器等方法也实现了一种车牌识别系统6。在市场产品化方面,国外也有许多优秀的产品得到推广,如HTS公司的SeeCar车牌识别(LPR/ANPR)系统可在高速公路实现车牌的实时识别。以色列的See/Car System和Insignia系统,新加坡的 VLPRS、澳大利亚Auty公司的Safe-Cam系统、俄罗斯的 Golden
3、Eaglej等产品也在其本国有着很好的应用。我国对车牌识别技术的研究要晚于西方发达国家,而且我国车牌构成复杂,既有汉字,又有字母和阿拉伯数字,而且车牌还分不同的类别,类别不同车牌的规格颜色也不尽相同,这都给车牌识别带来了一定难度,国外的车牌识别技术也并不适用于我国。因此,我国有许多高校和学者从事此方面的研究,国内最早的车牌识别产品有北京汉王科技公司智能交通部门的“汉王眼”车牌识别系统和四川川大智胜软件公司的基于“车牌识别”的智能交通应用系统6。目前,市场上有很多成熟的以车牌识别为核心的产品,如基于 DSP 的嵌入式车牌识别、车牌识别停车场管理系统、超速抓拍举证系统等产品6。但是由于车牌识别的准
4、确率和获取的图像质量有很大关系,因此,大部分产品对使用环境有较高的要求。随着智能移动终端的发展与普及,智能手机、平板电脑已经接管了人类的许多工作。在计算机视觉处理方面,移动终端越来越高的硬件配置也让许多任务从专业平台或者传统计算转移到移动终端上来,并创造出了新的价值,这其中,最显著要数拥有3D画质的游戏的发展,如iOS平台上的无尽之剑。车牌识别在移动终端上的应用则较晚,2011年Linnaeus大学的Ahmad成功将车牌识别系统在Android平台上实现,但是在车牌字符识别的过程中达到85%的识别率8。在国内,华中科技大学的徐伟、张舟在武汉ETC (电子不停车收费)系统的稽查子系统中,成功将车
5、牌识别移植到Android平台8。但是,基于iOS平台的车牌识别系统至今还没有出现,有待人们去开发相关应用。1.2 选题的目的及意义随着移动终端设备的迅速发展,与其相关的应用已经体现在了人们日常生活中的方方面面,人们可以使用随身携带的可移动设备做更多事情。交通作为与人们生活息息相关的一个方面,与之相关的移动开发也是层出不穷,如基于地图导航的公交查询,线路查询,以及其向旅游方面衍生的周边服务类应用,还有车票(机票)查询与订购等等。这些都极大的方便了人们的出行。由于车牌是车辆的一种重要身份标记,车牌识别系统也自然成为了交通监管环节的核心,而且是交通系统的重要研究领域。随着我国经济的腾飞与交通事业的
6、发展,越来越多的人们拥有了私家车,出租车、专车、公交车等公共交通车辆数目也急剧增长,伴随而来的是越来越多的逃避年检,肇事逃逸等违法行为,此时传统的交通监控系统也就显现出了它的局限性。例如,在2014,在新闻中屡次出现女青年乘车失踪,然后被害的案件。导致这样的惨案发生,在一定程度上就是因为传统的交通监控系统无法在地域偏僻的地方及时给民警提供犯罪嫌疑人驾驶的车辆信息。随着国家对智慧城市建设的推进,结合了物联网、云服务等技术的智能交通系统将会给人们提供更丰富的信息,更优的建议,更可靠的服务。由此,车牌识别技术在移动终端上的实现也就有了更加广泛的应用。交警可以利用手机或者平板电脑更加便捷地进行道路稽查
7、,违法取证,普通民众可以对违法车辆给予及时的监督举报,车主也能方便的自己在手机上查询自己的违章信息。基于以上所述,本系统将在iOS系统上设计并实现一套车牌识别系统。2、关键技术2.1 OpenCVOpenCV(Open Source Computer Vision Library),即“开源计算机视觉库”,由一系列C函数和C+类构成,涵盖了计算机视觉的诸多领域,如物体识别、图像分区、人脸识别、动作识别、运动跟踪、机器人等。OpenCV的基本模块如下图所示: 图1 OpenCV基本模块2.2 基于iOS平台的App开发本系统基于iOS 8.2实现,用于测试的移动端是iPhone 6手机,CPU是
8、A8+M8协处理器(64位),GPU是Imagination PowerVR SGX6450,RAM为1GB,屏幕分辨率为1334*750,ppi是326,主摄像头拥有800万像素。开发平台为Xcode 6.2和iOS 8 SDK,iOS系统的架构可以分为四层, 如下图所示:图2 iOS体系结构iOS的主要开发语言为Objective-C,而OpenCV类库是以C+语言编写的,但是两种语言同样是基于C语言发展而来的面向对象语言,因此在Xcode开发平台上,用户在同一个源文件里进行C+和Objective-C的混合编程,因此我们就可以自由的在iOS程序中使用OpenCV类库。3、目标检测与字符识
9、别本章首先介绍了手机拍摄车牌的特点,基于这些特点,本文采用了基于垂直边缘的车牌检测方法,然后,使用漫水填充法将包含车牌的区域进行提取分割,并利用已知车牌的尺寸比对分割区域车牌做出初步验证,得到候选车牌。接着再使用SVM二分类方法对候选车牌进行挑选,最后使用人工神经网络的方法进行车牌字符的识别。3.1 预处理及垂直边缘特征提取3.1.1 手机拍摄车牌的特点随着移动终端设备的快速发展,智能手机的中的数码相机功能不断完善,拍摄出图像质量也越来越高,并且通过算法与硬件的配合,手机拍照可以很好的优化普通摄像头拍照时会产生的白平衡,以及对比宽容度等问题。以最新的iPhone 6来说,即是主摄像头只有800
10、万像素,但是在专业的测评网站上,其拍照效果,完全可以匹敌1300像素的Xshot。除了这些iPhone 6的拍摄特点外,一般智能手机拍摄的车牌还有以下特点:(1)具有良好的移动性。基于手持拍摄设备的特点,拍摄者可以选择一个拍摄效果相对较好的角度,这极大的方便了车牌识别工作。(2)自带图片处理功能。当我们在环境不理想的情况拍摄车牌照片时,可以通过手机相机中自带的曝光、对比度、色偏等调节功能来改善相片质量,并且还可以对图片方便的进行旋转、缩放等操作。 图3 调节对比度 图4 旋转3.1.2 基于垂直边缘的图像特征提取本文中,我们先对原始图像进行灰度化、以及55的高斯模糊去噪,来去除由拍摄或者环境影
11、响产生的噪声,之后主要利用Sobel算子对去噪后的灰度图像进行垂直边缘检测。Sobel算子不仅是一种梯度算子,并且还结合了高斯平滑。Sobel算子的主要计算过程如下16:设I为图像的矩阵表示。(1)分别在x和y方向上求导。水平变化:将I与一个nn大小的内核Gx进行卷积,其中n是奇数。如,当n为3时: Gx = I (1)垂直变化:与水平变化同理,当n为3时可以得到垂直变化: Gy = I (2)(2)对于图像上的每一个点,利用上述的水平与垂直变化来求出近似梯度: G = (3)表1 边缘检测算法描述输入图像矩阵src算法流程用m,n分别代表输入矩阵src的行数与列数,设目标图像为dst,行数和
12、列数从0开始。从第一行第一列到第m-2行n-2列,用变量i, j遍历src中(m-2)(n-2)的矩阵。对于每个像素点(i, j),我们取以其为中心的33的矩阵,与垂直变化做矩阵的积,记为ux:ux = srci+1j-1*1 + srci+1j*2 + srci+1j+1*1 + srci-1j-1*(-1) + srci-1j*(-2) + srci-1j+1*(-1)然后,利用上述结果,求出该点梯度,存入目标图像,作为目标图像在该坐标点的像素值:dstij = sqrt(ux*ux)输出目标图像dst对图像进行过Sobel算子处理之后,再对其进行二值化处理,我们就得到了含有明显垂直边缘信
13、息的图像,之后我们再对图像采用闭形态学的操作,消除垂直边缘的间的空白区域,并连接含有大量边的所有区域。 图5 sobel处理 图6 二值化 图7 闭形态学处理3.2 基于漫水填充算法的车牌分割经过上述步骤的处理,我们已经得到了一张含有车牌区域,但大部分区域都不含有车牌的图像。接下来,我们通过获取这些二值图像中的轮廓来将这些区域分开,然后,对于每个轮廓,我们提取其最小外界矩形,并基于先验知识中车牌的宽高比对其做出初步验证。经过初步验证的矩形就成为了我们的候选车牌区域,基于车牌背景为白色的这一特征,我们采用漫水填充算法来对这些区域进行分割。漫水填充算法的主要原理是, 创建一个种子类Seed,用来存
14、放指定颜色的像素坐标信息,并用堆栈seeds存放入符合颜色要求的种子,用指针StackPoint来标记栈顶元素,对堆栈顶种子点周围所连接颜色一致的点进行判断,若符合颜色要求,则将该点存入seeds中,原栈顶种子出栈,存入种子类型数组saveSeed中。在操作过程中,我们x, y, pixel分别存放当前像素的坐标及像素值,用Getpixel(i,j)来获取图像位于(i, j)的像素值。表3.1描述了漫水填充法在一张灰色图像上获得一个白色连通区域的一般算法。表2 漫水填充法标定描述灰色连通图像src/首先,申明种子堆栈、栈指针,种子存放数组,存放当前像素位置和像素值的变量stack seeds;int StackPoint;vector= 1 /取出栈顶元素,存入临时变量,并将
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1