基于嵌入式纸币识别系统的设计与实现
扫描二维码
随时随地手机看文章
1 引言
纸币识别系统已经广泛应用于金融、商业、交通、电信、公用事业、文化娱乐等各个领域的自动存款机、自助信息亭、自动充值机、自动售货机、自动售卡机、自动售票机、纸硬币兑换机、自动缴费机等等。经过几十年的发展,纸币识别技术已经发展到了比较成熟的阶段,能够达到比较高的识别水平。识别器的机械、电机控制方面也已比较完善。但目前国内外主要厂商的主流产品都是基于单片机(无操作系统),在功能、扩展性等方面比较有限。随着技术的革新和自助服务在国内的迅速兴起,基于单片机的纸币识别系统已经越来越不能满足市场需求。
基于单片机的纸币识别系统中,由于处理器处理能力和系统资源的限制,采集系统在采集时独占处理器,其他系统只有等采集结束后才能处理采集到的数据,这样使得整个处理的时间延迟了不少。并且单片机本身功能简单,对现在很多新增功能不能很好的支持。
本文从uClinux操作系统[1]和S3C4510B的特点[2]出发,结合纸币识别系统采集系统的要求,采用中断方式实现采集,本采集系统将采集到的数据送往非实时程序与采集系统共享的内存区,缩短了其他模块的访问时间,这样将提高整个纸币识别系统的并发处理能力,充分利用处理器的强大处理能力和系统资源。在软件识别部分选取预处理之后的纸币图像的尺寸特征用模糊逻辑推理方法识别图像的面值, 提取矩作为特征,采用RBF神经网络来识别纸币的正反面和正反向及判断纸币的真假,并通过实验证明该系统的有效性和可行性。
2 特征采集系统
2.1 硬件简介
特殊光发光/接收电路是纸币识别系统的关键信号收集电路,具体结构如图1所示。在纸币通道上、下设有特殊光发光部件和接收部件,S3C4510B对发光部件进行强度控制。当有纸币通过时,接收部件将检测到的特殊光信号传给模数转换器TLC1543。共有三路类似的特殊光发光/接收电路,这三路信号通过TLC1543后由SPI串行总线传回S3C4510B。
图1 特殊光发光/接收电路
光有以上特殊光发光/接收电路还是不够的,要采集多个不同点的信息还要借助其他的硬件设备,码盘光耦信号收集电路和马达电机驱动电路必不可少。
马达电机的作用是带动传动装置将放入纸币通道的纸币卷进纸币器。在纸币通道上下都有特殊的发光部件和接受部件,它们在纸币被卷入纸币器时是保存不动的,那么纸币上的多个点就能被特殊的发光部件扫描,这样就实现了对纸币上多个点的数据采集。马达电机驱动电路如图2所示。S3C4510B通过大电流电机驱动芯片L298驱动步进电机,电机的过载信号也由L298传回。
图2 马达电机驱动电路
码盘是安装在电机旁对电机进行测速的角度传感器,码盘光耦是测速光信号的发生器和接收器。码盘光耦将接收到的信号经施密特触发器整形后,传送到S3C4510B的I/O口。这个电路对实现采集系统的意义重大。而本文所设计的采集系统也是依赖这一电路产生的反馈信号,形成中断,从而实现对采集数据的读取。码盘光耦信号收集电路如图3 所示。[!--empirenews.page--]
图3 码盘光耦信号收集电路
以上的硬件电路再加上传动装置等,就构成了采集系统的硬件基础设备。
2.2 程序设计
本文设计的采集系统,所采集的数据是纸币上等距离点上的数据,采集到的数据作为RBF神经网络分类器的输入,并用它来判断纸币的真假,从而使纸币识别系统决定是否接受被检测的纸币。可见,能正确的取得纸币的数据对这些算法来说是非常重要的。当纸币的一端进入纸币通道时,位置传感器提示系统,纸币进入预定的开始进入位置,而后通过马达和传动装置,纸币就被卷入纸币器中。马达转过相同的角度,纸币也就移动相同的距离,而码盘光耦电路每产生一个反馈信号,马达转过的角度是一个固定值,纸币移动距离也就是一个固定值,那么根据这个反馈信号就能实现固定等距离点的采集, 所以硬件的设计是能保证,当纸币上的定点到达纸币识别系统特殊光发光部件和接收部件中间时,通知采集程序此时数据有效。马达转过多少角度码盘光耦产生反馈信号,是由码盘光耦的规格决定。
数据采集系统的程序部分要解决的问题,就是能够及时根据码盘光耦电路的反馈信号,实时的将特殊光传感器中的数据读出,而后保存。由于uClinux操作系统本身的限制,纸币识别系统中只有一个实时任务即采集,所以考虑采用中断的方式解决这个问题 。
在本系统中,根据采样原理,每6毫秒采集一次数据,选用了适合本采集系统规格的马达和码盘光耦。为了使基于S3C4510B和uClinux的纸币识别系统充分发挥同时采集和处理数据的能力,可以从S3C4510B的内存中开辟一个独立的区域,该区域是用来提供给非实时程序和采集系统共享的内存,专门用来存储采集数据,这样非实时程序就不需要调用系统调用或者驱动程序去访问采集到的数据,从而大大提高了将采集数据送给非实时程序的速度,提高了处理速度。
3 纸币识别
3.1 纸币识别硬件设计
根据前面讨论的要求,采用S3C4510B芯片设计的纸币识别器硬件结构如图4所示,它包含的主要功能模块有:S3C4510B中央处理器、系统时钟和复位模块、外扩存储单元、板载电源模块、串口通信模块、网络通信模块、电机驱动模块、纸币检测模块以及相关的信号采集模块。
图4 纸币器硬件结构图
为了支持日常工作和智能升级的需要,外存存储单元采用两片FLASH存储芯片和一片SDRAM, 串口通信模块的设计时使用MDB和RS232,采用S3C4510B UART单元提供的两个异步串行I/O端口分别给MDB和RS232各一个。在网络接口设计时,由于S3C4510B内嵌一个以太网控制器,这里采用一个PHY芯片RTL8201BL与其搭配实现一个10M/100M以太网接口,对外接头使用RJ45接头。
3.2 纸币识别软件设计
3.2.1 软件流程
整个系统的软件设计采用模块化结构,其主体框架是通信和识别分时共享。主程序主要以通信模块为主,通过设置各种标志位,然后把相应模块作为子程序嵌入其中。当纸币未到时,程序工作在通信模块中,通过检测各个标志位执行相应操作,保持与上位机的通信。 当上位机允许识别器识别的标志位有效,并且纸币到的标志位有效时,程序转入识别模块,这时识别器与上位机的通信断开,当识别处理完成后,唤醒通信模块继续通信。这样整个系统分时共享,程序流程简单明了,可读性和可扩展性好。主程序流程为:
(1) 初始化部分 包括通信的初始化和识别的初始化。[!--empirenews.page--]
(2) 自检部分 分为上电自检和正常自检, 上电自检是开机上电时,程序检测硬件系统的状态,如有错误给出错误信息。正常自检是维持正常工作时作的必要的检测。
(3) 命令处理部分 包括命令的接受和分类处理. 在命令处理过程中,售货的上位机既发送纸币命令,也发送硬币命令,两者交错发送,各通信识别器只响应上位机发给自己的命令。
(4) 识别部分 将纸币信息与标准样本比较可识别纸币的真假,并置相应的标志位。
3.2.2 基于RBF神经网络的纸币识别
为了能准确快速的识别人民币,在识别纸币之前需对其进行必要的预处理。图像的倾斜往往会影响到图像的定位以及待识别信息的提取。因此需要进行图像的倾斜矫正[3]。二值化处理是把灰度图像信号变成二值(0,1)的数字信号。二值化方法通常有整体阈值法和自适应的动态阈值法。实际处理的纸币图像比较复杂,为了更好的适应质量差的纸币图像,采用动态阈值法[4]。
这里测量了以下5 种人民币: 第4 版100 元和50元及第5 版100 元、50 元和20 元的高和宽的尺寸(其它面值的图像处理方法一样) , 应用模糊逻辑推理方法对纸币面值进行分类[5]。在得到纸币面值的基础上, 接着进行纸币正反面和正反向的识别,并识别出纸币的真假。中心矩与图像的平移无关, 故提取中心矩作为特征用于纸币识别。在纸币图像的右上角和左下角均为48×96 的区域内分别提取5 个1-2 阶的中心矩合在一起作为10 个识别特征, 然后使用RBF神经网络对纸币进行识别,其结构如图5所示。
图5 RBF 神经网络结构
RBF神经网络由:输入层﹑隐含层和输出层组成,输入层节点只传递到隐层,隐层节点由基函数构成,输出层节点通常是线性的。隐层节点通过径向基函数对输入信号产生一个局部响应,RBF神经网络的输出层节点是隐层基函数的输出进行线性加权组合,即输出层的输出为:
4结论
本文创新点:设计一种基于S3C4510B和uClinux的纸币特征实时采集和识别系统,考虑到uClinux操作系统本身的特点,将采集的实现放在了中断处理子程序中,方便uClinux上的程序快速读取采集的数据,满足纸币特征实时采集系统要求。在软件识别部分根据纸币图像的尺寸特征使用模糊推理方法识别出图像的面值,然后提取识别后图像的矩特征,采用RBF网络进一步识别纸币的正反面和判别纸币的真假,这样提高了识别的速度和精确度。