文献标识码: A
文章编号: 0258-7998(2012)09-0021-03
2012年1月,春运火车票全面实行实名制, 在旅客进站检票时,工作人员要查验两种证件:印有乘车人信息以及二维条码的火车票、乘车人本人身份证。目前的查验设备主要由三部分组成:电脑、二维码读取设备和二代身份证信息读取设备。至少需要配备2名工作人员、一台小型电脑桌,一张电脑椅。旅客进站检票时,通常需经过如下流程:
出示火车票和身份证给工作人员,工作人员分别在二维码读取设备上读出车票的信息和在二代身份证读取个人信息, 两者联网比对无误后确认是否有效[1]。在这个过程中,由于二维码读取设备和二代身份证信息读取设备是两个不同的设备,整体造价很高,给大面积使用造成一定的困难。同时整个实名制检票系统占地大,不方便移动,须在每个检票口都必须安放一套实名制检票系统,这更增加了成本[2]。而且检票过程用时较多,影响旅客的出行。
针对以上情况,本文提出了一种基于Android的实名制火车票检票手持设备。通过对火车票二维码以及二代身份证RFID信息的采集、显示,同时通过WIFI网络对实名火车票信息进行验证来解决实名验票过程中遇到的各种问题。
1 系统的总体构成
基于Android嵌入式平台的火车票实名检票系统主要由基于ARM11嵌入式微处理器、二维条码扫描系统、RFID身份证识别系统和无线网络系统WIFI组成。手持设备采用基于ARM11内核的S3C6410嵌入式微处理器组成信息处理核心,二维码条码扫描模块采用500万像素自动对焦CMOS摄像头组成二维条码采集系统,RFID模块主要完成身份证信息的提取。采用开源的Android操作系统作为嵌入式系统软件平台,主要为用户提供友好的图形界面以及驱动底层的硬件设备。系统的总体框架如图1所示。
2 系统硬件构成
基于Android嵌入式平台的火车票实名检票系统由嵌入式系统硬件和软件构成,其中系统硬件主要包括S3C6410微处理器、二维码摄像头扫描系统、RFID身份证扫描系统及外围电路等。
2.1 基于S3C6410的嵌入式系统
通常手持设备要求移动方便、外形美观、低功耗、高性能、扩展方便。为此,使用三星公司的S3C6410嵌入式微处理器,采用FPGA封装,共424引脚。通过外接总线,通用I/O和各种专用模块的扩展,其功能强大。S3C6410外围电路主要包括DDR RAM、Flash、串行接口模块、LCD显示模块、WIFI收发模块、摄像头接口模块、USBHost接口模块等。硬件平台的总体设计框架如图2所示。
2.2 RFID识别系统
目前二代身份证使用ISO14443 TYPEB标准。为此,RFID识别系统作为二代身份证的信息采集设备,采用飞利浦MFRC522芯片来读取二代身份证。MFRC522集成了13.56 MHz频率下所有类型的被动非接触式协议和通信方式,支持ISO14443兼容应答器信号,数字信号部分处理错误及检测ISO14443帧。此外,芯片支持快速CRYPTO1加密算法,用于验证MIFARE系列卡片。MFRC522支持MIFARE更高速的非接触式通信,双向数据传输速率高达424 kb/s。MFRC522与主机间通信采用连线较少的串行通信,且可根据不同的需求,选取串行UART、SPI或IIC模式之一进行通信。在本系统中采用UART串行通信的模式与S3C6410嵌入式微处理器进行通信,其构成如图3所示。
2.3 条码扫描系统
火车票实名检票系统中,条码扫描系统主要负责火车票票面的二维码信息的采集和解码。在本系统中,采用500万像素自动对焦的摄像头对二维码进行拍照并识别其中的票面信息,相对于传统的激光扫描器,摄像头采集器件具备外围连线简单、价格便宜、功耗低等特点,较适合于移动设备中使用。
3 系统软件构成
在本系统中,选用Android 2.3.7操作系统作为火车票实名检票系统的软件平台。Andioid是Google开发的基于Linux平台的开源手机操作系统,后由开放手持设备联盟开发。它采用了软件堆层的架构,主要由底层系统、中间件和应用程序三部分组成,是第一个为移动终端打造的真正开放和完整的移动操作系统[3]。其中软件开发部分主要包括Android底层驱动开发、二维码扫描解码模块开发以及上层用户应用程序的开发。系统的软件结构如图4所示。
3.1 条码扫描解码模块软件设计
我国现行的火车票是将包含持票人身份信息以及售票信息的QRCode二维码印制在火车票的右下角。在本系统中,采用500万像素可自动对焦的CMOS摄像头采集火车票票面的二维码信息。为此,在软件设计中,需要设计摄像头驱动程序。Android底层使用的是Linux内核,摄像头系统部分在libui库中定义本地代码框架,对上层提供接口功能部件,由CameraServices实现,CameraServices通过调用硬件抽象层下层的摄像头来实现功能。Camera 本地系统上层接口既可以通过本地程序调用,也可以使用JNI 来构建摄像头应用的 Java 框架。摄像头接口驱动的框架如图5所示。
在本系统中,采用摄像头对QR二维码进行图像数据采集。而采集到的QR二维码图像通常存在一定程度的污损,需要先适当地对图像进行处理,然后再对图像进行探测定位,最后进行RS纠错,输出解码结果。具体的步骤如下:
(1)图像灰度化。将摄像头得到的彩色图像转为灰度图像。
(2)中值滤波。将得到的灰度图像去除噪声,保留图像的原本特征。
(3)二值化。采用积分图的快速二值化算法。
(4)边缘检测。采用Sobel算子对二值化的图像进行边缘检测。
(5)图像校正。在拍摄过程中通常存在一定程度的几何失真,需要通过Hough变换对图像进行旋转,并采用双线性插值法对旋转后的图像进行修正。
(6)QR码识别。QR码的识别特征是QR码的探测图形,根据探测图形的三个顶点坐标可以初步估算版本号以及确定模块的宽度,然后寻找QR码的定位图像。当发现有校正图形时,则利用校正图形和定位图形建立取样网络,将QR码图像转换为数据矩阵,“0”代表网格上颜色较浅的模块,“1”代表网格上颜色较深的模块。
(7)提取版本和格式信息,并校验信息检测是否有误,如果有误,则中止解码。
(8)提取掩模信息,将数据矩阵与掩模的图形码进行相应的“异或”操作。
(9)RS纠错。如图像中错误量超过纠错能力,则中止解码。
(10)解码结果输出。
条码扫描解码模块的流程如图6所示。
3.2 身份证识别器串行通信接口设计
在本系统中,二代身份证通过RS232串口与S3C6410嵌入式微处理器进行通信。因此,需要在Android系统中加入串行口驱动程序。本系统硬件抽象层中通过两个线程对串口的设备节点/dev/ttymv1进行读和写。
JNI中的源码通过init、download、upload 3个硬件抽象层中的函数接口对串口进行初始化、读数据和写数据。读数据时,在硬件抽象层中通过读数据的线程从串行设备节点中将数据读出后进行CRC校验和解析,如果CRC校验正确,则把解析之后的数据通过JNI层传到Java中进行使用。写数据时,直接把Java传过来的数据通
实验表明,该系统硬件电路简单,可靠性强,易于扩展;软件图形界面友好,使用方便。对本系统硬软件稍作更改,即可运用于餐饮点餐、物流、超市等领域,可以极大地提高各领域的工作效率,适合于大面积推广。
参考文献
[1] 李轶舜,徐建闽,卢凯.基于第2代身份证的火车电子售检票系统的构建[J].交通与计算机,2008,26(5):148-151.
[2] 胡弼,程永生.基于ARM的实名制检票手持识别终端设计[J].国外电子测量技术,2010,29(10):62-65.
[3] 蒋耘晨.Android系统原理和实战应用[M].北京:北京理工大学出版社,2011.