摘 要: 针对带有七段码的数字液晶屏,设计了一种基于安卓手机的液晶屏数字识别系统。通过手机拍照获取液晶屏图像,利用安卓本地接口功能调用计算机视觉库,对图像进行处理;针对图像的倾斜问题,通过图像预处理和霍夫变换取得图像倾斜角,并进行倾斜矫正;利用直方图对数字字符进行分割,以网格法提取字符的特征值,用三层BP神经网络进行液晶屏数字字符的识别。实际检测结果表明识别率很高,而且识别速度很快,该系统基于安卓手机,使用方便,便于携带,可以实时操作。
关键词: 安卓;数字识别;开源计算机视觉库;BP神经网络
0 引言
随着我国信息化建设和现代化进程的加快,自动识别技术已经越来越广泛地应用在各个工程领域,利用数字图像识别技术可以有效地加快自动化、智能化进程。液晶屏作为智能化设备的主要标志,其识别已经成为模式识别[1]领域的重要研究课题。带有七段码的数字液晶屏,其显示精度高,易于读取和设置,在工业领域应用非常广泛。利用现有的图像采集技术、图像处理技术和图像识别技术,可以实现液晶屏数字的识别,常用的方法有神经网络和模版匹配,识别的时间、识别精度和系统的便携性是识别系统的关键。
现有的识别系统大都是以计算机为载体,不能实现随时随地识别液晶屏的要求。近年以来,智能手机系统尤其是安卓系统[2],以其开放性、易开发和基于Linux操作系统等优势,获得了大量的用户。安卓系统提供本地接口(JNI)功能,使开发者可以通过接口调用库文件,不仅可以使用Java语言进行开发,而且可以使用轻量级且高效的C/C++语言编写。安卓的本地接口功能为实现图像处理提供了方便。通过调用计算机视觉库[3]文件,安卓开发人员可以方便进行图像的处理和图像的识别。基于此,本文提出基于安卓手机的液晶屏数字识别系统,通过安卓手机拍照,获取液晶屏图像,利用图像处理技术对图像进行处理,最后采用三层BP神经网络[4]对图像进行识别,随时随地、快速、准确地识别液晶屏图像。
1 识别系统流程
图像识别技术是利用计算机视觉采集物理对象,以图像数据为基础,让机器模仿人类视觉,自动完成某些信息的处理功能,达到人类所具有的对视觉采集图像进行识别的能力,以代替人去完成图像分类及识别的任务[5]。图像模式识别系统通常由五个模块组成,如图1所示。
2 图像预处理及特征提取
由安卓手机拍照成功后得到液晶屏图像,这里选取拍照条件不是很理想的情况下获取的照片,如下图2所示。
由上图2所示,得到的图像是彩色图像,由于光照强度等原因,液晶屏图像中常有许多噪声点。为了得到精确图像,本文对图像进行灰度化处理、大津法[6]二值化处理和开运算处理。下图3中(a)、(b)和(c)分别为灰度化处理、大津法二值化处理和开运算处理后的结果。
2.1 图像倾斜矫正
在拍摄过程中由于拍摄角度等因素,导致图像会有一定角度的倾斜,如图3(c)所示。图像的倾斜将会增加后续字符分割和特征提取的难度,甚至导致提取到的特征值是错误的,进而严重影响字符识别的精度。为了便于图像后续处理,需要对图像进行倾斜矫正。
对于液晶屏图像,考虑采用霍夫变换的方法求其倾斜角。通过霍夫变换,可以取得图像中所有直线的端点。为了便于快速、高效地求取图像的倾斜角,先对图像进行膨胀处理和边缘检测。
膨胀是指将图像与核进行卷积,核可以是任何形状或大小。通过图像的膨胀操作,可以将图像中的高亮区域逐渐增加。对于图3(c),先进行反色处理,然后采用7×7的矩形内核膨胀处理5次。膨胀处理后的图像包含有许多直线,对膨胀处理图像进行边缘检测。设定上下限阈值比为3:1,通过Canny边缘检测得到的边缘图像。图4中(a)和(b)分别是对图3(c)进行膨胀和边缘检测后的结果。
由图4(b)可以看出,经膨胀处理和边缘检测后的图像可以将液晶屏数字的轮廓勾勒出来。对图4(b)进行霍夫变换,可以获取图像中每条线段的端点,进而可以求其反正切函数,即求得每条线段与横轴之间的夹角。对其余倾斜角求取平均值,即认为是图3(c)的倾斜角度。
根据倾斜角将图3(c)进行旋转得图5。
2.2 字符分割及归一化
字符的分割技术[7]可以将单个字符从图像中分割出来。直方图[8]广泛应用于计算机视觉应用中,可以对图像的数据进行统计,获得数据分布的统计图。
对于一个大小为X×Y的二值化图像,定义其在横轴和纵轴的投影分布函数为Hx(i)(i=1,2,…,X)和Hy(i)(i=1,2,…,Y),其中,X代表横轴的坐标,Y代表纵轴的坐标,初始化时设置函数值均为0。遍历该图像中的像素点,如果该像素点为黑色像素点,则将该像素点对应的投影分布函数Hx(i)和Hy(i)分别加1。最后,得出图像在横轴和纵轴的投影分布函数Hx(i)和Hy(i)。利用纵轴和横轴方向分布函数中波峰和波谷的位置[9],根据字符和空白在纵轴和横轴投影的不同,得出各个字符的顶、底、左端和右端在图像中位置。
根据各个字符在图像中的位置,即可将字符分割,对图3(c)进行字符分割后各个字符如图6所示。
得到字符在图像中的位置后,即可将字符从图像中分割出来。由于实际分割过程中每个字符大小不一致,如图6所示,所以对分割字符进行归一化处理,使不同字符的大小统一为固定大小,便于后续字符分割。首先将图6中字符周围的空白位置切除,然后采用三次样条插值的方法,对源图像附近的4×4个邻近像素进行三次样条拟合,最后将目标像素对应的三次样条值作为目标图像对应像素点的值。将字符归一化以后,所得各个字符如下图7所示。
2.3 字符特征提取
将字符从图像中分割以后,就可以对图像进行特征提取。采用网格法[10]提取字符的21个特征值,用于字符图像的识别。首先将字符图像均分为5行3列的区域,分别求得每个区域内黑色像素所占该区域的比例,作为字符的15个特征值;然后将字符图像均分为3行,分别求得每行内黑色像素点占该区域的比例,作为字符图像的3个特征值;最后,将字符图像均分为3列,分别求得每列内黑色像素点占该区域的比例,作为字符图像的另外3个特征值。共提取字符图像的21个特征值,用于字符图像的识别。
3 字符识别
用误差反向后传算法即BP神经网络来进行数字字符的识别。BP神经网络由Rumelhart和McClelland于1985年提出,实现了Minsky和Papert认为不能实现的多层网络的设想[11]。
三层BP神经网络的模型如图8所示,包括输入层、隐含层和输出层,各层间由连接权值构成。BP神经网络的训练过程由信号的正向传播和误差的反向传播两个过程组成,其学习的本质是各连接权值的动态调整。随着网络的不断学习,权值也不断的调整,直到误差减少到可接受的程度或者训练达到预定的训练次数。
3.1 网络结构设计
2.3节说明了提取字符的21个特征值,本系统BP神经网络的输入层采用21个节点,分别对应字符的21个特征值。数字字符的识别结果共10个,本文用各个数字对应的四位二进制数表示其对应的期望输出,即输出层采用4个节点。
由理论分析证明,具有单隐层的BP神经网络即可满足大部分的设计需求,本文中采用单隐层。
BP神经网络隐含层节点数的设计与训练样本数的多少、样本噪声的大小及样本中蕴含规律的复杂程度密切相关。实际应用中常用试凑法确定最佳隐节点个数[12]。下面是一些确定隐节点数的经验公式:
隐节点数,n为输入层节点数,l为输出层节点数,为1~10之间常数。
经过分析与实际检验,本系统采用10个隐节点数时,可以使网络误差很小,同时具有很高的训练精度,训练速度也很快,所以采用10个隐节点数。
网络训练所需样本数取决于输入输出的非线性映射关系的复杂程度,映射关系越复杂,为保证映射精度,所需要的样本数就越多。对于本系统而言,当每个数字字符取10个样本,总共取100个样本的时候,就可以训练出比较理想的BP神经网络。
3.2 生成训练样本和测试样本
本系统收集了1 400张液晶屏数字的图像,任意选取100张作为训练样本,剩余1 300张作为测试样本。
3.3 训练神经网络
如果用安卓手机来进行BP神经网络的训练,消耗的时间非常长。为了节省时间,用计算机进行BP神经网络的训练。采用VC++平台,根据训练样本训练三层BP神经网络,训练成功后将BP神经网络模型移植到安卓手机中。
3.4 系统测试
图9为本系统对图2的识别结果,可以看到,该系统可以快速实现液晶屏数字的识别。
用1 300个测试样本对识别系统进行检测,检测结果表明本系统正确识别率高达97.8%,可以实现液晶屏数字的精确识别。
4 结论
现有的液晶屏数字识别技术大都是以计算机作为载体来实现的,不便于实现随时随地进行液晶屏的识别。针对这个问题,以安卓手机为载体,通过拍照获取图像,调用计算机视觉库实现图像的预处理和特征提取,用训练的三层BP神经网络模型实现液晶屏数字的识别。检测结果表明,该系统可以随时随地、快速、高效地实现液晶屏数字的识别。
参考文献
[1] 范会敏,王浩.模式识别方法概述[J].电子设计工程,2012,20(19):48-51.
[2] 李宁.Android开发权威指南[M].北京:人民邮电出版社,2013.
[3] 于仕琪,刘瑞祯.学习OpenCV[M].北京:清华大学出版社,2009.
[4] Dong Yu, Li Deng, SEIDE F. The deep tensor neural network with applications to large vocabulary speech recognition[J]. IEEE Transactions on Audio, Speech, and Language Processing, 2013,21(2):388-396.
[5] 杨淑莹.图像识别与项目实践:VC++、MATLAB技术实现[M].北京:电子工业出版社,2014.
[6] OTSU N. A threshold selection method from gray-level histograms[J]. IEEE Transactions, Systems, Man and Cybernetics, 1979, 9(1):62-66.
[7] 庞然,汪仁煌,刘洪江.液晶屏数字识别中分割算法的研究[J].电子技术应用,2007,33(5):64-66.
[8] 赵莉,杨莉,林晓.基于投影信号和小波分析的字符特征提取方法[J].山东建筑大学学报,2007,22(3):247-250.
[9] 朱俊梅,陈少平.基于改进的投影方法的车牌图像字符分割[J].中南民族大学学报,2007,26(4):58-60.
[10] 巩玉滨,杨红娟,张运楚,等.一种数显仪表数字字符识别方法研究[J].山东建筑大学学报,2011,26(2):134-137.
[11] 王明勋.基于神经网络的液晶数字识别在船用设备管理中的应用[J].舰船电子工程,2012,32(7):95-97.
[12] 施彦,韩立群,廉小亲,等.神经网络设计方法与实例分析[M].北京:北京邮电大学出版社,2009.