【摘 要】 文中介紹的QR碼識別系統是以自動識別技術為基礎,以QR碼為識別對象,根據Android操作系統,采用二維碼QR碼相關標準來設計的。介紹了二維碼自動識別工作原理,詳細闡述了識讀系統的設計和軟件開發。該系統實現了QR碼的解碼功能,系統滿足時間和準確度的要求,給用戶平時的生活和學習帶來極大的便利。
【關鍵詞】 自動識別 二維碼 Android QR碼
自從一維條碼出現以后,條碼技術得到了飛快的發展,它大大縮短了信息采集和處理的時間,提高了人們的工作效率。但是一維條碼存儲的信息量有限,使得它不得不依靠數據庫來支持。二維條碼的出現則大大改進了一維條碼的缺點。它是在一維條碼基礎上發展形成的,與一維條碼相比,它存儲的數據量比較大,不僅可以儲存數字,而且還可以存儲多種文字,它具有數據糾錯和信息加密的功能,擁有更為廣闊的使用前景。
隨著智能手機內存不斷的增大,功能的不斷增強,越來越多的應用可以在手機上得以實現。利用手機來識別二維條碼,可以解決手機用戶輸入的繁瑣過程,這不僅方便了用戶的使用,而且也使手機得到了更廣泛的應用。
1 QR碼簡介
QR條碼又稱快速響應矩陣碼,是由日本Denso-Wave公司于1994年成功發明的一種二維碼。QR碼呈現正方形形狀,只有黑白兩色,在條碼的3個角落,有三個“回”字形的定位區域。QR條形碼常見于日本,是目前日本最流行的二維條碼。我國于2000年也發布了QR碼的國家標準,并在次年7月1日正式施行。
QR碼除了擁有其他二維碼所擁有的信息量大、糾錯能力強、可靠性高、能表示漢字和圖像等信息、可靠性高等優點之外,QR碼還具有以下特性:(1)具有全方位識讀的特點;(2)具有快速識讀的特點;(3)能夠有效地表示中國漢字。
2 Android簡介
Android是Google于2007年11月5日推出的,它是一個基于Linux平臺的開源智能手機操作系統,主要使用于便攜設備,是一款開放的手機操作系統。目前,Android迅速成為了最主流的手機操作系統之一。
Android的系統架構采用了分層的架構。android分為四個層,分別是應用程序層、應用程序框架層、系統運行庫層和Linux內核層,它擁有獨立操作系統、個性化用戶界面、中間件和應用軟件,最終實現真正開放并且完整的移動軟件。
3 系統設計
QR碼的識別主要用來解析二維碼所存儲的內容。具體步驟是通過手機的攝像頭對二維碼進行掃描,然后將掃描結果傳遞到后臺進行解析,如果解析成功后,就不再進行掃描。如果解析不成功,就會提示解析失敗。系統解析QR碼的流程如圖1所示。
圖1 系統解析QR碼流程圖
在采集二維碼的過程中很有可能會產生噪聲,所以在對二維碼解析前要對圖像進行預處理,這樣可以提高二維碼的解析速度,然后從預處理后的圖像中提取存儲信息。圖像預處理主要包括以下幾個步驟:
(1)對獲取到的圖像進行灰度化處理,目的是將獲得的彩色照片轉換為灰度照片,以便下面能夠更好地對圖像進行預處理工作。
(2)中值濾波處理。將之前獲得的灰度圖像進行中值濾波,去掉圖像中的噪聲。
(3)二值化。將灰度圖像通過二值化的方法轉換為二值圖像,這樣有利于提取QR碼的輪廓。
4 系統實現
(1)系統開發環境
本系統以小米手機作為實驗設備,集成開發環境是Eclipse,Android版本4.2.2。
(2)圖像采集實現
在對二維碼進行識別的過程中,第一步就是要對二維碼圖像進行采集。我們可以通過控制手機攝像頭的方式來對二維碼進行掃描,然后保存采集后的圖像。在Android系統中,可以通過類Camera來實現對攝像頭的控制和使用。
●獲取攝像頭實例:
Camera mCamera = Camera.open();
●設置攝像頭的參數:
Camera.Parameters parameters = mCamera.getParameters();//獲取攝像頭的參數
mCamera.setParameters(parameters);//修改攝像頭的參數以后,將參數回傳給實例mCamera。
●攝像頭預覽:
mCamera.startPreview();
●獲取圖像數據:
在Android系統中可以通過實現Camera類的PreviewCallback回調函數接口來獲取每一幀的圖像。
Camera.PreviewCallback mPreviewCallback = new Camera.PreviewCallback()
{
public void onPreviewFrame(byte[] data,Camera camera )
{//對圖像數據進行灰度化、濾波和二值化處理}
};
(3)自動對焦實現
自動對焦的功能能夠使攝像頭更容易的獲得比較清晰的二維碼圖像,使系統在識別二維碼的時候更加容易和迅速。在Android中,可以通過實現Camera.AutoFocusCallback接口來實現自動對焦的功能。
自動對焦能在攝像頭對焦的瞬間獲得比較清晰的圖像,這在識別過程中是很重要的,它能夠使二維碼快速的被識別。在Android SDK平臺下,提供了Camera.AutoFocusCallback的接口,要想實現自動對焦,就要實現其接口函數。自動對焦的實現步驟如下:
private Camera.AutoFocusCallback mAutoFocusCallBack = new Camera.AutoFocusCallback() {
public void onAutoFocus(boolean success, Camera camera) {
if (success) {
mCamera.setOneShotPreviewCallback(previewCallback);
}
}
};
這時還沒完全實現自動對焦,因為我們沒有對mAutoFocusCallback進行使用,在這里,為了用戶使用的方便,我們通過定時來實現自動對焦,即每隔一段時間自動對焦一次,這樣就更加能夠保證圖像的清晰度了。
5 系統實現結果
二維碼掃描和識別結果如圖2和圖3所示。
圖2 二維碼掃描界面
圖3 二維碼識別界面
6 結語
本文設計并實現了基于Android系統的QR碼識別系統,該系統實現了QR碼的解碼功能,經過測試表明,系統能夠滿足時間和準確度的要求。該系統的使用,可以給用戶平時的生活和學習帶來極大的便利。