国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Android的二維碼的生成與識別系統(tǒng)的設(shè)計與實現(xiàn)

2012-04-29 18:05:01馬鳴李海波
電腦知識與技術(shù) 2012年26期
關(guān)鍵詞:Android平臺二維碼

馬鳴 李海波

摘要:隨著二維碼的廣泛應(yīng)用和Android智能手機的進一步普及,該文介紹了一個通過Android平臺下的攝像和繪圖功能,利用二維碼的編碼和解碼原理,通過Android手機對二維碼的數(shù)據(jù)進行解析和編碼,實現(xiàn)對二維碼生成和識別系統(tǒng)。該系統(tǒng)內(nèi)容包括兩部分:二維條碼的生成系統(tǒng)設(shè)計和二維條碼的識別系統(tǒng)設(shè)計。生成系統(tǒng)完成了從輸入數(shù)據(jù)到生成相應(yīng)二維碼的功能,識別系統(tǒng)完成對采集到的二維碼符號進行譯碼還原出所攜帶信息的功能。

關(guān)鍵詞:二維碼;二維碼生成;二維碼識別;Android平臺

中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2012)26-6353-04

Design and Realization of the QR Code Generation and Recognition System Based on Android

MA Ming1, LI Hai-bo2

(Nanyang Institute of Technology, Nanyang 473004, China)

Abstract: Along with the wide application of QR Code and Android smart phones further popularity. This paper introduces a camera and drawing function in the Android workbench. Using of QR Code encoding and decoding principle, through the An? droid mobile phone resolve and code planar barcode to realize the QR Code identification and generate system. The content of this project includes the design of creation and recognition. The creation system completes the process from the input data to QR Code,and the recognition system completes the process of translating QR Code to relevant information.

Key words: QR Code; The generation of QR Code; The recognition of QR Code; The Android Platform

一維條碼自出現(xiàn)以來,由于受信息容量的限制,不得不依賴數(shù)據(jù)庫的存在。在沒有數(shù)據(jù)庫和不聯(lián)網(wǎng)的地方,一維條碼的使用受到了較大的限制。另外,要用一維條碼表示漢字的場合,顯得十分的不方便,且效率低下。

二維碼的出現(xiàn)是為了解決一維條碼無法解決的問題而產(chǎn)生。因而它具有高密度、高可靠性等特點,所以可以用它表示數(shù)據(jù)文件(包括漢字文件)、圖像等。二維碼是大容量、高可靠性信息實現(xiàn)存儲、攜帶并自動適讀的最理想的方法。手機二維碼的業(yè)務(wù)類型主要有兩種:一是識讀,就是借助應(yīng)用軟件直接讀出碼上信息,它可以衍生出上網(wǎng)瀏覽、電子購物等多種應(yīng)用;二是被讀,就是由商家向手機用戶發(fā)送二維碼信息,通過設(shè)備識讀,可作身份識別、電子憑證等之用。

1系統(tǒng)相關(guān)技術(shù)分析

1.1 Android系統(tǒng)架構(gòu)

Android是一種以Linux為基礎(chǔ)的開放源代碼操作系統(tǒng),主要使用于便攜設(shè)備。Android的系統(tǒng)架構(gòu)采用了分層的架構(gòu)。android分為四個層,分別是應(yīng)用程序?qū)?、?yīng)用程序框架層、系統(tǒng)運行庫層和 linux內(nèi)核層。隨著Android的快速發(fā)展,如今已允許開發(fā)者使用多種編程語言來開發(fā)Android應(yīng)用程序,而不再是以前只能使用Java開發(fā)Android應(yīng)用程序的單一局面,因而受到眾多開發(fā)者的歡迎,成為真正意義上的開放式操作系統(tǒng)[1]。

1.2開發(fā)環(huán)境

系統(tǒng)主要分為兩個大的模塊:二維碼的生成和二維碼的識別。二維碼的生成主要就是基于 Winnows上的開發(fā)工具Netbeans開發(fā),而同時又開發(fā)一個在Android平臺下的二維碼生成。而二維碼的識別主要就是基于Android平臺來開發(fā),主要就是運用Android SDK和Eclipse共同開發(fā),但是環(huán)境需要搭建。

二維碼的生成主要設(shè)計的是在電腦上運行的桌面程序。通過在電腦上開發(fā)一個Java程序來生成二維碼。其開發(fā)環(huán)境主要如表1。

二維碼的識別和生成是在Android平臺上的開發(fā)的,并使用Eclipse IDE工具進行開發(fā)的。Eclipse IDE安裝ADT插件搭建了很好的Android開發(fā)平臺,方便與編程。至于識別的功能要用到攝像頭,虛擬機上面是沒有攝像頭的,這就需要有真機進行二維碼的識別測試。Android平臺開發(fā)環(huán)境如下表:

2系統(tǒng)的設(shè)計

2.1系統(tǒng)框架設(shè)計

本系統(tǒng)框架結(jié)構(gòu)主要分成生成和識別兩大部分。

識別功能主要就是對二維碼和條形碼的識別。主要就是通過手機的攝像頭對二維碼或者是條形碼進行掃描,然后把把掃描到的二維碼或者是條形碼送到后臺進行解析,如果解析成功后,就不再進行掃描。如果解析不成功,就會在進行掃描采集圖像,在傳到后臺解析,直到能夠識別圖像為止[2]。

生成功能主要就是對二維碼的生成。而生成這個功能可以在電腦上運行生成,也可以在手機上運行生成。二維碼的生成主要支持名片、短信、文本、電子郵件及網(wǎng)絡(luò)書簽的生成。當用戶選擇好多要生成的對象時,就會把用戶輸入的信息送到后臺,通過調(diào)用解析包,來生成還有相應(yīng)信息的二維碼。

2.2二維碼的生成設(shè)計

二維碼的生成,支持多種形式內(nèi)容的二維碼生成。所以用戶要先進行選擇要生成的類型,當選擇類型以后,系統(tǒng)將轉(zhuǎn)入到多選該類型的生成界面給用戶,用戶將相應(yīng)的信息填寫完成,點擊生成二維碼,會跳轉(zhuǎn)到生成界面,顯示生成的二維碼[3]。

2.3二維碼的識別設(shè)計

二維碼的識別主要是通過對攝像頭的調(diào)用,啟用多線程,對攝像頭進行快速的回調(diào)應(yīng)用,當一次回調(diào)的圖像沒有識別出來就進行下一次的回調(diào),直到識別出二維碼為止[4]。同時由于對與二維碼的大小不同,顯示的模糊度不同等等原因,會使攝像頭不能很好的采集圖像,在這里要使攝像頭能夠進行自動對焦,從而使識別更快的實現(xiàn)。當識別完成以后就對用戶進行提醒,對手機進行震動和播放聲音,播放完成,顯示識別出來的結(jié)果。

3系統(tǒng)的實現(xiàn)

3.1二維碼生成的實現(xiàn)

二維碼的生成主要是靠官方相應(yīng)的編碼包,將用戶輸入字符轉(zhuǎn)換成二維數(shù)組,然后根據(jù)二維碼的編碼規(guī)范,使用繪圖功能將二維碼進行繪制。二維碼的生成主要分為名片、短信、文本、電子郵件、網(wǎng)絡(luò)書簽的生成。需要有相應(yīng)的框架使程序與用戶進行交互,使用戶有選擇自己想要生成的類型,然后就是用戶將自己想編輯的信息輸入到系統(tǒng)內(nèi),系統(tǒng)應(yīng)該提供相應(yīng)的交互界面給用戶輸入[5]。該功能具體代碼如下:

public void QREncode(String strEncoding, int qrcodeVersion)

{c.swetake.util.Qrcode testQrcode = new c.swetake.util.Qrcode();

testQrcode.setQrcodeErrorCorrect(M);

testQrcode.setQrcodeEncodeMode(B);

testQrcode.setQrcodeVersion(qrcodeVersion);

byte[] bytesEncoding = strEncoding.getBytes("utf-8");

if (bytesEncoding.length > 0) {

boolean[][] bEncoding = testQrcode.calQrcode(bytesEncoding);

drawQRCode(bEncoding, getResources().getColor(R.drawable.black));}

}

//繪制條形碼

private void drawQRCode(boolean[][] bRect, int colorFill) {

int intPadding = 20;

Canvas mC = mSurfaceHolder01.lockCanvas();

mC1.drawColor(getResources().getColor(R.drawable.white));

Paint mP = new Paint();

mP1.setStyle(Paint.Style.FILL);

mP.setColor(colorFill);

mP1.setStrokeWidth(1.0F);

for (int i = 0; i < bRect.length; i++) {

for (int j = 0; j < bRect.length; j++) {

if (bRect[j][i]) {

mC.drawRect(new Rect(intPadding + j * 3 + 2,

intPadding + i * 3 + 2, intPadding + j * 3 + 2 + 3,

intPadding + i * 3 + 2 + 3), mP1);

}

}

} mSurfaceHolder01.unlockCanvasAndPost(mC1);

}

3.2二維碼識別的實現(xiàn)

系統(tǒng)在手機上實現(xiàn)圖像的采集是重要的一步,在Android平臺上,是使用Camera類來完成攝像頭的調(diào)用和圖像采集使用Camera mCamera = Camer-a. open ()獲得Camera的實例,然后使用Camer-a.Parameters來設(shè)置獲得圖像的大小,最后通過實現(xiàn)Camera. Preview-Callback的接口onPreviewFrame( byte[]data,Camera camera)來獲得攝像頭的圖像數(shù)據(jù)data。

為能夠較快地獲得清晰的圖像,提高識別速度,文中使用了自動對焦技術(shù)。另外還應(yīng)該對對焦進行定時操作,這就需要設(shè)置一個定時器對自動對焦進行定時調(diào)用。

后臺對攝像頭傳過來的圖像數(shù)據(jù)data進行解碼處理,如果能夠解析出來,則上面的對焦調(diào)用,攝像頭回傳圖像數(shù)據(jù)調(diào)用等將暫停。如果解析不成功,則繼續(xù)輪回調(diào)用。節(jié)約解析的時間[6]。

后臺對攝像頭傳過來的圖像數(shù)據(jù)data進行解碼處理,如果能夠解析出來,則上面的對焦調(diào)用,攝像頭回傳圖像數(shù)據(jù)調(diào)用等將暫停。如果解析不成功,則繼續(xù)輪回調(diào)用。節(jié)約解析的時間。主要實現(xiàn)代碼如下:

public void handleMessage(Message message) {

switch (message.what) {

case R.id.auto_focus:

if (state == State.PREVIEW) {

CameraManager.get().requestAutoFocus(this, R.id.auto_focus);

}

break;

case R.id.restart_preview:

Log.d(TAG, "Got restart preview message");

restartPreviewAndDecode();

break;

case R.id.decode_succeeded:

Log.d(TAG, "Got decode succeeded message");

state = State.SUCCESS;

Bundle bundle = message.getData();

Bitmap barcode = bundle == null ? null : (Bitmap) bundle

.getParcelable(DecodeThread.BARCODE_BITMAP);

activity.handleDecode((Result) message.obj, barcode);

break;

case R.id.decode_failed:

state = State.PREVIEW;

CameraManager.get().requestPreviewFrame(decodeThread.getHandler(),

R.id.decode);

break;

case R.id.return_scan_result:

Log.d(TAG, "Got return scan result message");

activity.setResult(Activity.RESULT_OK, (Intent) message.obj);

activity.finish();

break;

case R.id.launch_product_query:

Log.d(TAG, "Got product query message");

String url = (String) message.obj;

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);

activity.startActivity(intent);

break;

}

}

4結(jié)束語

本課題的研究目的是實現(xiàn)二維條碼的生成與識別系統(tǒng)設(shè)計,設(shè)計內(nèi)容包括兩部分:二維條碼的生成系統(tǒng)設(shè)計和二維條碼的識別系統(tǒng)設(shè)計。生成系統(tǒng)完成了從輸入數(shù)據(jù)到生成相應(yīng)二維碼的功能,識別系統(tǒng)完成對圖像的自動采集和數(shù)據(jù)編碼解析。

參考文獻:

[1]楊豐盛.Android應(yīng)用開發(fā)揭秘[M].北京:機械工業(yè)出版社,2010:48-50.

[2]劉寧鐘,楊靜宇.基于傅里葉變換的二維條碼識別[J].中國圖像圖形學(xué)報,2011,18(2):45-46.

[3]肖翔,劉曉明,王云柯. QR碼圖像的矯正與定位方法研究[J].計算機科學(xué),2007,23(2):18-20.

[4]谷曉琳,黃明,戚海英.基于遺傳算法的二維QR碼圖像識別[J].大連鐵道學(xué)院學(xué)報,2005,12(3):35-38.

[5]王文豪,張亞紅,全銀,等.QRCode二維條碼的圖形識別技術(shù)[J].計算機技術(shù)與發(fā)展,2009,8(2):40-43.

[6]梁鳳梅.快速識讀QRCode碼[J].電腦開發(fā)與應(yīng)用,2002,12(2):50-55.

猜你喜歡
Android平臺二維碼
可以吃的二維碼
二維碼迷宮
二維碼
童話世界(2020年32期)2020-12-18 18:15:41
讓嚴肅的二維碼呆萌起來
二維碼讓政務(wù)公開更直接
基于Android平臺軟件開發(fā)技術(shù)研究
科技資訊(2016年25期)2016-12-27 18:46:40
基于Android平臺的人臉識別系統(tǒng)設(shè)計與實現(xiàn)
基于Android平臺的健康醫(yī)療APP設(shè)計與開發(fā)
Android手機主題設(shè)計 
基于Android的Python語言英漢維電子詞典設(shè)計與實現(xiàn)
航空| 安阳县| 贵德县| 高阳县| 林西县| 九龙城区| 嵩明县| 黔西县| 文登市| 松滋市| 磴口县| 封开县| 错那县| 滨海县| 黄梅县| 镇坪县| 南宫市| 惠安县| 康定县| 花莲市| 永和县| 镇赉县| 五家渠市| 盱眙县| 海淀区| 镇原县| 南部县| 广水市| 孙吴县| 邯郸市| 潞西市| 桐乡市| 罗甸县| 商水县| 留坝县| 瑞金市| 叶城县| 马龙县| 黑山县| 富裕县| 鄂伦春自治旗|