當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]基于NiosII的二維條碼識(shí)別系統(tǒng)設(shè)計(jì)

摘要 隨著SOPC技術(shù)的日益成熟,基于SoPC技術(shù)的嵌入式系統(tǒng)得到廣泛應(yīng)用。本文采用SOPC技術(shù),以EP2C35為主控芯片,實(shí)現(xiàn)二維條碼識(shí)別系統(tǒng)的設(shè)計(jì),并提出一種適用于嵌入式系統(tǒng)的PDF417條碼識(shí)別算法。實(shí)驗(yàn)表明,該識(shí)別系統(tǒng)能夠快速準(zhǔn)確地識(shí)別二維條碼,效果良好。
關(guān)鍵詞 SOPC 二維條碼 PDF417 嵌入式系統(tǒng) NiosII


    二維條碼PDF417中PDF為Portable Data File的縮寫(xiě),每一個(gè)PDF碼的儲(chǔ)存量可高達(dá)1 108字節(jié),若將數(shù)字壓縮則可存放2 729字節(jié)。作為一種新的信息存儲(chǔ)和傳遞技術(shù),PDF417具有成本低、信息可隨載體移動(dòng)、不依賴于數(shù)據(jù)庫(kù)和計(jì)算機(jī)網(wǎng)絡(luò)、保密防偽性能強(qiáng)等優(yōu)點(diǎn),廣泛應(yīng)用在國(guó)防、公共安全、交通運(yùn)輸、醫(yī)療保健、工業(yè)、商業(yè)、金融、海關(guān)及政府管理等領(lǐng)域,PDF417碼的例子如圖1所示。

                                           

1 系統(tǒng)總體設(shè)計(jì)
    本系統(tǒng)在FPGA上使用SOPC技術(shù)來(lái)實(shí)現(xiàn)無(wú)線手持二維條碼識(shí)讀器,與傳統(tǒng)一維條碼識(shí)讀器最大的區(qū)別在于完全脫離后臺(tái)數(shù)據(jù)庫(kù),以及在高達(dá)50%破損率的情況下能夠進(jìn)行高效率識(shí)別。
    SOPC技術(shù)是一種基于FPGA解決方案的SOC,由美國(guó)Altera公司于2000年提出?;赟OPC平臺(tái)的開(kāi)發(fā)結(jié)合了FPGA靈活可編程與片上。NioslI軟核處理器的用戶可配置等特點(diǎn)。在實(shí)現(xiàn)某功能時(shí),通過(guò)在NiosII處理器下編寫(xiě)C程序運(yùn)行,也可以使用硬件模塊來(lái)加速。本系統(tǒng)綜合兩種實(shí)現(xiàn)思路,采用高性價(jià)比的Cyclone II EP2C35系列FPGA實(shí)現(xiàn),系統(tǒng)總體結(jié)構(gòu)如圖2所示。

                                   

    整個(gè)系統(tǒng)由低到高分為三個(gè)層次:條碼識(shí)別的硬件平臺(tái)、μC/OS—II操作系統(tǒng)、條碼譯碼核心算法。最底層硬件平臺(tái)采用Altera公司的Cylone II EP2C35與ADI公司的視頻解碼芯片ADV7181B,具有8 MB的Flash存儲(chǔ)器,1.MB的SRAM等外設(shè);中間層μC/OS—II操作系統(tǒng)提供任務(wù)調(diào)度和設(shè)備驅(qū)動(dòng),以及提供各種中斷來(lái)實(shí)現(xiàn)對(duì)外界請(qǐng)求的響應(yīng),如模式切換、LCM.顯示、射頻傳送等,有效地提高了系統(tǒng)運(yùn)行速率;最頂層條碼譯碼核心算法包括了對(duì)條碼圖像的預(yù)處理和對(duì)譯碼數(shù)據(jù)的RS糾錯(cuò),采用C語(yǔ)言在NiosII的集成開(kāi)發(fā)環(huán)境中(IDE)實(shí)現(xiàn)。[!--empirenews.page--]
1.1 系統(tǒng)硬件結(jié)構(gòu)
    系統(tǒng)通過(guò)配置視頻采集芯片ADV7181B,通過(guò)圖像采集子系統(tǒng)將CCD采集到的條碼數(shù)據(jù)存儲(chǔ)在SRAM中后,產(chǎn)生硬件中斷,處理器響應(yīng)中斷,Nios對(duì)SRAM中的數(shù)據(jù)進(jìn)行圖像預(yù)處理、譯碼及糾錯(cuò),通過(guò)譯碼算法硬件加速模塊對(duì)耗時(shí)較多部分算法進(jìn)行優(yōu)化,在實(shí)現(xiàn)條碼數(shù)據(jù)譯碼及糾錯(cuò)后,產(chǎn)生射頻傳送和LCM顯示中斷,進(jìn)入中斷程序?qū)⒆g碼數(shù)據(jù)通過(guò)射頻傳輸模塊發(fā)送到上位機(jī),并且在LCM實(shí)時(shí)顯示。其硬件平臺(tái)結(jié)構(gòu)原理如圖3所示。

                              

1.2 圖像采集子系統(tǒng)
    由于本設(shè)計(jì)采用的是灰度圖,因此圖像采集子系統(tǒng)的主要功能是:配置采集芯片,從解碼芯片讀出數(shù)據(jù)流,根據(jù)行場(chǎng)同步信號(hào)對(duì)數(shù)據(jù)流進(jìn)行分離,提取出亮度信號(hào),并將采集到的亮度信號(hào)通過(guò)乒乓緩存存入SRAM中。
    在設(shè)計(jì)中,采用ADI的解碼芯片ADV7181B進(jìn)行圖像信號(hào)的數(shù)模轉(zhuǎn)換,F(xiàn)PGA中的I2C模塊是作為主設(shè)備來(lái)對(duì)ADV7181B進(jìn)行配置的,而ADV7181B作為從設(shè)備來(lái)接受I2C總線傳來(lái)的數(shù)據(jù),實(shí)現(xiàn)芯片的初始化、寄存器的配置等。圖4中T_DA為數(shù)據(jù)信號(hào),TD_VS為場(chǎng)同步信號(hào),TD_HS為行同步信號(hào)。
    系統(tǒng)上電時(shí),I2C配置模塊將對(duì)ADV7181B的內(nèi)部寄存器進(jìn)行配置,ADV7181B將模擬信號(hào)轉(zhuǎn)換為Y:U:V為42:2:2的8位CCIR656數(shù)字信號(hào),其中輸出的時(shí)序包括行場(chǎng)同步、行場(chǎng)消隱、行頻場(chǎng)頻及場(chǎng)識(shí)別等信號(hào)。

                         

    CCD攝像頭采集的圖像實(shí)際尺寸為768×576像素,每幀圖像由奇場(chǎng)數(shù)據(jù)和偶場(chǎng)數(shù)據(jù)交錯(cuò)組合而成,奇場(chǎng)數(shù)據(jù)與偶場(chǎng)數(shù)據(jù)在時(shí)間上是先后輸入的。本設(shè)計(jì)使用的是320×240的液晶顯示屏,在處理過(guò)程中也采用的是320×240的圖片格式,所以要對(duì)攝像頭采集的圖片進(jìn)行提取。在設(shè)計(jì)中僅采奇場(chǎng)數(shù)據(jù)的中間240行,并對(duì)每行中間的640個(gè)數(shù)據(jù)每?jī)蓚€(gè)像素抽取一個(gè)像素,從而得到符合系統(tǒng)要求的圖像大小。由于一幀圖像的奇場(chǎng)數(shù)據(jù)與偶場(chǎng)數(shù)據(jù)實(shí)際上非常接近,而每行的相鄰兩個(gè)像素值也幾乎沒(méi)有差異,因此可以得到原輸入圖的縮小圖像而不會(huì)有失真。
    圖像存入SRAM采用了乒乓緩存,如圖5所示,是為了防止寫(xiě)出速度快于寫(xiě)入速度而導(dǎo)致出現(xiàn)錯(cuò)誤數(shù)據(jù)。采用兩個(gè)行緩存進(jìn)行乒乓切換,在數(shù)據(jù)提取子模塊向行A寫(xiě)入數(shù)據(jù)時(shí),數(shù)據(jù)寫(xiě)出子模塊讀取行緩存B中的數(shù)據(jù)輸出到總線;在對(duì)下一行進(jìn)行采集時(shí),對(duì)行緩存A讀數(shù)據(jù),對(duì)行緩存B寫(xiě)數(shù)據(jù)。因此行緩存寫(xiě)路選器與行緩存讀路選器在同一時(shí)刻選通的一定是不同的行緩存。

                                           [!--empirenews.page--]

2 條碼識(shí)別核心算法
    條碼譯碼主要流程是首先對(duì)條碼進(jìn)行自適應(yīng)二值化,然后對(duì)條碼進(jìn)行定位、旋轉(zhuǎn)、分割。分割出單個(gè)碼字后,通過(guò)邊緣檢測(cè),得到條碼條空序列模塊寬度后,再進(jìn)行糾錯(cuò)解碼。
    傳統(tǒng)條碼識(shí)別算法在對(duì)條碼定位時(shí)多采用Hough變換,通過(guò)Hough變換提取條碼圖像中的直線傾角來(lái)旋轉(zhuǎn)條碼。但是Hough變換的大運(yùn)算量并不適用于實(shí)時(shí)性要求高的的嵌入式設(shè)備。筆者結(jié)合PDF417條碼自身的特點(diǎn),采用4點(diǎn)定位的方法來(lái)分割條碼,有效提高條碼識(shí)別速度。核心算法流程詳細(xì)步驟如下:
    (1)條碼定位
    實(shí)際采集條碼時(shí)會(huì)出現(xiàn)各種傾斜,如圖6所示。如何定位條碼是關(guān)鍵的問(wèn)題??梢岳脳l碼起始頭特有的比例來(lái)定位。按照國(guó)標(biāo)的定義,PDF417二維條碼的起始符黑白條空比是81111113,終止符黑白條空比是711311121。掃描圖像的每一行,分別匹配起始符和終止符的條空比??紤]到條碼采集過(guò)程中,邊緣受高斯點(diǎn)擴(kuò)展函數(shù)的影響,只要黑白條空比例的誤差不超過(guò)三位,可近似認(rèn)為符合比例。標(biāo)記所有符合起始符條空比比例條碼線段,可以得到4個(gè)控制點(diǎn)a、b、c、d,用同樣的方法可以尋找符合終止符條空比的條碼線段,確定點(diǎn)e、f、g、h。判斷a、c、e、g是否為正確控制點(diǎn)的標(biāo)準(zhǔn)是,平行邊長(zhǎng)度誤差在5個(gè)像素點(diǎn)內(nèi),且相鄰邊角度為90°,其誤差角度為2°。

                                              
    (3)行條碼分割及行高確定
    由于PDF417條碼是層疊式條碼,在對(duì)單行條碼碼字進(jìn)行識(shí)別時(shí),必須得到條碼的行數(shù),然后分離出每一行。首先對(duì)條碼使用Sobel算子進(jìn)行水平邊緣檢測(cè),如圖7所示,然后向水平方向投影,如圖8所示。

                                       

    已知p(x)對(duì)應(yīng)投影的峰值,也就條碼的邊界,通過(guò)對(duì)投影下來(lái)的每個(gè)值求一次差分▽ p(x),然后逐個(gè)判斷各個(gè)差分值,如果連續(xù)兩個(gè)投影的差分值前一個(gè)是負(fù)數(shù)而后一個(gè)是0或者正數(shù),則說(shuō)明此點(diǎn)是峰值。峰值處的坐標(biāo)即為條碼分層的地方,考慮到條碼層與層連接的地方在二值化時(shí)會(huì)出現(xiàn)噪點(diǎn),則取每層條碼圖像中間的50%作為有效圖像。
    (4)碼字識(shí)別
    分割出單個(gè)碼字后,得到條空的像素個(gè)數(shù),記為{M1,M2,…,M8},因?yàn)?個(gè)條和4個(gè)空的總模塊數(shù)為17,可以根據(jù)式(1)得出條模塊數(shù)的集合{T1,T2,T3,T4)。同樣,用Ki替代式(1)中的Ti,可得到空模塊數(shù)的集合{K1,K2,K3,K4}。


    
    因PDF417條碼用了三個(gè)簇的數(shù)據(jù)來(lái)組成一個(gè)條碼,三個(gè)簇的數(shù)據(jù)量較大,且每個(gè)簇中的數(shù)據(jù)與條空比無(wú)一致對(duì)應(yīng)關(guān)系,所以就涉及把條空比轉(zhuǎn)換成條碼數(shù)據(jù)的問(wèn)題。本算法采用的解決方案是:用哈希算法來(lái)查找:
    F=Z×1400+K2×216+T3×36+K4×6+T (2)
    式(2)中Z為空1模塊數(shù)和條2模塊數(shù)的組合,再利用F的值進(jìn)行查找,實(shí)現(xiàn)數(shù)據(jù)流的譯碼。數(shù)據(jù)流譯碼不是本文重點(diǎn),這里不再詳細(xì)闡述。

[!--empirenews.page--]
3 系統(tǒng)軟件設(shè)計(jì)
    系統(tǒng)軟件是在Nios II的μC/OSII操作系統(tǒng)下進(jìn)行C語(yǔ)言編程的。系統(tǒng)初始化主要包括對(duì)采集芯片、射頻傳輸控制模塊、網(wǎng)絡(luò)接口的初始化,整個(gè)系統(tǒng)動(dòng)態(tài)掃描條碼圖像和實(shí)時(shí)譯碼。系統(tǒng)主要流程如圖9所示。其中,系統(tǒng)初始化時(shí)利用函數(shù)IOWR(SIGNAL_CAP_O_BASE,O,1)將采集模塊全局信號(hào)復(fù)位,然后使用函數(shù)alt_irq_register。(SIGNAL_CAP_0_IRQ,NULL,sig_cap_irq_proc)來(lái)建立一個(gè)用戶中斷程序,對(duì)按鍵中斷響應(yīng)進(jìn)入中斷服務(wù)程序sig_cap_irq_proc,向攝像頭發(fā)送采集指令。當(dāng)采集模塊完成一幅條碼圖像采集后,產(chǎn)生一個(gè)硬件中斷,將標(biāo)志FLAG置1。當(dāng)主循環(huán)程序判斷FLAG為1時(shí),就可以從外擴(kuò)的SRAM中將圖像數(shù)據(jù)讀入SDRAM中,接著進(jìn)行圖像預(yù)處理和譯碼,其中包括用自定義用戶指令和硬件模塊實(shí)現(xiàn)的一些運(yùn)算量大的部分。射頻傳輸與NiosII的PIO口相連,通過(guò)函數(shù)IOWR_ALTERA_AVALON_PIO_DA_TA來(lái)實(shí)現(xiàn)。

                                            
4 實(shí)驗(yàn)與分析
    本識(shí)別系統(tǒng)工作頻率為100 MHz,圖像采樣分辨率為320×240,一幅條碼圖像識(shí)別時(shí)間為60 ms。本系統(tǒng)有如下幾個(gè)特點(diǎn):
    ①利用PDF417碼本身的特點(diǎn)來(lái)定位分割條碼,與傳統(tǒng)的條碼定位分割算法相比,大大提高了條碼識(shí)別速率。傳統(tǒng)二維條碼定位分割多采用Hough變換來(lái)確定條碼傾斜角度,不能滿足手持式嵌入式條碼識(shí)讀器的實(shí)時(shí)性要求。
    ②在FPGA中嵌入NioslI軟核處理器,簡(jiǎn)化硬件設(shè)計(jì),同時(shí)使系統(tǒng)更加穩(wěn)定。FPGA的可重配置以及SOPC的可裁減使系統(tǒng)具有很高的資源利用率,而且方便升級(jí)和維護(hù)。
    ③利用自定義模塊、自定義指令、C2H硬件加速等方法刮對(duì)部分耗時(shí)算法進(jìn)行優(yōu)化,大大提高了整個(gè)系統(tǒng)識(shí)別速率。
    筆者針對(duì)不同環(huán)境下采集的300幅條碼圖像進(jìn)行了三次測(cè)試:第一次是在條碼無(wú)破損的情況下,第二次是在條碼有5%破損和污染的情況下,第三次隨機(jī)識(shí)別100幅條碼。本文所采用的算法平均識(shí)別率達(dá)96.7%,耗時(shí)60ms,如表1所列。

                          

結(jié) 語(yǔ)
    二維條形碼誕生后,條碼技術(shù)的應(yīng)用領(lǐng)域更加廣泛,不僅應(yīng)用于物流運(yùn)輸,還滲透到生產(chǎn)、生活的各個(gè)領(lǐng)域。本文介紹了一種基于SOPC的二維條碼識(shí)別系統(tǒng)的設(shè)計(jì),提出了一種軟硬件綜合的解決方案,由于涉及底層的硬件系統(tǒng)設(shè)計(jì)和相應(yīng)的軟件設(shè)計(jì),在系統(tǒng)性能優(yōu)化方面有著很大的空間。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉