• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

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

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

      馬鳴 李海波

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

      關鍵詞:二維碼;二維碼生成;二維碼識別;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

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

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

      1系統(tǒng)相關技術分析

      1.1 Android系統(tǒng)架構

      Android是一種以Linux為基礎的開放源代碼操作系統(tǒng),主要使用于便攜設備。Android的系統(tǒng)架構采用了分層的架構。android分為四個層,分別是應用程序層、應用程序框架層、系統(tǒng)運行庫層和 linux內核層。隨著Android的快速發(fā)展,如今已允許開發(fā)者使用多種編程語言來開發(fā)Android應用程序,而不再是以前只能使用Java開發(fā)Android應用程序的單一局面,因而受到眾多開發(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)境需要搭建。

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

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

      2系統(tǒng)的設計

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

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

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

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

      2.2二維碼的生成設計

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

      2.3二維碼的識別設計

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

      3系統(tǒng)的實現

      3.1二維碼生成的實現

      二維碼的生成主要是靠官方相應的編碼包,將用戶輸入字符轉換成二維數組,然后根據二維碼的編碼規(guī)范,使用繪圖功能將二維碼進行繪制。二維碼的生成主要分為名片、短信、文本、電子郵件、網絡書簽的生成。需要有相應的框架使程序與用戶進行交互,使用戶有選擇自己想要生成的類型,然后就是用戶將自己想編輯的信息輸入到系統(tǒng)內,系統(tǒ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二維碼識別的實現

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

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

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

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

      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結束語

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

      參考文獻:

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

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

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

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

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

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

      猜你喜歡
      Android平臺二維碼
      可以吃的二維碼
      二維碼迷宮
      二維碼
      童話世界(2020年32期)2020-12-18 18:15:41
      讓嚴肅的二維碼呆萌起來
      學生天地(2017年10期)2017-05-17 05:50:46
      二維碼讓政務公開更直接
      人大建設(2017年5期)2017-04-18 12:57:43
      基于Android平臺軟件開發(fā)技術研究
      科技資訊(2016年25期)2016-12-27 18:46:40
      基于Android平臺的人臉識別系統(tǒng)設計與實現
      基于Android平臺的健康醫(yī)療APP設計與開發(fā)
      Android手機主題設計 
      軟件導刊(2016年9期)2016-11-07 18:34:46
      基于Android的Python語言英漢維電子詞典設計與實現
      象州县| 湄潭县| 类乌齐县| 中宁县| 肇庆市| 大余县| 招远市| 京山县| 旬邑县| 绥滨县| 奉贤区| 涞源县| 泰来县| 方山县| 阜平县| 尉犁县| 荃湾区| 周至县| 阳信县| 会理县| 连南| 收藏| 观塘区| 曲麻莱县| 郴州市| 正安县| 绍兴县| 巴彦县| 扬州市| 东乡族自治县| 新丰县| 周宁县| 锡林浩特市| 安仁县| 阳朔县| 桂平市| 襄城县| 垣曲县| 毕节市| 肇东市| 大关县|