基于NiosII的二維條碼識別系統設計

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

1 系統總體設計

本系統在FPGA上使用SOPC技術(shù)來(lái)實(shí)現無(wú)線(xiàn)手持二維條碼識讀器,與傳統一維條碼識讀器最大的區別在于完全脫離后臺數據庫,以及在高達50%破損率的情況下能夠進(jìn)行高效率識別。



SOPC技術(shù)是一種基于FPGA解決方案的SOC,由美國Altera公司于2000年提出;赟OPC平臺的開(kāi)發(fā)結合了FPGA靈活可編程與片上。 NioslI軟核處理器的用戶(hù)可配置等特點(diǎn)。在實(shí)現某功能時(shí),通過(guò)在NiosII處理器下編寫(xiě)C程序運行,也可以使用硬件模塊來(lái)加速。本系統綜合兩種實(shí)現思路,采用高性?xún)r(jià)比的Cyclone II EP2C35系列FPGA實(shí)現,系統總體結構如圖2所示。



整個(gè)系統由低到高分為三個(gè)層次:條碼識別的硬件平臺、μC/OS—II操作系統、條碼譯碼核心算法。最底層硬件平臺采用Altera公司的Cylone II EP2C35與ADI公司的視頻解碼芯片ADV7181B,具有8 MB的Flash存儲器,1.MB的SRAM等外設;中間層μC/OS—II操作系統提供任務(wù)調度和設備驅動(dòng),以及提供各種中斷來(lái)實(shí)現對外界請求的響應,如模式切換、LCM.顯示、射頻傳送等,有效地提高了系統運行速率;最頂層條碼譯碼核心算法包括了對條碼圖像的預處理和對譯碼數據的RS糾錯,采用C語(yǔ)言在NiosII的集成開(kāi)發(fā)環(huán)境中(IDE)實(shí)現。

1.1 系統硬件結構

系統通過(guò)配置視頻采集芯片ADV7181B,通過(guò)圖像采集子系統將CCD采集到的條碼數據存儲在SRAM中后,產(chǎn)生硬件中斷,處理器響應中斷,Nios對 SRAM中的數據進(jìn)行圖像預處理、譯碼及糾錯,通過(guò)譯碼算法硬件加速模塊對耗時(shí)較多部分算法進(jìn)行優(yōu)化,在實(shí)現條碼數據譯碼及糾錯后,產(chǎn)生射頻傳送和LCM 顯示中斷,進(jìn)入中斷程序將譯碼數據通過(guò)射頻傳輸模塊發(fā)送到上位機,并且在LCM實(shí)時(shí)顯示。其硬件平臺結構原理如圖3所示。



1.2 圖像采集子系統

由于本設計采用的是灰度圖,因此圖像采集子系統的主要功能是:配置采集芯片,從解碼芯片讀出數據流,根據行場(chǎng)同步信號對數據流進(jìn)行分離,提取出亮度信號,并將采集到的亮度信號通過(guò)乒乓緩存存入SRAM中。

在設計中,采用ADI的解碼芯片ADV7181B進(jìn)行圖像信號的數模轉換,FPGA中的I2C模塊是作為主設備來(lái)對ADV7181B進(jìn)行配置的,而 ADV7181B作為從設備來(lái)接受I2C總線(xiàn)傳來(lái)的數據,實(shí)現芯片的初始化、寄存器的配置等。圖4中T_DA為數據信號,TD_VS為場(chǎng)同步信號,TD_HS為行同步信號。



系統上電時(shí),I2C配置模塊將對ADV7181B的內部寄存器進(jìn)行配置,ADV7181B將模擬信號轉換為Y:U:V為42:2:2的8位CCIR656 數字信號,其中輸出的時(shí)序包括行場(chǎng)同步、行場(chǎng)消隱、行頻場(chǎng)頻及場(chǎng)識別等信號。

CCD攝像頭采集的圖像實(shí)際尺寸為768×576像素,每幀圖像由奇場(chǎng)數據和偶場(chǎng)數據交錯組合而成,奇場(chǎng)數據與偶場(chǎng)數據在時(shí)間上是先后輸入的。本設計使用的是320×240的液晶顯示屏,在處理過(guò)程中也采用的是320×240的圖片格式,所以要對攝像頭采集的圖片進(jìn)行提取。在設計中僅采奇場(chǎng)數據的中間 240行,并對每行中間的640個(gè)數據每?jì)蓚(gè)像素抽取一個(gè)像素,從而得到符合系統要求的圖像大小。由于一幀圖像的奇場(chǎng)數據與偶場(chǎng)數據實(shí)際上非常接近,而每行的相鄰兩個(gè)像素值也幾乎沒(méi)有差異,因此可以得到原輸入圖的縮小圖像而不會(huì )有失真。

圖像存入SRAM采用了乒乓緩存,如圖5所示,是為了防止寫(xiě)出速度快于寫(xiě)入速度而導致出現錯誤數據。采用兩個(gè)行緩存進(jìn)行乒乓切換,在數據提取子模塊向行A 寫(xiě)入數據時(shí),數據寫(xiě)出子模塊讀取行緩存B中的數據輸出到總線(xiàn);在對下一行進(jìn)行采集時(shí),對行緩存A讀數據,對行緩存B寫(xiě)數據。因此行緩存寫(xiě)路選器與行緩存讀路選器在同一時(shí)刻選通的一定是不同的行緩存。



2 條碼識別核心算法

條碼譯碼主要流程是首先對條碼進(jìn)行自適應二值化,然后對條碼進(jìn)行定位、旋轉、分割。分割出單個(gè)碼字后,通過(guò)邊緣檢測,得到條碼條空序列模塊寬度后,再進(jìn)行糾錯解碼。

傳統條碼識別算法在對條碼定位時(shí)多采用Hough變換,通過(guò)Hough變換提取條碼圖像中的直線(xiàn)傾角來(lái)旋轉條碼。但是Hough變換的大運算量并不適用于實(shí)時(shí)性要求高的的嵌入式設備。筆者結合PDF417條碼自身的特點(diǎn),采用4點(diǎn)定位的方法來(lái)分割條碼,有效提高條碼識別速度。核心算法流程詳細步驟如下:

(1)條碼定位

實(shí)際采集條碼時(shí)會(huì )出現各種傾斜,如圖6所示。如何定位條碼是關(guān)鍵的問(wèn)題?梢岳脳l碼起始頭特有的比例來(lái)定位。按照國標的定義,PDF417二維條碼的起始符黑白條空比是81111113,終止符黑白條空比是711311121。掃描圖像的每一行,分別匹配起始符和終止符的條空比?紤]到條碼采集過(guò)程中,邊緣受高斯點(diǎn)擴展函數的影響,只要黑白條空比例的誤差不超過(guò)三位,可近似認為符合比例。標記所有符合起始符條空比比例條碼線(xiàn)段,可以得到4個(gè)控制點(diǎn)a、 b、c、d,用同樣的方法可以尋找符合終止符條空比的條碼線(xiàn)段,確定點(diǎn)e、f、g、h。判斷a、c、e、g是否為正確控制點(diǎn)的標準是,平行邊長(cháng)度誤差在5 個(gè)像素點(diǎn)內,且相鄰邊角度為90°,其誤差角度為2°。





(2)行條碼分割及行高確定

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





已知p(x)對應投影的峰值,也就條碼的邊界,通過(guò)對投影下來(lái)的每個(gè)值求一次差分▽ p(x),然后逐個(gè)判斷各個(gè)差分值,如果連續兩個(gè)投影的差分值前一個(gè)是負數而后一個(gè)是0或者正數,則說(shuō)明此點(diǎn)是峰值。峰值處的坐標即為條碼分層的地方,考慮到條碼層與層連接的地方在二值化時(shí)會(huì )出現噪點(diǎn),則取每層條碼圖像中間的50%作為有效圖像。

(3)碼字識別

分割出單個(gè)碼字后,得到條空的像素個(gè)數,記為{M1,M2,…,M8},因為4個(gè)條和4個(gè)空的總模塊數為17,可以根據式(1)得出條模塊數的集合 {T1,T2,T3,T4)。同樣,用Ki替代式(1)中的Ti,可得到空模塊數的集合{K1,K2,K3,K4}。



因PDF417條碼用了三個(gè)簇的數據來(lái)組成一個(gè)條碼,三個(gè)簇的數據量較大,且每個(gè)簇中的數據與條空比無(wú)一致對應關(guān)系,所以就涉及把條空比轉換成條碼數據的問(wèn)題。本算法采用的解決方案是:用哈希算法來(lái)查找:

F=Z×1400+K2×216+T3×36+K4×6+T (2)

式(2)中Z為空1模塊數和條2模塊數的組合,再利用F的值進(jìn)行查找,實(shí)現數據流的譯碼。數據流譯碼不是本文重點(diǎn),這里不再詳細闡述。

3 系統軟件設計

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

4 實(shí)驗與分析

本識別系統工作頻率為100 MHz,圖像采樣分辨率為320×240,一幅條碼圖像識別時(shí)間為60 ms。本系統有如下幾個(gè)特點(diǎn):

①利用PDF417碼本身的特點(diǎn)來(lái)定位分割條碼,與傳統的條碼定位分割算法相比,大大提高了條碼識別速率。傳統二維條碼定位分割多采用Hough變換來(lái)確定條碼傾斜角度,不能滿(mǎn)足手持式嵌入式條碼識讀器的實(shí)時(shí)性要求。

②在FPGA中嵌入NioslI軟核處理器,簡(jiǎn)化硬件設計,同時(shí)使系統更加穩定。FPGA的可重配置以及SOPC的可裁減使系統具有很高的資源利用率,而且方便升級和維護。

③利用自定義模塊、自定義指令、C2H硬件加速等方法刮對部分耗時(shí)算法進(jìn)行優(yōu)化,大大提高了整個(gè)系統識別速率。

筆者針對不同環(huán)境下采集的300幅條碼圖像進(jìn)行了三次測試:第一次是在條碼無(wú)破損的情況下,第二次是在條碼有5%破損和污染的情況下,第三次隨機識別 100幅條碼。本文所采用的算法平均識別率達96.7%,耗時(shí)60ms,如表1所列。



結語(yǔ)

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

參考文獻

   1. GB/T 17172-1997.四一七條碼 1997
   2. 鄧華 二維條形碼 PDF417的高速讀取和識別 [學(xué)位論文] 2004
   3. 祁曉莉 矩陣式二維條碼的生成與解碼技術(shù)的研究及應用 2007
   4. 求是科技 數字圖像處理典型算法及實(shí)現 2007
   5. 徐孝凱 數據結構實(shí)用敎程 2006
   6. Altera Quartus II Handbook:Volume 4 2006
   7. 周博.邱衛東 挑戰SOC--基于NIOS的SOPC設計與實(shí)踐 2004
   8. 徐光輝.程東旭 基于FPGA的嵌入式開(kāi)發(fā)與應用 2006

作者:重慶大學(xué) 何偉  易明  張玲  黃丹靈 來(lái)源:單片機與嵌入式系統應用 2009(5)
本文地址:http://selenalain.com/thread-8555-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页