基于ARM和Linux的字符采集与识别系统
扫描二维码
随时随地手机看文章
传统纸质读物的数字化以及诸如条码识别等字符识别系统都离不开图像的读入与识别,然而目前广泛使用的字符识别设备将这两部分独立开,即由图像读入设备(如扫描仪)和安装于计算机上的识别软件构成,但这样的设备构成离不开安装识别软件的计算机,造成成本上升和使用不便。随着电子产品的普及,具有摄像功能的电子产品及其上的识别软件也可以构成一个字符识别系统,但是这种识别系统的识别速度受到摄像头调焦的限制,难以广泛应用。文中提出的便携式字符采集和识别系统,其硬件平台是基于接触式图像传感器(CIS)与ARM9处理器S3C2410,软件平台是基于嵌入式Linux系统,可以克服以上两种设备的缺点,同时满足方便性和快速性的要求。另一方面,由于设备基于Li-nux操作系统,使得识别软件的开发和扩展可以脱离硬件,大大提高识别系统的通用性。
1 图像采集模块
字符识别系统主要由图像采集模块和图像处理模块组成,其中图像采集模块是整个系统的硬件核心,图像采集的质量直接影响系统的整体性能。线阵CIS每次扫描得到一行像素值,配合运动平台的纵向运动可以完成一幅二维图像的扫描。为保证图像采集的质量,必须精确控制运动平台与CIS之间的工作匹配,本系统以CPLD作为图像采集模块的控制核心,CIS传感器、步进电机、ADC以及高速缓存FIFO在CPLD的控制协调下完成一幅图像的采集、模数转换和数据缓存。系统总体结构框图如图1所示。
1.1 硬件平台
(1)ARM处理器
采用三星公司的ARM9系列S3C2410A作为处理器,工作频率可达203 MHz,片上资源丰富,可以满足实时性要求,为图像处理提供运行平台并配合CPLD完成图像采集模块的逻辑和读写控制。
(2)图像传感器及运动平台
接触式图像传感器(CIS)具有体积小、重量轻、功耗低、结构紧凑、连接方便以及无阱深等优点,在扫描仪等领域被广泛应用。本系统采用SV643C10型CIS,其物理分辨率600 dpi(23.6 dot/mm),有效扫描宽度29.2 mm,共688个传感器像素单元,其像素输出频率为5 MHz。
运动平台由步进电机和光电传感器等组成,光电传感器实现对进纸的检测,启动扫描。步进电机控制扫描件换行,配合CIS完成图像的采集。
(3)信号调理电路
信号调理电路完成对CIS输出模拟信号的差分、放大等,实现降噪和电压匹配的作用。
(4)高速A/D转换器
由于CIS的像素输出频率高于处理器内部的A/D转换器,所以本系统采用高速的外部ADC器件TLC5540,其最大采样率40 MB·s-1,拥有8位分辨率。
(5)数据缓存
为了实现ADC和ARM的速度匹配,提高系统工作效率,在ADC与ARM处理器之间加一个FIFO存储器作为高速数据缓存,选用Averlogic公司的1 MB×8 bit的AL4V8M440。
(6)CPLD模块
实现图像采集模块的逻辑控制。为CIS传感器提供的时钟信号CP和行转移信号SP。为ADC提供采集时钟,为FIFO提供读写控制和写时钟等。本文的CPLD器件采用Ahera公司的EPM7128SLC84-15。
(7)存储器
本系统采用三星公司的64 MB NAND Flash存储器K9F1208作为程序和数据的存储单元,采用两片16位的HY57V561620CT-H(总容量64 MB)SDRAM作为系统内存,同时作为DMA方式读取缓存数据的目的存储器。其中Flash存储器存储空间分配情况如图2所示。
[!--empirenews.page--]
1.2 软件设计
图像采集模块的程序设计主要任务是实现该模块各元器件的协调工作以及实现对图像数据的读取。主要分为3部分内容。
(1)CPLD上的逻辑设计。采用VHDL语言编写,该程序将外部晶振的10 MHz输入进行分频,为CIS、ADC、FIFO等提供时钟和控制信号,并为步进电机提供工作时序。
(2)嵌入式Linux系统的裁剪、配置和移植。本系统采用2.6内核,宿主机环境为Ubuntu8.04。
(3)Linux驱动程序的编写。由于采集模块对于Linux系统来说可看作为一个设备,因此该部分程序应作为嵌入式Linux设备驱动程序来编写,该驱动程序通过CPLD间接实现采集模块的逻辑控制和图像数据的读取,为应用程序的开发提供底层硬件的接口。从FIFO缓存读取图像数据采用DMA方式,DMA的目的存储器为ARM系统的SDRAM。
图像采集模块工作流程图和图像采集效果分别如图4和图5所示。
[!--empirenews.page--]
2 图像识别模块
本文的目的是构建一个通用的字符识别系统,图像采集模块实现了对扫描件图像数据的获取。由于系统基于嵌入式Linux,使得后续的图像处理与字符识别软件设计可以脱离硬件系统独立进行,具有较高的通用性,可以根据实际应用场合开发和扩展不同的识别软件,本文仅探讨手写体数字识别的应用。
识别算法:
线性判别分析(Linearity Distinction Analysis,LDA)是有效的特征抽取方法之一,广泛用于人脸识别和字符识别等领域。其基本思想是选择使Fisher准则函数达到极值的一组矢量作为最佳投影方向,样本在该矢量集上投影后,达到最大的类间离散度和最小的类内离散度。为找到投影轴,应最大化类间离散矩阵Sb和类内离散矩阵Sw的比值
其中,c表示为模式的类别数;μj表示为第j类的均值(其概率为Pj);μ0为全部样本均值;*****为第j类模式i的h维向量;n是第j类的样本数;N是所有样本数。μj和μ0定义为
最优化问题可以通过Sb和Sw的特征值的求解而获得。如果在样本离散矩阵中非目标样本占有比重较大,LDA并不能保证找到最优子空间。LDA的最优分类标准并不一定对分类准确性最优,有可能使得已经分开的邻近类引起不必要的重迭。本文采用一种新的加权LDA方法(ILDA),其计算方法如下
显然,如果σ(△)是个常数,在投影方向上,分别等同Sb和Sw。如果每一类的σ(△)是不同的,这将对临近类的重迭样本的分类产生影响。可以看出,如果△ij较大,则σ(△)较小。
实验样本取自手写体通用数据库UCI,在Bhattacharyya距离(BD)分类器下对加权线性判别分析与相应的算法进行实验比较和分析,取得较好的识别性能,证实了该方法提取的特征的有效性。
3 结束语
本文采用嵌入式Linux和ARM处理器软硬件平台,利用CIS传感器配合运动平台实现了图像的采集和存储,为嵌入式字符识别系统构建了一个图像采集平台。在字符识别的应用方面,探讨了广泛应用的手写数字识别算法,在已有的线性判别分析算法基础上,提出了一种改进的加权线性判别分析算法,并对该算法进行了实验验证,获得了较好的识别率。