陳龍 劉怡俊 張彩英
摘要:為加快條碼識讀器技術的發展,研制一款基于異構多核的圖像型條碼識讀器,集成了光源、鏡頭、CCD圖像采集、FPGA邏輯管理、ARM處理器、讀碼算法和通信等功能的嵌入式圖像處理系統。復雜背景下的條碼圖像通過圖像采集裝置采集后,然后利用嵌入式的機器視覺處理技術進行任意方向的多個條碼區域自動定位和識別,實驗表明有效提高條碼讀取效率。
關鍵詞:條碼;圖像采集;嵌入式
中圖分類號:TP393 文獻標識碼:A 文章編號:1009-3044(2019)06-0257-02
1引言
條形碼技術在我國各地廣泛應用,隨著工業的快速發展,條形碼技術發展與其他技術相互融合,相互促進,使其可應用到更多場合。近年來,條形碼技術與以嵌入式設備為代表的移動計算技術、電子商務的結合都顯示出巨大的發展潛力和廣闊的市場前景。本文提出基于嵌入式的條碼智能識讀器的方案,該方案性價比高,可擴張性強,在實際應用中具有重要意義。
2 總體結構
研制一款基于異構多核的圖像型條碼識讀器,集成了光源、鏡頭、CCD圖像采集、FPGA邏輯管理、ARM處理器、讀碼算法和通信等功能的嵌入式圖像處理系統。通過圖像采集裝置采集復雜背景下的條碼圖像,然后利用嵌入式的機器視覺處理技術進行任意方向的多個條碼區域自動定位和識別,具體包括圖像預處理(含去噪、圖像分割)、條碼定位、條碼旋轉、條碼解析等過程,有效提高條碼讀取效率。
2.1 系統整體框圖
2.2 軟硬件協同設計流程
2.3軟硬件數據傳輸設計
通過對軟硬件中不同的接口互聯選擇,實現硬件加速數據處理,主要步驟如下:
(1)利用ARM的預先存儲待處理的圖像數據至DDR中;
(2)通過數據通道將DDR中的圖像數據傳送至FPGA中;
(3)使用FPGA進行圖像處理算法設計;
(4)通過數據通道將FPGA處理之后數據送回至DDR;
(5)ARM將處理之后的圖像數據讀出。
3 Zynq設計
項目以異構多核處理器為核心,采用All Programmable嵌入式處理技術,建立小型智能視覺系統架構,滿足嵌入式圖像采集、處理、識別等需求。基于軟硬件協同設計的圖像數據實時高速采集。
項目采用的開發板是型號為MIZ-702的 ZYNQ-7000,該開發板是一款高性能SOC開發板, XC7Z020CLG484 作為CPU,由美國 XILINX 公司所開發。硬件上它設計了ARM Cortex-A9 雙核,包含512MB內存、外部存儲器接口和一套豐富的I/O 外設。
4 IP包設計
Zynq-7000 AP系列有種類豐富的軟IP核,由Xilinx提供。這些核在性能和硬件占據的面積上都做了優化。類似FIFO和算術運算這樣的基本模塊,核的功能都能涵蓋。一直到完整的像MicroBlaze處理器核這樣的功能性處理模塊。
4.1 IP集成
Vivado Design Suite提供了集成IP用的所有工具,同時支持把Xilinx或第三方的IP集成進你的Zynq系統設計中。
5 數據搬運部分VDMA
VDMA數據接口可以分為讀、寫通道,寫通道的作用就是用戶可將AXI-Stream類型的數據流寫入DDR3,讀通道的作用就是從DDR3讀取數據,并輸出AXI-Stream類型的格式。由上分析可知,數據搬運IP其實就是VDMA本質,即為數據進、出DDR3提供了一種便捷的方案。
將數據存入DDR之后,CPU就可以進行一些處理(縮放、裁剪等),然后再送至顯示設備,達到期望的應用目的。
6 軟件設計
6.1 獲取條形碼主程序流程圖
6.1.1 圖像前期處理
在此次圖像預處理中,首先從內存地址中讀取圖像數據,由于條碼是由簡單的黑白條組成,彩色沒有包含所需要的信息,讀取圖像后直接將圖像轉化為8位灰度圖,以提高后面圖像處理的速度,轉化后對圖像進行中值濾波處理,減少噪聲的干擾,至此完成圖像的獲取和簡單前期處理工作。
6.1.2判斷并清除非條碼圖像
首先進行分塊掃描模式,分塊尺寸太大會影響定位精度,太小則增加計算量,選取不合適易導致條碼定位失敗,所選取分塊數量為6,所選取分塊尺寸blockSize = (圖像寬和高的最小值)/6,blockSize分塊尺寸是根據圖像行和列的最小者除于分塊數量來計算的,由下述公式(1)和(2)所示:
如圖4所示,白色區域為非條碼區,邊緣不足以構成分塊的區域默認為非條碼區,非條碼區的圖像都會被清除(灰度值置0),灰色和黑色部分為條碼區,條碼區中心的3個黑色分塊作為條碼傾斜角的決定區域。
為p_block指針申請一片9*6大小的內存,作為記錄每個分塊是否為條碼區的標志, p_block再經過8連通檢查的圖像,清除了孤立分塊,故有細微差別。然后對所得圖像進行灰度梯度掃描操作:在每個分塊的兩條對角線、中豎線和中橫線上作掃描,即在這四條線上檢測連續4個像素之間的灰度差[1],當灰度差的絕對值大于閾值時,標記為一次灰度變化,如下述公式(3)所示:
其中,Vi為第i個像素的梯度量化值 , [|fi+1+fi+fi-1+fi-2|]為連續四個像素之間的灰度,t為 閾值 ,若分塊在某條掃描線上發生超過3次的灰度變化,則認為該方塊可能含有條碼部分,需要保留,否則清除分塊(統一為分塊);最后對所得圖像進行8連通區域檢查,每個分塊都有8個領域分塊,分塊的邊緣除外,統計每個條碼區分塊的鄰域分塊中是條碼區分塊的個數時,若達不到3個,則將該條碼區域分塊視為孤立分塊,孤立分塊是條碼的可能性較小,因此將其標記為非條碼區域,并清除該分塊;
6.1.3 通過亞像素角點檢測確定條碼區域
對圖像進行分塊亞像素級角點檢測,對每個分塊的角點數進行統計,若分塊的角點數小于等于預設閾值,則視為條碼區域.
6.1.4 條碼區域方塊再判斷
根據條碼的條形排列的特點,通過霍夫變換算法進行直線檢測,運用直線的極坐標公式:ρ=хcos(θ)+уsin(θ),其中ρ,θ是一對參數,通過對圖像中的像素點運用該公式處理即可得到二維的ρ,θ參數空間,在參數空間上形成峰值,從而利用該峰值即可檢測出直線;最后將直線檢測和角點檢測的判定結果進行或運算,作為分塊的最終結果,以防止出現誤判。
6.1.5 定位條碼位置
進行多條碼識別可從輪廓面積這一步作為突破口。例如8連通檢查圖和繪制輪廓圖像(輪廓實際為封閉的,因縮放截圖未顯示出來)。再用矩形勾出條形碼的最大輪廓,另外矩形的傾斜角是指條碼中間黑條的傾斜線,如圖11傾斜角是取下圖紅色區域,3個分塊的傾斜角中差值最小的2個角的平均值。最后計算條碼黑條傾斜角,以矩形中心進行原圖像旋轉,截取并保存原圖中所在區域。
6.1.6 zbar條碼識別
調用zbar庫對定位的條碼進行識別,并輸出結果。為了驗證算法的有效性和準確性,采集500張多條碼圖像進行測試,實驗機器配置:WIN 7 64位 ,Core i5,CPU 1.70GHz,內存8GB。測試發現,該算法可以較為有效地減少背景干擾,在較為復雜的背景下和光照稍微不均勻的情況下,算法仍可以檢測出條碼。對于分辨率2592×1944的圖像,平均處理速度為2.23幅/s,根據圖像上條碼的數量,處理時間略有差異。識別率為92.4%,部分條碼無法識別的原因包括光照嚴重不均勻,以及條碼本身質量不佳,缺損等。
7結論
項目采用異構多核架構ZYNQ All Programmable SoC,集成了雙ARM? Cortex?-A9 MPCore?處理器和FPGA可編程邏輯邏輯器件,同時具備軟硬件可重編程功能,有效地降低嵌入式系統開發成本,具有功耗低、風險低、設計靈活等特點。FPGA里面有很豐富的DSP資源,借助先進的Vivado HLS工具,很方便地把以前的C/C++語言的DSP代碼,轉換為硬件描述語言(HDL),利用FPGA進行硬件加速。另外,Cortex-A9內置了Neon/VFP協處理器,提供了強大的DSP處理能力,再結合基于FPGA的硬件加速,可以提供前所未有的DSP性能。實現任意區域任意方向多條碼的智能快速識別。
【通聯編輯:光文玲】