《電子技術應用》
您所在的位置:首頁 > 通信與網絡 > 設計應用 > 基于WinCE平臺的QR條碼識別系統
基于WinCE平臺的QR條碼識別系統
維庫開發網
摘要: 簡單介紹了QR碼的基本結構,分析了在基于WinCE的嵌入式平臺上QR碼圖像數據的灰度化、濾波、二值化、定位及矯正等預處理的實現過程。重點討論了系統在WinCE平臺上如何實現實時圖像采集的問題,并設計了一個基于WinCE手機移動平臺的QR碼識別系統。
Abstract:
Key words :

引言

目前,條碼技術,尤其是二維條碼技術應用廣泛。2006 年, 中國移動正式推出了手機二維條碼業務,主要應用于移動增值服務。2009年,鐵道部門正式用QR碼取代一維條碼應用于火車票票據的檢測。可以預見隨著3G時代的到來、現代物流業的發展以及物聯網的推廣,條碼識別和應用必將得到全面的飛速發展。

1  QR碼簡介

QR碼是由日本Denso公司于1994年9月研制的一種矩陣二維條碼符號。它具有信息容量大、可靠性高、可表示文字圖像等多種信息、保密防偽性強等優點,還具有高速全方位識讀、能有效表示中國漢字與日本漢字等主要特點。如圖1所示,每個QR碼符號由編碼區域和功能圖形組成,其*能圖形包括位置探測圖形、分隔符和校正圖形。

圖1  二維條碼QR碼

2  系統總體設計

2.1  系統硬件結構

圖2  WinCE硬件架構

本系統采用基于WinCE嵌入式的智能手機為硬件平臺,其硬件結構如圖2所示。主處理器DSP上外接攝像頭控制器、LCD控制器、SRAM控制器、通用GPIO口、UART口等。攝像頭完成圖像數據的采集后,系統會在SRAM中創建一片視頻幀緩沖區,通過Allocator組件來進行動態管理,將捕捉到的圖像一路傳給主處理器DSP進行圖像實時處理,另一路傳給LCD控制器進行圖像的預覽。主處理器負責主界面的顯示/條碼的實時識別和解碼,以及輸入信息的處理。

2.2  系統軟件流程

系統軟件在基于WinCE 6.0的Windows Mobile 5.0 Pocket PC和Windows Mobile 5.0 SmartphONe平臺上使用C++語言實現。軟件主要分為圖像采集模塊、圖像預處理模塊、識別解碼模塊和應用模塊4個模塊。圖像采集模塊主要完成條碼圖像的采集,一方面通過攝像頭進行數據采集實時解碼,另一方面把采集的圖像數據送屏幕顯示。圖像預處理模塊主要是對采集的QR碼圖像進行預處理,包括灰度化、中值濾波、二值化等,為識別解碼做好前期準備工作。識別解碼模塊主要功能包括QR條碼的檢測、定位、分割、識別以及條碼解碼。應用模塊主要包括發送郵件、撥打電話、訪問網址、存儲條碼信息和短信應用等。軟件流程如圖3所示。

圖3  軟件設計流程

3  QR碼識別解碼的核心算法

考慮到QR碼圖像的特點、嵌入式平臺的處理速度、條碼本身的污染扭曲,以及在圖像采集過程中光照不均、抖動等因素,QR碼識別解碼的基本過程是:首先對采集的彩色圖像進行灰度化、濾波、二值化,接著在二值化圖像中掃描QR碼圖像,將其從圖像中分割出來,進行解碼。

3.1圖像灰度化、濾波與二值化選取彩色圖像的G值(綠色分量)為灰度圖像I(x,y)的值,并使用中值濾波去噪聲。二值化采用OSTu算法計算閾值。Ostu算法效果好,但計算量比較大,可將圖像分成7×7個小分塊,對每一個小分塊使用Ostu算法計算閾值從而來降低時耗。

3.2  條碼檢測、定位及矯正

在獲取QR碼圖像數據時,可能會因為拍攝角度等原因造成圖像幾何失真,例如獲取的QR碼圖像為任意四邊形,則須對失真圖像進行反透視變換[4]。變換算法如圖4所示。

圖4  反透視變換

(u,v)是失真圖像的坐標,(x,y)是基準圖像的坐標,A′B′C′D′為任意四邊形,ABCD為矯正后的正方形,則對于u、v坐標系A′B′C′D′任意四邊形中的任意一點(u,v),對應在x、y坐標系上的點(x,y),可通過轉換公式

計算獲得。通過已知四組點得到8個待定系數A、B、D、E、F、H、M、N,然后進行透視矯正。

根據QR碼標準定義,QR碼符號含有3個相同的位置探測圖形。每個位置探測圖形由3個重疊的同心正方形組成,其模塊寬度比為1∶1∶3∶1∶1。其他地方遇到類似圖形的可能性極小,因此可以在得到的二值化圖像中迅速地識別可能的QR碼符號,完成對條碼的檢測與定位[5]。但是,在對條碼進行矯正時,需要知道4個頂點。通過定位3個位置探測圖形可獲得其中3個頂點,利用下面基于QR碼紋理特征的算法來尋找第4個頂點。

首先根據已經得到3個頂點的位置,可以確定QR碼符號的兩條邊界,及其邊界直線斜率θ1、θ2,然后舍去其交叉的頂點。對于剩下的兩個頂點,分別利用它作為直線上的一點,以一定范圍的角度(-θ,θ)進行搜索來尋找條碼邊界,依據是包含條碼跳數(黑塊與白塊交替一次稱為一跳)最多的直線即為條碼的邊界。通過這種方法可以找出需要的另外兩條邊界,其交點即為第4個頂點。知道4個頂點以后,通過反透視變換將其矯正到正確位置,如圖5所示。旋轉后會產生鋸齒邊界,這里利用雙線性插值對圖像進行平滑處理[6]。對相鄰的4 個像素進行插值,其單位正方形上任意一點f (x, y) 有:

在編程實現時,反透視變換和雙線性插值同時進行。分割出QR碼后進行解碼,其解碼過程不是本文重點,不再詳細闡述。

圖5  反透視變換

4  圖像采集子系統

4.1  DirectShow體系結構

DirectShow是微軟公司在ActiveMovie和Video for Windows的基礎上推出的新一代基于COM的流媒體處理的開發包。其系統架構圖如圖6所示。DirectShow通過過濾器圖表管理器(Filter Graph Manager)來與上層應用程序和下層的驅動進行聯系。應用程序可以通過Filter Graph Manager提供的一組組件對象模型接口來訪問過濾器或者控制多媒體數據流,例如控制數據幀率、圖像大小、圖像質量等等。在本系統中采用COM組件來訪問DirectShow中的過濾器,從而獲得QR碼圖像數據。

圖6  DirectShow系統架構圖

4.2  QR碼圖像采集

4.2.1  編寫處理QR碼圖像數據的Filter

通過DirectShow提供的視頻采集Filter來驅動攝像頭以獲得視頻幀。在采集到圖像數據后編寫處理QR碼圖像數據的Filter,它調用預處理與識別解碼模塊進行數據處理。編寫一個Filter主要包括兩個方面:選擇一個合適的父類和應用結構設計。這里選擇CTransformFilter作為Filter的父類。對于應用結構的設計,在重寫CTransformFilter∶∶Transform()函數時產生一個線程來調用預處理與識別解碼模塊,這樣使得編寫的Filter結構清晰、可擴展性良好。

4.2.2  構建Filter Graph

首先創建一個Filter Graph,再根據Filter各自的GUID號來創建不同的Filter對象,并調用Filter Graph的接口AddFilter把這些Filter一一加入Filter Graph中。然后利用Capture Graph Builder對象提供的IcaptureGraphBuilder2接口將所有Filter“串聯”起來,從而構建一個完整的Filter Graph數據流。下面為構建Filter Graph的主要步驟及關鍵源代碼。

① 創建并初始化Filter Graph Manager組件對象。CoCreateInstance(CLSID_FilterGraph,0,CLSCTX_INPROC_SERVER,IID_IGraphBuilder, (VOID**)&m_pGraphBuilder);CoCreateInstance (CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC_SERVER, IID_ICaptureGraphBuilder2, (VOID**)&m_pCaptureGraphBuilder);m_pCaptureGraphBuilder﹥SetFiltergraph(m_pGraphBuilder);

② 創建視頻采集Filter對象,并添加進Filter Graph中,其他Filter類似。

m_pSourceFilter.CoCreateInstance (CLSID_VideoCapture);

m_pGraphBuilder﹥AddFilter (m_pSourceFilter, L"Video capture source");

③ 將編寫好的處理QR碼圖像數據的Filter也加入其中。

pTransFilter.CoCreateInstance(CLSID_CamTransform);

m_pGraphBuilder﹥AddFilter(pTransFilter,L"Transform");

④ 將添加的各個Filter“串聯”起來,形成一個完整的數據流。

m_pCaptureGraphBuilder﹥RenderStream (&PIN_CATEGORY_CAPTURE,&MEDIATYPE_Video,m_pSourceFilter, m_pTransFilter,NULL));

4.2.3  自動對焦

在使用攝像頭進行取像的過程中,有可能發生抖動現象,圖像會變得模糊。使攝像頭自動對焦,從而獲得更為清晰的圖像數據,對快速準確識別QR碼至關重要。WinCE 6.0和Windows Mobile 5.0及更高版本均支持自動對焦。在本系統中,主要步驟及關鍵源代碼如下:

① 獲取攝像頭控制接口。

m_pCaptureGraphBuilder﹥FindInterface (&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video,m_pSourceFilter, IID_IAMCameraControl, (VOID **) &pCamConfig);

② 設置自動對焦。

pCamConfig﹥Set (CameraControl_Zoom, iDefault, CameraControl_Flags_Auto);

以上步驟描述了WinCE嵌入式設備的攝像頭采集圖像數據的過程,構建好Filter Graph后即可通過攝像頭采集QR碼圖像。

結語

本文分析研究了QR碼的檢測和識別技術,討論了在WinCE移動平臺上實現QR碼識別系統的技術問題(主要是如何實現QR圖像實時采集),并結合數字圖像處理技術在WinCE手機移動平臺上進行了QR碼識別系統的開發。本系統在多普達585 和HTC P600上進行了測試。測試表明,該系統可以快速準確地檢測出QR碼圖像,在多普達585(CPU為OMAP850,主頻195 MHz,64 MB RAM,圖像分辨率為320×240)上解碼平均耗時約450 ms,只有對極少數本身污染特別嚴重的條碼不能識別。目前,本系統軟件已經成功推向市場。


 

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 成人丝袜激情一区二区 | 成人男女网18免费看 | 日韩免费一级a毛片在线播放一级 | 久久久久久久国产精品毛片 | 亚洲精品韩国美女在线 | 日本三级欧美三级 | 免费观看欧美一级毛片 | 久久久精品久久久久久久久久久 | 久久久久免费 | 国产日韩精品视频一区二区三区 | 欧美日韩一区二区在线观看视频 | 中文字幕在线观看亚洲日韩 | 久久久久久久99视频 | 国产精品久久久免费视频 | 男女超猛烈啪啦啦的免费视频 | 国产日韩在线看 | 久久99久久成人免费播放 | 欧美a级完整在线观看 | cekc欧美| 成人福利网站在线看视频 | 免费视频毛片 | 乱淫网站| 国产亚洲人成在线影院 | 天天精品在线 | 亚洲bt欧美bt国产bt | 深夜成人性视频免费看 | 国产午夜爽爽窝窝在线观看 | 一国产一级淫片a免费播放口 | 九九九精品 | 国产成人综合网在线观看 | 亚洲免费网 | 久久精品九九 | 欧美亚洲国产激情一区二区 | 国产成人精品免费午夜 | 国产成人精品一区二三区 | 亚洲清纯自偷自拍另类专区 | 国产成人免费片在线观看 | 手机看片神马午夜 | 国产精品视频免费一区二区三区 | 成年人在线免费观看视频网站 | 国产一级特黄aaa大片 |