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