概述
现在市面流通的美元纸币,无论是面积还是纸质,几乎是一模一样的,而且没有盲文标记,对于失明和弱视人群,使用非常不便。统计数据显示,现时全美国大约有七百万失明或弱视人士,预计到2015年会增加400多万人。很多人都是在45岁之后,视力出现问题;所以急需开发一种便携式的美元面值识别仪来帮助他们。
1 硬件设计
整个识别仪主要由以下几个部分组成: 图像采集电路、语音播放电路、控制和识别电路、电源系统电路。系统框图如图1所示。

图1
1.1 图像采集电路
图像采集使用CMOS图像传感器。由于使用的传感器分辨率比较高,图像数据速度较快。为了降低软件处理难度,保证数据采集的正确性,使用了高速的SRAM作为图像数据缓存区。在采集图像时,MCU首先对CMOS传感器初始化,然后释放总线控制权,在CMOS图像传感器输出的行场信号同步下,利用像素时钟对SRAM进行读/写。当采集完一个完整场的图像数据后,场同步信号使MCU产生中断,MCU关闭CMOS传感器电源,恢复总线控制权,从而可以对SRAM进行读/写,并对图像数据进行处理。
在图像采集时,CMOS图像传感器要求有足够的亮度才能正确地采集图像,所以使用了高亮白光二极管提供照明。由于便携式系统使用3.3 V的电源,而白光二极管的正向压降在3.6 V左右,所以在使用时需要提供升压电路才能使白光二极管发光。另外,为了使在整个图像区域内亮度均匀,需要选择照明角度较大的发光二极管。在实际使用中发现,使用角度为60°的白光LED可以保证整个区域内的亮度均匀,且能提供足够的照明亮度,电路如图2所示。

图2
1.2 语音播放电路
由于本仪器主要供盲人使用,所以使用语音报读的方式告知最终识别的结果。语音数据通过计算机系统录制并转换成相应的二进制数据文件,在报读时根据识别的结果,把相应的语音数据经过D/A转换后变成模拟的声音信号,再经过功率放大后通过小型扬声器播出。但是由于D/A转换出来的信号是阶梯型的信号,其中包含了很多的高频噪声;同时,小型扬声器的高频响应好而低频响应差,所以需要在去除高频噪声的同时适当加重低音成分,才能得到比较好的音质。经过实验发现,在实际使用中,增加截止频率为6.4 kHz的低通滤波器,同时适当提高功率放大倍数,可以达到比较好的音质。
1.3 控制和识别电路
控制和识别电路主要实现按键的判断和处理、图像数据处理与面值识别功能。为了满足识别率和识别速度的要求,考虑到图像处理的运算量比较大,需要的内存也比较大;另外,存储报读的语音数据需要较大容量的程序存储器,加上成本的因素,最终选择了Philips公司的LPC2136芯片。该微控制器为基于支持实时仿真和嵌入式跟踪的ARM7TDMIS CPU,带有256 KB内部高速Flash程序存储器。128位快读的存储器接口和独特的加速结构使32位代码可以在最高时钟速率下运行。工作时钟频率通过内部PLL电路可以达到60 MHz。芯片内部还集成了32 KB的SRAM、宽范围的串行通信接口、2个32位定时计数器、2个8路1位A/D转换器、1个10位D/A转换器、PWM通道、47个GPIO以及9个边沿捕获电平触发的外部中断,使用在本设计中可以很好地满足要求。
1.4 电源系统电路
电源系统主要提供控制系统、语音系统和图像采集电路工作所需的电源。本方案为便携式系统,使用电池作为工作电源,所以整个系统采用3.3 V电压供电。为了延长电池工作时间,设计了定时关机功能,在无操作的情况下,自动关断电源。其工作原理如下:
Vin为电池经过电源开关后接入。PON为3.3 V电源芯片使能端,当PON为高电平时,电源输出3.3 V电压;当PON为低电平时,关断3.3 V电压。P_C为MCU输出控制端,用来进行电源的定时关断。当电源开关打开时,Vin输入为电池电压,此时U1正常供电。由于R1和C1延时网络的存在,此时U1的9脚仍为低电平,根据与非门的逻辑关系,U1的8脚输出高电平。由于此时控制系统无电源,所以P_C为低电平,使U1的11脚输出高电平。此时,U1的4、5脚均为高电平,所以U1的6脚输出低电平,使U1的3脚输出高电平,控制电源芯片输出3.3 V电压,给控制系统提供电源。MCU在上电后立即初始化P_C输出低电平,使U1的5脚保持高电平。而U1的10脚,由于有U1的6脚反馈过来的低电平,所以可以保证U1的8脚输出高电平。经如上的过程,确保上电后能够可靠地打开并保持3.3 V工作电源。当无操作时,经过确定的延时,MCU使P_C为高电平,从而给U1的5脚提供一个低电平,使U1的6脚为高电平,反馈到U1的10脚,从而形成一个负反馈通道,确保U1的6脚输出一直保持高电平。这样PON输出为低电平,确保3.3 V电源被可靠关闭,如图3所示。

图3
2 面值识别原理
本方案通过CMOS图像传感器采集的图像来确定美元的面额,其实质是根据采集的图像是否与某一面额的图像模板相一致来进行判断的。常见的方法是采用模板匹配。所谓“模板匹配”,其原理很简单: 拿己知的模板,和原图像中同样大小的一块区域比较。最开始时,模板的左上角点和图像的左上角点是重合的,拿模板和原图像中同样大小的一块区域比较,然后平移到下一个像素,仍然进行同样的操作;所有的位置都对完后,差别最小的那块就是和模板最相像的。通常使用平方误差之和来衡量原图中的块和模板之间的差别。
假设模板的大小为m×n(宽×高),图像的大小为Width×Height;模扳中的某点坐标为(x0,y0),该点的灰度为U(x0,y0);与之重合的图像中的点坐标为(X0-x0,Y0-y0)。该点的灰度为V(X0-x0,Y0-y0),如图4所示。则一次匹配的公式如下:

图4

全部图像都匹配完后,找到最小的即为结果。可以看到,模板匹配的运算量是惊人的,每一次匹配都要做m×n次减法,m×n次平方,m×n-1次加法,整个图像要匹配(Width-m+1)×(Height-n+1)次。
实际上,识别的美钞有两种不同的版本,共有10张,每张需要识别4个角,所以要识别美钞的面值需要对40个模板图像进行匹配,从而找到最符合的图像模板,运算量非常大,用单片机实现速度很慢,没有实用价值。
为了提高识别速度,本方案使用了投影特征匹配算法,即针对采集的图像分别计算水平和垂直方向的投影曲线,以此来进行图像匹配。
钞币特征区域图像的水平和垂直投影曲线充分反映了其在对应方向上的灰度分布特征,如图5所示,以此为依据进行图像匹配可取得理想的效果。

图5
投影特征匹配算法的基本思想是: 首先,针对不同面额的钞币选取特征区域,分别求取该区域的水平方向投影和垂直方向投影,得到序列H[i]和V[i]。然后,将钞币的投影序列与模板库中的投影序列进行比较,求取序列之问的相关值。若相关值超过判决门限,则认为找到其匹配项。投影序列相关系数S为: 式中: fa(i)为i点模板特征区域投影曲线灰度值,fb(i)为i点钞币特征区域投影曲线灰度值,fa 为模板特征区域投影平均灰度值,fb为钞币特征区域投影平均灰度值。

为了提高算法对特征区域定位误差的适应能力,采用了滑动匹配策略,即将标准模板投影曲线在钞币投影曲线上进行滑动,对于滑动经过的每个位置计算相关系数S,这样就得到一个相关系数序列S[j],求取序列中的最大值得到相关峰值。在水平方向和垂直方向上来取同样的处理方法,可以分别P得到水平、垂直相关峰值Shmax和Svmax,求其几何平均值,将该值与判决阈值相比较。
由于基于投影特征匹配的面值识别算法将图像的二维运算简化为一维分析,因此使其运行速度大大提高了。
3 程序设计
本方案使用的ARM7TDMIS的CPU,在软件开发时可以使用汇编语言和C语言。在实际使用中,经过对各种开发环境的比较,最终选择了Keil ARM进行开发。使用该环境进行开发,无需关注启动文件的编写,软件使用和Keil C51相似,调试非常方便。整个程序主要由两部分组成: 主程序和外部中断服务子程序。
主程序主要完成CPU初始化、按键检测和处理、图像数据处理和面值识别以及语音报读,中断服务子程序则主要控制图像数据的采集在图像传感器行场信号的同步下进行。
4 研制结果
使用此方案设计的便携式美元面值识别仪可以在2 s内正确识别美元面值并报读,语音清晰。经过实际使用,识别率可达99%以上,未发现误报、错报现象,具有较高的可靠性。目前,该识别仪已经正式投产并出口美国,经济效益良好。