文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2012)09-0021-03
2012年1月,春運(yùn)火車(chē)票全面實(shí)行實(shí)名制, 在旅客進(jìn)站檢票時(shí),工作人員要查驗(yàn)兩種證件:印有乘車(chē)人信息以及二維條碼的火車(chē)票、乘車(chē)人本人身份證。目前的查驗(yàn)設(shè)備主要由三部分組成:電腦、二維碼讀取設(shè)備和二代身份證信息讀取設(shè)備。至少需要配備2名工作人員、一臺(tái)小型電腦桌,一張電腦椅。旅客進(jìn)站檢票時(shí),通常需經(jīng)過(guò)如下流程:
出示火車(chē)票和身份證給工作人員,工作人員分別在二維碼讀取設(shè)備上讀出車(chē)票的信息和在二代身份證讀取個(gè)人信息, 兩者聯(lián)網(wǎng)比對(duì)無(wú)誤后確認(rèn)是否有效[1]。在這個(gè)過(guò)程中,由于二維碼讀取設(shè)備和二代身份證信息讀取設(shè)備是兩個(gè)不同的設(shè)備,整體造價(jià)很高,給大面積使用造成一定的困難。同時(shí)整個(gè)實(shí)名制檢票系統(tǒng)占地大,不方便移動(dòng),須在每個(gè)檢票口都必須安放一套實(shí)名制檢票系統(tǒng),這更增加了成本[2]。而且檢票過(guò)程用時(shí)較多,影響旅客的出行。
針對(duì)以上情況,本文提出了一種基于Android的實(shí)名制火車(chē)票檢票手持設(shè)備。通過(guò)對(duì)火車(chē)票二維碼以及二代身份證RFID信息的采集、顯示,同時(shí)通過(guò)WIFI網(wǎng)絡(luò)對(duì)實(shí)名火車(chē)票信息進(jìn)行驗(yàn)證來(lái)解決實(shí)名驗(yàn)票過(guò)程中遇到的各種問(wèn)題。
1 系統(tǒng)的總體構(gòu)成
基于Android嵌入式平臺(tái)的火車(chē)票實(shí)名檢票系統(tǒng)主要由基于ARM11嵌入式微處理器、二維條碼掃描系統(tǒng)、RFID身份證識(shí)別系統(tǒng)和無(wú)線網(wǎng)絡(luò)系統(tǒng)WIFI組成。手持設(shè)備采用基于ARM11內(nèi)核的S3C6410嵌入式微處理器組成信息處理核心,二維碼條碼掃描模塊采用500萬(wàn)像素自動(dòng)對(duì)焦CMOS攝像頭組成二維條碼采集系統(tǒng),RFID模塊主要完成身份證信息的提取。采用開(kāi)源的Android操作系統(tǒng)作為嵌入式系統(tǒng)軟件平臺(tái),主要為用戶提供友好的圖形界面以及驅(qū)動(dòng)底層的硬件設(shè)備。系統(tǒng)的總體框架如圖1所示。
2 系統(tǒng)硬件構(gòu)成
基于Android嵌入式平臺(tái)的火車(chē)票實(shí)名檢票系統(tǒng)由嵌入式系統(tǒng)硬件和軟件構(gòu)成,其中系統(tǒng)硬件主要包括S3C6410微處理器、二維碼攝像頭掃描系統(tǒng)、RFID身份證掃描系統(tǒng)及外圍電路等。
2.1 基于S3C6410的嵌入式系統(tǒng)
通常手持設(shè)備要求移動(dòng)方便、外形美觀、低功耗、高性能、擴(kuò)展方便。為此,使用三星公司的S3C6410嵌入式微處理器,采用FPGA封裝,共424引腳。通過(guò)外接總線,通用I/O和各種專(zhuān)用模塊的擴(kuò)展,其功能強(qiáng)大。S3C6410外圍電路主要包括DDR RAM、Flash、串行接口模塊、LCD顯示模塊、WIFI收發(fā)模塊、攝像頭接口模塊、USBHost接口模塊等。硬件平臺(tái)的總體設(shè)計(jì)框架如圖2所示。
2.2 RFID識(shí)別系統(tǒng)
目前二代身份證使用ISO14443 TYPEB標(biāo)準(zhǔn)。為此,RFID識(shí)別系統(tǒng)作為二代身份證的信息采集設(shè)備,采用飛利浦MFRC522芯片來(lái)讀取二代身份證。MFRC522集成了13.56 MHz頻率下所有類(lèi)型的被動(dòng)非接觸式協(xié)議和通信方式,支持ISO14443兼容應(yīng)答器信號(hào),數(shù)字信號(hào)部分處理錯(cuò)誤及檢測(cè)ISO14443幀。此外,芯片支持快速CRYPTO1加密算法,用于驗(yàn)證MIFARE系列卡片。MFRC522支持MIFARE更高速的非接觸式通信,雙向數(shù)據(jù)傳輸速率高達(dá)424 kb/s。MFRC522與主機(jī)間通信采用連線較少的串行通信,且可根據(jù)不同的需求,選取串行UART、SPI或IIC模式之一進(jìn)行通信。在本系統(tǒng)中采用UART串行通信的模式與S3C6410嵌入式微處理器進(jìn)行通信,其構(gòu)成如圖3所示。
2.3 條碼掃描系統(tǒng)
火車(chē)票實(shí)名檢票系統(tǒng)中,條碼掃描系統(tǒng)主要負(fù)責(zé)火車(chē)票票面的二維碼信息的采集和解碼。在本系統(tǒng)中,采用500萬(wàn)像素自動(dòng)對(duì)焦的攝像頭對(duì)二維碼進(jìn)行拍照并識(shí)別其中的票面信息,相對(duì)于傳統(tǒng)的激光掃描器,攝像頭采集器件具備外圍連線簡(jiǎn)單、價(jià)格便宜、功耗低等特點(diǎn),較適合于移動(dòng)設(shè)備中使用。
3 系統(tǒng)軟件構(gòu)成
在本系統(tǒng)中,選用Android 2.3.7操作系統(tǒng)作為火車(chē)票實(shí)名檢票系統(tǒng)的軟件平臺(tái)。Andioid是Google開(kāi)發(fā)的基于Linux平臺(tái)的開(kāi)源手機(jī)操作系統(tǒng),后由開(kāi)放手持設(shè)備聯(lián)盟開(kāi)發(fā)。它采用了軟件堆層的架構(gòu),主要由底層系統(tǒng)、中間件和應(yīng)用程序三部分組成,是第一個(gè)為移動(dòng)終端打造的真正開(kāi)放和完整的移動(dòng)操作系統(tǒng)[3]。其中軟件開(kāi)發(fā)部分主要包括Android底層驅(qū)動(dòng)開(kāi)發(fā)、二維碼掃描解碼模塊開(kāi)發(fā)以及上層用戶應(yīng)用程序的開(kāi)發(fā)。系統(tǒng)的軟件結(jié)構(gòu)如圖4所示。
3.1 條碼掃描解碼模塊軟件設(shè)計(jì)
我國(guó)現(xiàn)行的火車(chē)票是將包含持票人身份信息以及售票信息的QRCode二維碼印制在火車(chē)票的右下角。在本系統(tǒng)中,采用500萬(wàn)像素可自動(dòng)對(duì)焦的CMOS攝像頭采集火車(chē)票票面的二維碼信息。為此,在軟件設(shè)計(jì)中,需要設(shè)計(jì)攝像頭驅(qū)動(dòng)程序。Android底層使用的是Linux內(nèi)核,攝像頭系統(tǒng)部分在libui庫(kù)中定義本地代碼框架,對(duì)上層提供接口功能部件,由CameraServices實(shí)現(xiàn),CameraServices通過(guò)調(diào)用硬件抽象層下層的攝像頭來(lái)實(shí)現(xiàn)功能。Camera 本地系統(tǒng)上層接口既可以通過(guò)本地程序調(diào)用,也可以使用JNI 來(lái)構(gòu)建攝像頭應(yīng)用的 Java 框架。攝像頭接口驅(qū)動(dòng)的框架如圖5所示。
在本系統(tǒng)中,采用攝像頭對(duì)QR二維碼進(jìn)行圖像數(shù)據(jù)采集。而采集到的QR二維碼圖像通常存在一定程度的污損,需要先適當(dāng)?shù)貙?duì)圖像進(jìn)行處理,然后再對(duì)圖像進(jìn)行探測(cè)定位,最后進(jìn)行RS糾錯(cuò),輸出解碼結(jié)果。具體的步驟如下:
(1)圖像灰度化。將攝像頭得到的彩色圖像轉(zhuǎn)為灰度圖像。
(2)中值濾波。將得到的灰度圖像去除噪聲,保留圖像的原本特征。
(3)二值化。采用積分圖的快速二值化算法。
(4)邊緣檢測(cè)。采用Sobel算子對(duì)二值化的圖像進(jìn)行邊緣檢測(cè)。
(5)圖像校正。在拍攝過(guò)程中通常存在一定程度的幾何失真,需要通過(guò)Hough變換對(duì)圖像進(jìn)行旋轉(zhuǎn),并采用雙線性插值法對(duì)旋轉(zhuǎn)后的圖像進(jìn)行修正。
(6)QR碼識(shí)別。QR碼的識(shí)別特征是QR碼的探測(cè)圖形,根據(jù)探測(cè)圖形的三個(gè)頂點(diǎn)坐標(biāo)可以初步估算版本號(hào)以及確定模塊的寬度,然后尋找QR碼的定位圖像。當(dāng)發(fā)現(xiàn)有校正圖形時(shí),則利用校正圖形和定位圖形建立取樣網(wǎng)絡(luò),將QR碼圖像轉(zhuǎn)換為數(shù)據(jù)矩陣,“0”代表網(wǎng)格上顏色較淺的模塊,“1”代表網(wǎng)格上顏色較深的模塊。
(7)提取版本和格式信息,并校驗(yàn)信息檢測(cè)是否有誤,如果有誤,則中止解碼。
(8)提取掩模信息,將數(shù)據(jù)矩陣與掩模的圖形碼進(jìn)行相應(yīng)的“異或”操作。
(9)RS糾錯(cuò)。如圖像中錯(cuò)誤量超過(guò)糾錯(cuò)能力,則中止解碼。
(10)解碼結(jié)果輸出。
條碼掃描解碼模塊的流程如圖6所示。
3.2 身份證識(shí)別器串行通信接口設(shè)計(jì)
在本系統(tǒng)中,二代身份證通過(guò)RS232串口與S3C6410嵌入式微處理器進(jìn)行通信。因此,需要在Android系統(tǒng)中加入串行口驅(qū)動(dòng)程序。本系統(tǒng)硬件抽象層中通過(guò)兩個(gè)線程對(duì)串口的設(shè)備節(jié)點(diǎn)/dev/ttymv1進(jìn)行讀和寫(xiě)。
JNI中的源碼通過(guò)init、download、upload 3個(gè)硬件抽象層中的函數(shù)接口對(duì)串口進(jìn)行初始化、讀數(shù)據(jù)和寫(xiě)數(shù)據(jù)。讀數(shù)據(jù)時(shí),在硬件抽象層中通過(guò)讀數(shù)據(jù)的線程從串行設(shè)備節(jié)點(diǎn)中將數(shù)據(jù)讀出后進(jìn)行CRC校驗(yàn)和解析,如果CRC校驗(yàn)正確,則把解析之后的數(shù)據(jù)通過(guò)JNI層傳到Java中進(jìn)行使用。寫(xiě)數(shù)據(jù)時(shí),直接把Java傳過(guò)來(lái)的數(shù)據(jù)通
實(shí)驗(yàn)表明,該系統(tǒng)硬件電路簡(jiǎn)單,可靠性強(qiáng),易于擴(kuò)展;軟件圖形界面友好,使用方便。對(duì)本系統(tǒng)硬軟件稍作更改,即可運(yùn)用于餐飲點(diǎn)餐、物流、超市等領(lǐng)域,可以極大地提高各領(lǐng)域的工作效率,適合于大面積推廣。
參考文獻(xiàn)
[1] 李軼舜,徐建閩,盧凱.基于第2代身份證的火車(chē)電子售檢票系統(tǒng)的構(gòu)建[J].交通與計(jì)算機(jī),2008,26(5):148-151.
[2] 胡弼,程永生.基于ARM的實(shí)名制檢票手持識(shí)別終端設(shè)計(jì)[J].國(guó)外電子測(cè)量技術(shù),2010,29(10):62-65.
[3] 蔣耘晨.Android系統(tǒng)原理和實(shí)戰(zhàn)應(yīng)用[M].北京:北京理工大學(xué)出版社,2011.