基于移动智能终端的车票管理软件设计

2014-10-21 19:57李建尹项博李佳俊王海瑞
计算机光盘软件与应用 2014年24期

李建 尹项博 李佳俊 王海瑞

摘要:该文基于数字图像处理技术及OCR文字识别引擎,在基于Android的智能终端上设计了一个列车车票管理软件,简化列车员的管理工作。文中重点研究了如何通过预处理过程来加快OCR引擎的速度,提高正确率。

关键词:图像预处理;开源OCR引擎;二维条码;Android开发

中图分类号:TP391.44

在旅客列车开行过程中,列车员的一项重要而繁琐的重复性工作是核验乘客的车票,防止旅客上错车;在即将到站时提醒相应铺位的乘客,以防旅客坐过站。在平板电脑、智能手机等移动智能终端广泛应用的大背景下,可利用摄像头采集车票图像,再通过图像处理技术提取出车票信息,实现车票管理的信息化。

从车票提取乘客信息有两种渠道,一是通过车票右下方的二维条形码(QR码);二是直接通过文字识别技术,读取车票上的文字信息。第一种渠道中,需要破解QR码的加密算法才能获得车票信息,这是一种不合适的行为。对于基层列车乘务员而言,是没有权限接入铁路部门的票务系统的。因此,应该考虑使用第二种方案来提取车票信息。这种方案的优点是避免了破解加密算法及带来的法律纠纷;缺点是需要进行图像处理及文字识别,运算量相对大一些。由于现有的移动智能终端大都配备4核1.2GHz以上的ARM处理器,1G Bytes以上的内存,及高分辨率摄像头,使得实时采集车票图像并提取车票信息成为可能。

1 系统概况

基于智能终端的验票软件,其图像采集设备采用终端自带的摄像头,通过终端自带的LCD屏、喇叭输出结果,充分利用智能终端的资源,大大降低系统部署成本。

为便于大量旅客信息的保存及查询,采用Sqlite数据库存储车票数据。此外,还有一些有关列车的设置信息,比如车次、车厢号、各站点的到站发站时间等。列车员可以通过触摸屏手动输入这些设置信息,也可以通过铁路網站直接下载。

软件的主要处理过程如图1所示:

预处理过程主要包括颜色空间转换、去噪、图像校正等过程。文字识别过程主要基于OCR(Optical character recognition)识别引擎完成文字提取。识别结果存入数据库后,软件根据到站时间设置提醒闹钟,确定何时发出旅客到站的提醒信号。下面重点对预处理和识别部分的原理及过程进行叙述。

2 详细处理过程

2.1 预处理过程

本设计中的预处理过程主要包括以下两个方面:基于QR码图形的几何调整,以及基于固定位置的文本区域分割。

2.1.1 基于QR码图形的几何调整

由于采集距离远近及拍摄角度的不同,采集的车票图像尺寸和系统中标准车票图像尺寸间存在较大的差别,为便于后续处理,在预处理阶段除了进行颜色空间转换、去噪外,重点进行图像的几何调整。尽管OCR引擎在一定程度上能够自动处理诸如图像旋转、缩放、图像颠倒等问题,但会引入更多的计算量,同时增加出错的概率。为了提高识别性能,我们根据车票的特殊标志对车票图像进行几何调整。由于新一代的火车票票面上均印有二维QR码,我们可以通过二维QR码的形状及位置信息来对车票的几何参数加以判断。典型的火车票图片如图2所示:

从中可以看到,由于拍摄时不可避免地会产生图像旋转现象,在进行后续处理之前,需要先将图片旋转复原到正常位置。旋转复原的前提是确定图像拍摄时被旋转的角度,方法如下:

首先提取车票QR码图像的灰度边缘。常用的边缘提取算法有Sobel[1]、Canny[2]算子等,其中Canny算子的性能最好,但是复杂度较高;而Sobel算子具有计算过程简单的特点,适合在嵌入式设备上运行。这里使用Sobel算子的垂直模板来提取边缘,并对边缘图像进行二值化,得到的结果如图3所示。

接着对图中的线条进行骨骼化[1]处理。为了防止大量短线条的干扰,可以在进行骨骼化之前,使用膨胀腐蚀算法来滤除图中的大量小区域。骨骼化后的结果如图4所示。

可以使用直线拟合方法来提取图4中的各条直线,但更常用的是使用Hough变换[3]。Hough变换把图像空间中的直线检测问题转换为参数空间中的点检测问题,再在参数空间中通过简单的累加计算完成检测。完成Hough变换检测直线的结果如图5所示。利用图中直线的斜率,就可以判断QR码的旋转角度(即车票图像的旋转角度);通过对车票图像执行一个旋转变换,便可得标准角度的车票图像。

另外一个问题是判断车票的缩放比例以及判断车票是否颠倒。在本设计中,我们通过QR码中的位置探测图形来实现检测。

在QR码中,位置探测图形是指QR码中位于左上、右上、左下三个区域的方块状图形。如图6所示。每个位置探测图形的模块序列由一个深色-浅色-深色-浅色的次序构成,各元素的相对宽度的比例是1:1:3:1:1。检测位置探测图形的方法有很多[4],这里不详细叙述。找到三个位置探测图形以后,根据三者中心坐标之间的关系,可以判断出图像是正立还是倒立的,方法如下:

假设图像的坐标原点位于左上角,三个位置探测图形中心处的坐标分别为:(x1,y1),(x2,y2),(x3,y3)。由三个点连接的三条线段中,寻找夹角接近90°的两条线段,如果90°夹角的内部指向右下角,则图像是正立的;否则图像是倒立的。

对于车票的缩放比例,在图片的角度已经旋转复原的情况下,根据测量三个位置探测图形的距离WX,WY,对比标准参考图像中的位置探测图像间的距离WX_ref,WY_ref,便可计算出图片在水平和垂直方向上的大致缩放比例。

2.1.2 文本区域分割

调整完角度和方向的图片可以直接输入到OCR引擎进行文字识别。但由于车票上很多区域都没有文字信息,且有一部分文字不是我们所关注的,没有必要进行识别。另外,开源OCR识别引擎的处理速度比较慢,处理太大的图片时难以满足实时性的要求。比如,经测试,一张分辨率为1280x960的车票图片,在MTK6589处理器上利用tesseract引擎进行文字识别时,大概需要10秒钟左右的时间,实时性较差。在本设计中,考虑到关注的文字信息只出现在一些固定的区域,一旦火车票的角度和尺寸被复原后,文字区域的位置是固定的。可以因此将文字区域分割出来,加快OCR的处理速度。图7中,方框部分为由程序根据预先设置的坐标标识出来的关注区域。从中可以看到,车票上关注的区域只有6个,所含文字数量非常有限,有利于加快OCR的识别速度。

2.2 文字识别

关于光学字符设别OCR的研究已经非常多,尤其是商用的OCR引擎已经能够达到比较好的识别效果,如汉王[5]、ABBYY[6],等,但是由于涉及版权及成本问题,没有在本设计中采用。开源OCR也比较多,比较流行的比如tesseract[7]。与专业OCR识别引擎相比,开源OCR的识别正确率较低,速度较慢。但如果针对某个具体的问题来加以优化,则可大大改善其性能。

为了提高tesseract识别的速度和准确率,我们先按照位置来对车票图像进行分割;接着对不同区域的分割图片采用不同的训练和识别策略:

(1)对于车次、座号、席别、日期时间等区域,由于其格式是完全固定的,所含字符的种类也十分有限,因此,我们有针对地训练比较小的模板库进行识别,加快识别的过程,提高识别的准确性。

(2)对于起点站、终到站区域。由于车次识别完成后,其停靠站点的选项就已经确定,因此,我们让识别引擎有针对地比对与该次车各个候选站点的相似性,从而提高准确率。

测試表明,采用上面的方法后,识别单张车票图像的时间从10余秒减少到1秒左右,能够满足实用的需求。

2.3 后续处理

一旦识别出车票,则首先判断该旅客是否属于本次列车、本车厢。如果不是,不允许旅客上车;如果是,则将旅客数据记录进数据库,并启动定时器,周期性的检查旅客是否即将到站,一旦即将到站,则发出提示信息。检查的准则是根据当前时间与软件中预置的列车到站时刻表。如果发生列车晚点,则在列车到达中间站后,乘务员可根据到站时间人为修正一个时间偏移。

3 结束语

本设计基于OCR文字识别引擎,在移动智能终端上设计了一个车票管理软件,基于该软件可以简化列车员的工作量,提高工作效率。本设计的特点是在预处理阶段,通过QR码的特征来对车票进行几何校正;在OCR识别的过程中,通过分割车票的感兴趣区域,加快识别速度。

参考文献:

[1]R. Gonzalez, R. Woods. Digital Image Processing, Addison Wesley, 1992,pp 414-428.

[2]J. Canny. A Computational Approach To Edge Detection, IEEE Trans. Pattern Analysis and Machine Intelligence, 8:679-714,1986.

[3]R. O. Duda, P. E. Hart. Use of the Hough Transformation to Detect Lines and Curves in Pictures.Comm. ACM, Vol.15, pp.11-15.

[4]刘宏伟,苗东,李志刚等.二维条码的识别方法[J].微计算机信息(测控自动化),2004(04).

[5]汉王文本识别技术.http://ka.hanwang.com.cn/OCR技术/index.htm.

[6]泰比移动OCR引擎.http://www.abbyy.cn/mobileocr/.

[7]tesseract.https://code.google.com/p/tesseract-android-tools/.

作者信息:李建(1994-),男,吉林四平人,本科在读,电子信息工程专业。

作者单位:北方工业大学 电子信息工程学院,北京 100041

基金项目:北京市大学生科学研究与创业行动计划项目。