基于FPGA和DSP的车牌识别系统的研究
2016-03-17王先通王孟效
汤 伟,王先通,王孟效
(1.陕西科技大学 电气与信息工程学院,西安 710021;2.陕西西微测控工程有限公司,陕西 咸阳 712081)
基于FPGA和DSP的车牌识别系统的研究
汤伟1,王先通1,王孟效2
(1.陕西科技大学 电气与信息工程学院,西安710021;2.陕西西微测控工程有限公司,陕西 咸阳712081)
摘要:针对常见的车牌识别系统依赖上位机成本高,并且体积较大不利于野外工作的问题,采用了一种以DSP和FPGA为开发平台的车牌识别系统的设计方案;利用FPGA控制CMOS图像传感器进行车牌图像数据的采集,经过图像格式转换之后传送到DSP中,进行车牌区域定位、字符分割、车牌识别等操作,最后将识别结果传送到LCD中显示;系统采用CCS(Code Composer Studio)集成开发环境,利用VC++语言编程实现车牌识别算法;通过嵌入式机器视觉库EMCV实现识别算法在DSP中的移植,并在LCD上创建工作窗口显示识别结果,检测速度快,准确率高;实验结果表明,该车牌识别系统的设计方案识别结果准确,功能稳定可靠,有效地解决了常见车牌识别系统成本高,体积大不利于野外工作的问题,达到了设计目的。
关键词:FPGA;车牌识别系统;DSP;I2C总线
0引言
车牌识别系统是把机器视觉理论和技术运用于车辆牌照自动识别的自动化系统,是把机器视觉处理技术与模式识别技术在智能交通领域的综合应用[1]。车牌识别系统其原理主要基于计算机数字识别技术,通过计算机控制视频采集系统,并对采集图像处理之后实现车牌的自动识别。但是这种系统也有体积大、成本高、不方便携带的缺点,不适合在野外工作,市场上车牌识别系统的发展呈现出小型化,安装携带方便的趋势。基于此,本文采用以DSP和FPGA作为核心的系统设计方案,充分结合了FPGA通用性好、可编程、并行运算的特点和DSP运算速度快、算法可移植性高的特点,设计了一种基于FPGA和DSP的车牌识别系统,有效的降低了成本,并且提高了系统识别的高效性和实时性。
1系统的总体结构
本文提出的嵌入式车牌识别系统设计方案,主要有嵌入式硬件平台的搭建、车牌识别算法实现和系统软件部分3个方面组成。嵌入式车牌识别系统图像采集模块采用FPGA(Altera公司的EP2C8Q208C8N芯片)控制COMS图像传感器(Micron公司的MT9M011)进行图像的采集,然后经过图像存储、图像格式转换之后,传输到由高速芯片DSP(TI公司TMSO320C7613B)作为硬件平台的算法识别模块,进行车牌区域的定位、字符分割和车牌识别,最后,将识别的结果传送到LCD显示。DSP是一种计算功能强大的数字信号微处理器,主要用来实现各种数字信号处理算法[2],而FPGA虽然具有并行处理和动态配置的能力,但并不适合应用于复杂算法的计算,所以采用FPGA和DSP的异构处理器的设计方案。
根据车牌识别系统的原理图系统的硬件结构如图1所示。
图1 系统的硬件结构框图
嵌入式系统中FPGA作为协处理器主要完成视频图像数据的采集、格式转换、图像预处理和系统的控制工作。可以大大节省DSP内部资源,只作为主处理器完成车牌识别算法的数据计算和处理。本设计中DSP通过EMIF口访问FPGA内部的相关数据,通过异步通信来保证DSP和FPGA处理的数据同步。
2系统硬件部分设计
FPGA作为整个系统的核心控制器,采用I2C(Inter Integrated Circuit)总线协议实现对各存储器的读写操作,控制各外设接口的数据传输以及FPGA内部各模块间通信。
2.1I2C总线工作原理
I2C总线结构为主/从节点方式,主节点负责初始化总线,并产生传输数据的时钟信号,其他寻址访问的节点模块被认为是从节点模块。每个从节点模块在该总线范围内都有唯一地址作为标识。I2C总线在传送数据过程中共有3类特征信号,分别是:开始信号、结束信号和应答信号[3]。
起始信号为当SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据;结束信号为当SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据;应答信号为当主节点在接受或者发送8位数据后,在时钟信号SCL为高电平是设置数据信号SDA为低电平,即为应答信号,表示一个字节数据接收或者发送完成。
2.2图像数据采集模块
图像采集模块选择图像传感器型号是MT9M011,由Micron公司推出的一款数字式CMOS摄像头,输出数据格式为Bayer彩色格式。图像采集模块组成部分主要包括图像数据捕捉模块、I2C总线配置模块和数据格式转换模块。I2C总线配置模块用于对图像传感器中的12个寄存器进行配置,控制图像传感器的增益、曝光时间、输出格式等。图像数据捕捉模块通过帧有效信号FVAL、行有效信号LVAL和时钟信号PCLK三个同步信号,正确捕捉传感器生成的数据流。数据格式转换模块将传感器输出的Bayer格式数据转换成RGB格式的数据。
2.2.1I2C总线配置模块
MT9M011图像传感器有8个寄存器,分别控制水平消隐、垂直消隐、曝光时间、写模式、绿1增益、蓝增益、红增益和绿2增益,寄存器的设定值为16位数据,由于I2C总线为8位读写时序,所以配置所有的寄存器需要配置16次。每次配置传输24位数据,分别是8位从端口地址、8位寄存器地址和8位寄存器的数据。传输时序如图4所示。当SCLK为高电平时,SDATA为下降沿时发出start信息,开始传送数据。数据传输每位占用一个时钟,每个字节后跟一应答位(ack),表示接收数据完成。
2.2.2图像接收模块
设计中图像传感器采集的图像分辨率为,即在一个行有效信号的时间段内,图像捕捉模块要接收1 280个像素,在帧有效信号为高电平时,要接收1 024行数据。图像传感器MT9M011输出图像为Bayer格式,Bayer型颜色滤波阵列上面每个感光点只允许通过一种颜色分量,每种颜色分量为10位像素。在行有效信号为高电平时,每个PCLK时钟周期内,传感器发送一个10位的像素数据。当发送完一行1 280个像素数据之后,传感器转到下一行的第一列重新开始传输像素数据,期间行有效信号为低电平,中止数据传输,为行消隐期。直到图像传感器发送完一帧图像之后,帧有效信号变为低电平,中止数据传输,为帧消隐期,图像传感器转而发送下一帧图像数据。
2.2.3图像格式转换模块
图像接收模块接收的数据格式为Bayer颜色格式,即RAW RGB格式,Bayer型颜色滤波阵列上面每一个感光点仅允许通过一种颜色分量,因此采集图像的每一像素只有一个颜色分量的灰度值。系统采用插值算法把四个像素合并为一个像素,既是把红色(R)、蓝色(B)和两个绿色(G)分量相加求取平均值,得到灰度图像。插值算法实现采用Altera提供基于RAM的移位寄存器Line Buffer,即FIFO(先入先出)模块,用于缓存前一行的像素信息。在FIFO中设置两个tap,每个tap有1 280个存储单元,每个存储单的宽度为10 bit。当经过时钟周期后,前一个tap中1 280个存储单元存的是第一行像素数据,后一个tap中1 280个存储单元存的是第二行像素数据。将两个tap通过锁存器锁存后输出,则在输入数据有效的每个时钟周期,锁存器输出的都是Line_Buffer所存储的前一列像素,Line_Buffer输出的是后一列像素。每接收4个单一颜色分量像素输出一个有效灰度图像像素。
3车牌识别系统算法设计
车牌识别系统采用CCS(code composer studio)软件作为集成开发环境,CCS内部集成了代码生成工具(c编译器、汇编优化器和连接器)、软件模拟器、实时操作系统DSP/BIOS、实时数据交换软件(RTDX)、实时分析和数据可视化软件[4]。DSP软件平台是车牌识别算法的基础,DSP/BIOS嵌入式操作系统提供底层的应用函数接口,支持系统实时分析、线程管理、调度软件中断、周期函数和idle函数以及外部硬件中断与各种外设的管理。车牌识别算法采用Open CV算法实现,然后通过EMCV(Embedded Computer Vision Library)计算机视觉库移植到DSP上运行。
3.1车辆图像的预处理
从图像采集模块采集的图像数据为灰度图像,图像预处理模块将接收的灰度图像二值化,然后再经过边缘检测处理,提取出图像的边缘特征区分出目标和背景。图像采集模块采集到的汽车图像如图2所示。设计中采用Open CV提供的Canny算子来检测图像边缘。车牌图像的边缘检测如图3所示。
图2 车辆灰度图像 图3 车辆边缘检测
3.2车牌区域定位
车牌区域定位就是在车辆边缘检测图像中准确定位出车牌的水平区域和垂直区域。水平投影定位法就是对边缘检测后图像的像素在水平方向累加产生一个车牌图像的投影分布,车牌位置对应投影分布的峰值,而相应波峰的宽度所包含的区域就对应着车牌所在的水平位置。
垂直投影定位法就是对边缘检测图像的像素在垂直方向累加产生车牌图像投影分布,对得到的水平投影从左到右扫描,当像素累加跳变值超过定值时,即可认为是车牌区域。再比较水平、垂直扫描的宽度,若车牌的宽高比约为3:1,即认为是车牌的垂直区域[6]。车牌区域定位图像、车牌二值化图像、归一化图像如图4所示。
图4 图像示意图
3.3字符分割
车牌包括1个汉字和6个字母或数字组成,字符分割就是在车辆图像车牌位置提取出每一个字符的过程。为了辨识出每一个字符必须先把7个字符独立的分割开来。字符归一化就是将车牌二值化图像通过系数变换得到高度、宽度均相等的图像,以方便特征提取,提高识别的准确率。
3.4实验结果与分析
特征提取就是在分割出需要识别的物体基础上,提取出所需要的特征,并对某些参数进行计算和测量,根据测量结果进行分类。特征提取包括数字和字母的特征提取,汉字的特征提取两部分。数字和字母的结构特征相似,可以分成直线特征、点特征、环个数特征和环面积特征。例如,车牌字符“P”、“F”、“J”、“1”、“7”等都有直线特性,根据直线在水平方向和垂直方向的位置区别,提取出字符的直线特征;车牌字符的点特征既是字符中端点、二交叉点和三交叉点的数目,以及它们在图像中的位置特性;字母和数字可以看成是实数域中的区域,检测区域中是否存在闭合曲线,如果存在则可以把该字符看作具有环特征;对于都具有环特征的字符,可以根据它们的环面积进一步区分,既是环面积特征。
本文采用BP神经网络分类器作为车牌字符识别方法,BP神经网络具有良好的容错能力、分类能力强和较好的自学习能力,其结构如图5所示。
图5 BP神经网络分类器
BP神经网络一般采用三层模型:输入层、隐含层和输出层,各层的权值向量维数等于其神经元数。神经网络的输入是字符的特征向量,输入层节点按字符或数字中无环、一个环、两个环和汉字来分,分别是18,11,7,13。输出层节点由输出向量维数决定,同样按字符或数字中无环、一个环、两个环和汉字来分,分别是23,9,2,51。隐含层的节点数H由公式(1)求出。
(1)
其中:H为隐含层节点数,m为输入层节点数,n为输出层节点数。有公式(1)求出隐含层节点数为:21,11,5,27。
神经元先学习网络的权重,利用已知的数据训练网络,得到该类数据模型的权重;然后根据现有的网络结构和权重等参数得到未知样本的类别。神经网络的激励函数将输出信号压缩在[0,1]或者[-1,1]的闭区间上,然后训练样本送至输入层经过神经网络的反馈调节,在误差信号的反向传播中,网络不断的修正各个节点的权值,最后得到稳定的神经网络。
在试验中,选取200幅车牌图片,则要识别的汉字数目有200个,字母与字符数目有1 200个,仿真结果如表1所示。其中,图2中车牌特征中提取的字符特征作为训练好的BP网络输入进行识别,识别结果输出如图6所示。
表1 车牌识别率
图6 车牌识别结果
4结束语
实验结果显示,本系统准确地在车辆图像中定位出车牌所在位置,并成功提取出车牌信息,实现了系统的设计功能。同时,由于利用FPGA控制实现图像采集和数据传输,大大减少了DSP芯片的工作量,使应用程序能占用足够多的内存资源,提高了程序运行速度,保证了识别系统的实时性。但是,由于系统采用的算法还不够完善,对于光线过强或较弱、车牌视角较大时的图像识别准确率还不够高,有待进一步提高。
参考文献:
[1] 张存芳,王紫婷,丁丽华. 基于FPGA的车辆牌照识别系统的设计[J].制造业自动化,2009,31(12):7.
[2] 胡泽.基于DSP的车牌识别系统研究[J].计算机与数字工程,2012,40(3):100.
[3] 沈华,王俞心.基于FPGA的I2C总线主控制器的设计与实现[J].航空计算技术,2007,37(6):109.
[4] 苏春莉,王艳君.改进的图像增强算法及DSP实现[J].电子设计工程,2014,22(11):188.
[5] 朱明,陆小峰,陆亨利,等. AdaBoost人脸检测算法在DSP上的移植与优化[J].计算机工程及应用,2014,50(20):199.
[6] 曾丽华,李超,熊璋.基于边缘与颜色信息的车牌精确定位算法[J].北京航空航天大学学报,2007,33(9):1114.
Study of FPGA & DSP-based vehicle license plate recognition system Tang Wei1, Wang Xiantong1,Wang Mengxiao2
(1.School of Electrical and Information Engineering, Shaanxi University of Science &Technology, Xi'an710021,China;2. Shaanxi Xiwei Process Automation Engineering Co., Ltd., Xianyang712081,China)
Abstract:The common license plate recognition system should work with the PC, costing much. What’s more, it occupy large space, inconvenient to use outdoors. To solve these problems, this paper introduces a design of the license plate recognition system based on DSP and FPGA as the core. The FPGA control system is used to control the CMOS image sensor acquiring license plate image data, and data transmission to DSP of the format-conversed image. Then the DSP control the operation of the license plate location, character segmentation, license plate recognition, and display of the identification results in the LCD. The system uses CCS(Composer Studio Code) integrated development environment, using VC++ language programming to achieve the license plate recognition algorithm. The algorithm transplantation into the DSP is realized by the embedded machine vision library, and the results are displayed in the work window created in the LCD, with the advantage of fast detection speed and high correction rate. We can conclude from the experimental results that the design scheme of the license plate recognition system is accurate and reliable. And it successfully handled the problems listed in the beginning, achieve our design purpose.
Keywords:FPGA; vehicle license plate recognition system; DSP; I2C bus
文章编号:1671-4598(2016)02-0297-03
DOI:10.16526/j.cnki.11-4762/tp.2016.02.082
中图分类号:TP391.9
文献标识码:A
作者简介:汤伟(1971-),男,河南信阳人,教授,博士生导师,主要从事工业智能控制及工业高级过程控制方向的研究。
基金项目:陕西省重点科技创新团队计划项目(2014KCT-15)。
收稿日期:2015-11-02;修回日期:2015-11-27。