王 野,宋 欣,宋占偉
(1.吉林大學(xué)電子科學(xué)與工程學(xué)院,長(zhǎng)春130012;2.吉林省啟明軟件園企業(yè)孵化有限公司結(jié)構(gòu)部,長(zhǎng)春130117)
隨著人們生活水平的提高,飲食和醫(yī)療的健康與安全越來(lái)越受到人們的重視。但近些年隨著經(jīng)濟(jì)的高速發(fā)展,產(chǎn)品種類急劇上升,加大了監(jiān)管部門對(duì)產(chǎn)品監(jiān)管的難度,導(dǎo)致食品和藥品市場(chǎng)中存在一定數(shù)量的假冒偽劣產(chǎn)品,這無(wú)疑正危害著消費(fèi)者的健康。
利用二維碼查詢便捷、易于普及等特點(diǎn),使食品、藥品從生產(chǎn)、加工、檢測(cè),到物流、倉(cāng)儲(chǔ)以及銷售等環(huán)節(jié)做到有據(jù)可查,迅速追溯出問(wèn)題環(huán)節(jié),減輕政府監(jiān)管部門的工作量,使消費(fèi)者對(duì)所購(gòu)產(chǎn)品更加放心。目前,國(guó)內(nèi)基于Android系統(tǒng)的查詢系統(tǒng)大多數(shù)是針對(duì)所有商品的某一項(xiàng)查詢內(nèi)容,查詢商品種類過(guò)多且查詢內(nèi)容單一,不符合消費(fèi)者的需求[1]。筆者僅針對(duì)食品、藥品領(lǐng)域的信息管理,通過(guò)提供全面的信息查詢功能,實(shí)現(xiàn)食品、藥品全產(chǎn)業(yè)鏈的無(wú)縫溯源和監(jiān)管。
系統(tǒng)主要以Android 4.0.3平板電腦為嵌入式硬件開發(fā)平臺(tái),基本研究?jī)?nèi)容包括二維碼編碼模塊的實(shí)現(xiàn)、Android功能界面的設(shè)計(jì)以及MySQL數(shù)據(jù)庫(kù)的設(shè)計(jì)等[2]。其中二維碼編碼模塊的實(shí)現(xiàn)基于C#編程,可對(duì)食品、藥品的基本信息(如漢字、字母、數(shù)字等)進(jìn)行編碼,采用Byte編碼模式,M-7糾錯(cuò)級(jí)別,可使編碼誤差控制在5%以內(nèi)。Android功能界面的設(shè)計(jì)基于Java編程,主要有系統(tǒng)主界面、二維碼識(shí)別界面、信息顯示界面、信息錄入界面、系統(tǒng)設(shè)置界面等。MySQL數(shù)據(jù)庫(kù)的應(yīng)用使系統(tǒng)可通過(guò)無(wú)線網(wǎng)絡(luò)對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)和調(diào)用。圖1描述了系統(tǒng)的主要功能框圖,Android功能界面的兩大主要功能是信息查詢和信息錄入,使用信息查詢功能時(shí),首先利用Android功能界面中的二維碼識(shí)別界面進(jìn)行QR Code解碼,識(shí)別碼內(nèi)信息,該信息包括專屬于每種食品、藥品的回溯碼及其基本信息,如商品產(chǎn)地、生產(chǎn)公司、檢測(cè)結(jié)果等[3]。通過(guò)無(wú)線網(wǎng)絡(luò)的傳輸進(jìn)入到MySQL數(shù)據(jù)庫(kù),利用產(chǎn)品專屬的回溯碼進(jìn)行相應(yīng)食品、藥品詳細(xì)信息的調(diào)用,詳細(xì)信息包括商家名稱、入貨時(shí)間、進(jìn)貨來(lái)源。使用信息錄入功能時(shí),同樣先識(shí)別碼內(nèi)信息,再利用回溯碼將產(chǎn)品的詳細(xì)信息通過(guò)無(wú)線網(wǎng)絡(luò)的傳輸存儲(chǔ)到MySQL數(shù)據(jù)庫(kù)中。而包含產(chǎn)品基本信息和回溯碼的二維碼標(biāo)識(shí)的生成則由二維碼編碼模塊實(shí)現(xiàn),在檢測(cè)單位進(jìn)行信息驗(yàn)證后由其發(fā)放二維碼標(biāo)識(shí)。
圖1 系統(tǒng)主要功能框圖Fig.1 The diagram of the system main functions
目前常見的二維條碼主要有4種:QR Code,PDF417,Maxi Code和Data Matrix。其中PDF417,Maxi Code和Data Matrix二維條碼只能編碼全部及擴(kuò)展的ASCII字符,不能編碼漢字,而人們需要能對(duì)漢字進(jìn)行編碼的二維條碼,所以采用QR Code[4]。QR Code即快速響應(yīng)矩陣碼,是目前最具優(yōu)勢(shì)的二維碼之一,它具有存儲(chǔ)信息容量大、安全性高、保密防偽性強(qiáng)等優(yōu)點(diǎn),同時(shí)還能有效地表示中文、日文等方塊文字,因而,在亞洲國(guó)家得到普及。
QR Code的編碼過(guò)程有:數(shù)據(jù)分析及編碼,糾錯(cuò)編碼,構(gòu)造數(shù)據(jù)碼字和糾錯(cuò)碼字,置入功能模塊和碼字模塊,加入掩膜,加入格式信息和版本信息等步驟。編碼漢字與其他字符的區(qū)別主要在于數(shù)據(jù)分析及編碼方式的不同,筆者以“食”字為例敘述QR Code對(duì)漢字進(jìn)行數(shù)據(jù)分析及編碼的具體過(guò)程[5]。
QR Code碼對(duì)漢字的編碼需要借用漢字的GB2312編碼,GB2312編碼按照QR Code碼所特有的編碼方式轉(zhuǎn)換為13位的二進(jìn)制碼,再將中國(guó)漢字模式指示符(1101)、中國(guó)漢字子集指示符(4位二進(jìn)制數(shù))和字符計(jì)數(shù)指示符(1-M編碼版本為8位二進(jìn)制數(shù))依序放在13位二進(jìn)制碼前,終止符(0000)放在序列末尾。漢字在GB2312編碼中由兩個(gè)字節(jié)表示,設(shè)第1個(gè)字節(jié)用M表示,第2個(gè)字節(jié)用N表示,當(dāng)漢字的GB2312編碼中第1個(gè)字節(jié)值在0xAl~0xAA之間時(shí),13位二進(jìn)制數(shù)的轉(zhuǎn)換公式為
當(dāng)漢字的GB2312編碼中第1個(gè)字節(jié)值在0xB0~0xFA之間時(shí),13位二進(jìn)制數(shù)的轉(zhuǎn)換公式為
“食”字的GB2312編碼為CAB3,第1個(gè)字節(jié)值CA在0xB0~0xFA之間,所以,帶入式(2),計(jì)算結(jié)果為D92,轉(zhuǎn)換為13位二進(jìn)制數(shù)為0 1101 1001 0010。GB2312的漢字子集指示符為0001,只有一個(gè)字符,則8位字符計(jì)數(shù)指示符為0000 0001,所以“食”字QR Code碼的二進(jìn)制流如圖2所示。
圖2 “食”字QR Code碼二進(jìn)制流Fig.2 The binary stream of QR Code for word“食”
將二進(jìn)制流分為8位一組的碼字,不足位補(bǔ)零,得到序列為:
下劃線部分為補(bǔ)充位。1-M版本數(shù)據(jù)容量為16個(gè)字節(jié),因此,上述序列還需繼續(xù)補(bǔ)充碼字,用補(bǔ)充碼11101100和00010001交替補(bǔ)充,最終得到QR Code的編碼序列:
得到QR Code的數(shù)據(jù)編碼序列后,再經(jīng)過(guò)糾錯(cuò)編碼、置入功能模塊、加入掩膜等步驟,生成二維碼標(biāo)識(shí)。根據(jù)上述編碼方法,利用C#編程實(shí)現(xiàn)QR Code編碼的操作界面如圖3所示[6]。用戶可以根據(jù)信息的形式及信息量的大小選擇不同的編碼模式、糾錯(cuò)級(jí)別和編碼版本,在產(chǎn)品基本信息框中輸入產(chǎn)品的信息,點(diǎn)擊編碼,二維碼圖框中就會(huì)顯示該信息的二維碼標(biāo)識(shí)。
圖3 QR Code編碼操作界面Fig.3 QR Code operation interface
Android功能界面主要包括系統(tǒng)主界面、QR Code識(shí)別界面、顯示界面和登陸界面等,其中QR Code識(shí)別界面和識(shí)別結(jié)果界面是本環(huán)節(jié)的技術(shù)難點(diǎn),下面分別予以闡述。
2.2.1 基于Java編程實(shí)現(xiàn)QR Code識(shí)別界面
程序主要流程如圖4所示。實(shí)現(xiàn)步驟如下。
1)創(chuàng)建一個(gè)CaptureActivity類,復(fù)寫onCreate()方法導(dǎo)入layout布局文件,并對(duì)識(shí)別界面進(jìn)行初始化。
2)調(diào)用并配置Camera。識(shí)別界面在進(jìn)行二維碼掃描時(shí)需調(diào)用系統(tǒng)內(nèi)的相機(jī)對(duì)二維碼標(biāo)識(shí)進(jìn)行捕捉,這一過(guò)程由相機(jī)初始化函數(shù)private void initCamera(SurfaceHolder surfaceHolder){}實(shí)現(xiàn)。主要語(yǔ)句如下:
3)構(gòu)建掃描窗口。在相機(jī)界面內(nèi)構(gòu)建一個(gè)二維碼掃描窗口,以便二維碼置于窗口內(nèi)時(shí)可以自動(dòng)識(shí)別,掃描窗口的構(gòu)建通過(guò)如下函數(shù):
類viewfinderView控制掃描窗口的參數(shù),掃描窗口如圖5所示。
4)捕捉畫面。掃描窗口打開后即可進(jìn)行掃描,利用類Camera.PreviewCallback設(shè)置一個(gè)監(jiān)聽器,監(jiān)聽二維碼畫面是否已經(jīng)捕捉到。若捕捉成功,則向handleDecode()解碼函數(shù)發(fā)送一個(gè)解碼消息,handleDecode()收到消息后會(huì)立即執(zhí)行解碼程序;若捕捉失敗則返回繼續(xù)捕捉,不發(fā)送解碼消息[7]。
5)QR Code解碼。解碼由以下函數(shù)實(shí)現(xiàn):
圖4 QR Code識(shí)別流程圖Fig.4 Flow chart of QR Code recognition
圖5 QR Code掃描窗口Fig.5 QR Code scanning window
2.2.2 QR Code顯示界面的實(shí)現(xiàn)
在對(duì)二維碼標(biāo)識(shí)進(jìn)行掃描時(shí),可能因掃描角度等問(wèn)題導(dǎo)致捕捉到的二維碼圖像失真而無(wú)法定位,影響識(shí)別結(jié)果的準(zhǔn)確性,這是實(shí)現(xiàn)QR Code顯示界面的技術(shù)難點(diǎn)。筆者采用四線聚焦法對(duì)捕捉圖像進(jìn)行矯正,以解決上述問(wèn)題。
QR Code碼的標(biāo)識(shí)中主要分為功能區(qū)域以及數(shù)據(jù)區(qū)域兩部分,功能區(qū)域包括位置探測(cè)區(qū)域、校正區(qū)域和分隔符等。其中位置探測(cè)區(qū)域是最重要的功能區(qū)域,存儲(chǔ)二維碼的位置信息,只有準(zhǔn)確定位才能有效地從數(shù)據(jù)區(qū)域中識(shí)別出碼內(nèi)信息。本系統(tǒng)所采用的四線聚焦法是利用位置探測(cè)區(qū)中深、淺像素交替的比例進(jìn)行識(shí)別。如圖6a的虛線所示,當(dāng)一條過(guò)探測(cè)區(qū)中心點(diǎn)的水平直線L穿過(guò)探測(cè)區(qū)時(shí),探測(cè)區(qū)中的深、淺區(qū)域依次交替,并按1∶1∶3∶1∶1比例出現(xiàn)[8]。當(dāng)位置探測(cè)區(qū)發(fā)生偏轉(zhuǎn)時(shí),這種交替模式及其比例并不發(fā)生改變,所以根據(jù)探測(cè)區(qū)的這個(gè)特征便可對(duì)其進(jìn)行定位。
在對(duì)二維碼標(biāo)識(shí)進(jìn)行掃描時(shí),分別從水平和豎直方向進(jìn)行掃描,當(dāng)深、淺像素按1∶1∶3∶1∶1比例出現(xiàn)時(shí),記錄此時(shí)的行、列位置,并繼續(xù)掃描直至所有具備此特征的行、列均被記錄。然后分別取最先和最后出現(xiàn)的行、列,共4條線組成一個(gè)正方形,連接對(duì)角線便得到位置探測(cè)區(qū)的中心點(diǎn)[9]。根據(jù)上述方法可找到二維碼標(biāo)識(shí)中3個(gè)位置探測(cè)區(qū)的中心點(diǎn),連接3個(gè)中心點(diǎn)可組成一個(gè)直角三角形(見圖6b)。以直角三角形頂點(diǎn)為原點(diǎn)建立直角坐標(biāo)系,則兩條直角邊的直線方程分別為其中φ1,φ2分別為兩條直角邊與水平軸所夾的銳角。選擇φ1或φ2對(duì)二維碼圖像進(jìn)行整體旋轉(zhuǎn),便可矯正二維碼標(biāo)識(shí)的方向[10]。
圖6 四線聚焦法示意圖Fig.6 The diagram of method of four lines focusing
以圖3所生成的二維碼標(biāo)識(shí)為例進(jìn)行測(cè)試,對(duì)標(biāo)識(shí)以45°角進(jìn)行旋轉(zhuǎn),識(shí)別結(jié)果如圖7所示。由圖7可看出,該算法可以有效地對(duì)二維碼標(biāo)識(shí)進(jìn)行矯正。
數(shù)據(jù)庫(kù)是系統(tǒng)運(yùn)行的基礎(chǔ),選擇時(shí)要確保其合理性,該系統(tǒng)根據(jù)數(shù)據(jù)量的大小選擇MySQL作為系統(tǒng)開發(fā)的數(shù)據(jù)庫(kù),滿足系統(tǒng)對(duì)食品藥品詳細(xì)信息調(diào)用、存儲(chǔ)功能的應(yīng)用。
該系統(tǒng)共需要2張表,分別為食品藥品詳細(xì)信息表和管理員信息表。
1)食品藥品詳細(xì)信息表:用于記錄食品藥品的詳細(xì)信息,具體如表1所示。
圖7 QR Code顯示界面Fig.7 QR Code display interface
表1 食品藥品詳細(xì)信息表Tab.1 Sheet of food and medicine details
建立表1的MySQL語(yǔ)句如下:
2)管理員信息表:用于記錄管理員的基本信息,具體如表2所示。
表2 管理員信息表Tab.2 Sheet of administrator information
建立表2的MySQL語(yǔ)句如下:
為實(shí)現(xiàn)對(duì)食品藥品信息中漢字字符的準(zhǔn)確編碼,筆者采用QR Code編碼方式,保證了二維碼標(biāo)識(shí)生成的準(zhǔn)確性和可靠性,并采用四線聚焦法對(duì)二維碼捕捉圖像進(jìn)行矯正,較好地解決了掃描過(guò)程中二維碼圖像的失真問(wèn)題。測(cè)試結(jié)果表明,以最大旋轉(zhuǎn)角45°對(duì)二維碼標(biāo)識(shí)進(jìn)行掃描,仍可準(zhǔn)確識(shí)別碼內(nèi)信息,具有較高的抗干擾性和穩(wěn)定性,且操作方便,移動(dòng)性強(qiáng),在食品藥品領(lǐng)域中具有很高的實(shí)用價(jià)值。
[1]高羽佳.QRcode技術(shù)及其在農(nóng)產(chǎn)品可追溯物流中的應(yīng)用研究[D].合肥:合肥工業(yè)大學(xué)計(jì)算機(jī)與信息學(xué)院,2009:54-62.GAO Yujia.Study on the QRcode Technology and the Application of its Agricultural Products Traceable Logistics[D].Hefei:School of Computer and Information,Hefei University of Technology,2009:54-62.
[2]LIU Yue,YANG Ju,LIU Mingjun.Recognition of QR Code with Mobile Phones[C]∥Control and Decision Conference.[2014-02-16].http:∥www.citeulike.org/user/chickiichoc/artiche/10869647.
[3]耿慶田,趙宏偉,常亮.基于嵌入式的文件系統(tǒng)研究[J].吉林大學(xué)學(xué)報(bào):信息科學(xué)版,2013,31(6):609-614.GENG Qingtian,ZHAO Hongwei,CHANG Liang.Research on File System Based on Embedded System[J].Journal of Jilin University:Information Science Edition,2013,31(6):609-614.
[4]宋強(qiáng),齊貴寶,宋占偉.基于Android系統(tǒng)的H.264視頻監(jiān)控設(shè)計(jì)[J].吉林大學(xué)學(xué)報(bào):信息科學(xué)版,2012,30(3):272-278.SONG Qiang,QI Guibao,SONG Zhanwei.Design of H.264 Video Monitoring System Based on Android [J].Journal of Jilin University:Information Science Edition,2012,30(3):272-278.
[5]蘇小波,嚴(yán)志雁,趙嵩,等.基于二維碼和地理坐標(biāo)的農(nóng)產(chǎn)品追溯編碼設(shè)計(jì)[J].江西農(nóng)業(yè)學(xué)報(bào),2012,24(6):173-175.SU Xiaobo,YAN Zhiyan,ZHAO Song,et al.Design of Agricultural Products Trace Coding Based on Two-Dimensional Bar Code and Geographical Coordinate[J].Acta Agriculture Jiangxi,2012,24(6):173-175.
[6]吳亞峰,蘇亞光.Android應(yīng)用案例開發(fā)大全[M].北京:人民郵電出版社,2011:198-263.WU Yafeng,SU Yaguang.Android Applications& Development Compendium[M].Beijing:Posts and Telecom Press,2011:198-263.
[7]HU Wei.The Study of Android System Architecture and Its Drivers[J].Journal of Guangzhou Open University,2010,10(4):96-103.
[8]ANDREW HOOG.Android Forensics:Investigation,Analysis and Mobile Security for Google Android[M].New York:Syngress Press,2011:137-145.
[9]LAUREN DARCEY,SHANE CONDER.Android Wireless Application Development VolumeⅠ:Android Essentials[M].Boston:Addison-Wesley Professional,2012:233-267.
[10]鮑蕾蕾.基于Android終端的物聯(lián)網(wǎng)數(shù)據(jù)管理系統(tǒng)研究[D].北京:北方工業(yè)大學(xué)信息工程學(xué)院,2013.BAO Leilei.Research on ZigBee Data Management System Based on Android Terminal[D].Beijing:School of Information Engineering,North China University of Technology,2013.