潘锦明
(广州广电运通智能科技有限公司,广东 广州 510000)
目前,国内轨道交通等行业使用的电磁式硬币识别器对硬币的鉴别方法,主要是通电涡流检测金属成份的原理进行真假币鉴伪。由于市面上有极个别的游戏币、纪念币、直径相当的金属零件跟人民币硬币材料相接近,容易引起误判断。若识别器降低精度,兼容对有所使用痕迹及轻微磨损等残旧硬币的接收率时,假币容易接收,若提高判别精度,则稍有使用痕迹的真币则容易拒收。为了解决这个问题,在电磁识别器前面增加图像识别的手段进行判别。这样与真币材质相接近的各种假币,表面图案差异较大,通过图像判别就能够轻易区分出来。本文设计一款基于DSP+FPGA及CIS管的图像扫描装置,实现硬币图像的采集及判别功能。
硬币处理模块安装于自动售票机等轨道交通设备中,实现乘客投入硬币识别、找零及退款等功能。而本装置安装于硬币处理模块的电磁式硬币接收器之前,结构设计上通过皮带对投入硬币进行夹送,以均匀的速度通过CIS管扫描区域,对硬币表面进行图像扫描。图像数据采集之后,对图像进行校准、预处理,并通过集成在DSP控制芯片上的图像识别库接口进行面额的识别,把判定结果告诉硬币处理模块,结合电磁式硬币接收器对硬币进行真伪组合判断。
CIS传感器是一种线形图像采集传感器,具有尺寸小、重量轻、结构紧凑、便于安装等特点[1],已越来越多应用于图像扫描领域。本装置选用的是威海华凌公司的一款分辨率为300DPI(可变600DPI)的CIS管。该传感器具有高速、使用灵活、分辨率高等优点,其内部还集成了LED光源、图像传感器阵列、棒状透镜阵列、保护玻璃及接口电路板。工作原理是:由可调节的LED光源发出的光线经过物体表面反射到图像传感器阵列,转换为按行的电信号。同步信号SI启动后,通过输入的CLK时钟按照时序进行采集,分别由SIG1、SIG2、SIG3三段输出信号完成一行信号的数据传输[2],其具体信号控制时序如图1所示。
硬件系统需要实现两路CIS管的打光、数据的采集控制、数据采样、图样数据上传等功能。
图1 CIS管信号控制时序
图2 硬件系统框图
主控制芯片采用TI公司的DSP芯片TMS320C6748,主要控制整个硬件系统的运作及用户代码固件实现软件功能,包括系统中断流程控制、指令交互、数据接收与存储、图像处理及算法集成判别等[4]。FPGA采用Xilinx公司的XC6SLX25,具有可编辑逻辑控制及高速时序控制等特点,主要用于控制CIS管的操作时序、LED打光控制、通过AD转换器配置及控制对CIS输出的三路信号SIG1、SIG2、SIG3进行采集并转换成数字信号,两路CIS管分别进行打光及扫描数据采集,并把完成采集的行数据通过DSP的UPP(通用并行接口)总线发送数据到DSP,完成上传的图像数据保存在DDR内存当中。Nor Flash用于存储DSP及FPGA用户代码,通过EMIFA(外围存储器控制接口)总线和DSP及FPGA连接。本系统需要扫描硬币的正反两面,因此FPGA需要控制两路AD转换器及LED驱动,对两个CIS管进行控制及数据采集。图2为具体的硬件系统框图。
相对于文献[3]中DSP+CPLD控制系统设计需要使用两片RAM及存储器总线切换电路实现数据缓冲,本系统采用DSP集成的UPP(通用并行接口)为FPGA开辟一条高速上传采集数据的通道并使用DMA数据传输方式直接存储到外围RAM中,因此本硬件系统只需要一片RAM,简化了DSP和FPGA之间存储器总线及切换电路的设计并提高了数据处理速度。
应对CIS管输出数据为SIG1、SIG2、SIG3三段,AD转换器选用HT82 V 26 A。该AD转换芯片在FPGA对其进行配置时,采用内部的三通道CCD采样模式[5]对CIS管三段数据同时进行采集,大大提高了数据采集速度。
TMS320C6748固件程序在基于TI公司提供的一套完整的底层硬件驱动程序框架基础上进行用户代码开发。本系统程序主要实现接收硬币模块扫描动作指令、启动FPGA进行CIS管控制、接收FPGA上传的数据、校准图像数据、图像预处理、调用算法库计算图像识别结果、返回图像结果到硬币处理模块等功能。接收到硬币模块发送的扫描动作指令之后,进行图像采集及处理的主要调用流程顶层函数代码如图3所示。
由于CIS管在出厂的不能确保每个点的感光程度完全一致,所以采集的原始图像会有不同程度的条纹出现。为了消除条纹获得清晰的图像,在使用之前对标准白纸进行扫描,控制内置LED分别以弱光及强光对CIS管进行数据采集,以平均值方法计算出该CIS管一行中各点的黑场数据及白场数据并记录在存储器中。工作时采集硬币图像之后,硬币两面原始图像按行的每个像素点根据黑白场校准数据按比例计算灰阶之后得出校准后的像素值,完成所有行的像素值校准之后得出两面校准图像数据CimageA及CimageB。
有别于纸张表面是平整漫反射的,硬币表面是凹凸不平的金属反射,因此采集出来的硬币图像在纹理深度不同的时候存在不同程度的边缘高光及阴影。所以在进行图像算法判别之前,对硬币图像进行预处理提取纹理边缘的特征。其具体的方法是利用该像素点周围的点进行四临矩阵的计算,并记录运算后该点的像素值。完成像所有素点的预处理之后得出两面预处理图像数据PimageA及PimageB。把预处理之后的图像传进去算法库提供的识别接口函数DetecCoin,分析出硬币的币种面额(SortValue)及接近度(Score)两个参数。装置会根据这两个参数及硬币处理模块设置的判别等级来判断该枚硬币是否为需要接收的硬币币种,并把信息传回去硬币处理模块进行相应的机械动作处理。
在调试过程中,把一枚人民币1元投进去硬币处理模块,模块感知有硬币投入后对硬币图像扫描装置发送启动扫描的指令。硬币图像扫描装置把硬币夹送通过两个CIS管,采集CIS管上传的数据,经过校准及预处理后得出正面校准图像CimageA及反面校准图像CimageB,正面预处理图像PimageA及反面预处理图像PimageB,如图4所示。扫描装置根据识别算法对PimageA及PimageB进行判别为人民币1元硬币。
图3 源代码
图4 人民币1元硬币扫描图像
基于DSP+FPGA的硬币图像扫描装置,通过CIS管对硬币两面进行扫描、处理并通过内置的算法库识别出属于哪个硬币币种面额。在硬币处理模块原有的硬币磁识别基础上增加了一种识别手段,经过试验验证,能够有效把跟真币材质接近但表面图案大不相同的游戏币及外币区分出来,大大提高了硬币处理模块的对硬币的鉴伪能力。