基于SoPC的二維條碼識(shí)讀系統(tǒng)設(shè)計(jì)
一個(gè)PDF417碼最多可容納1850個(gè)字符或1108字節(jié)的二暈制數(shù)據(jù)或2710個(gè)數(shù)字,其結(jié)構(gòu)見圖1。每行從左到右分別為左空白區(qū)、起始符、左行指示符號(hào)字符、1~30個(gè)數(shù)據(jù)符號(hào)字符、右行指示符號(hào)字符、終止符、右空白區(qū)。二維條碼掃描器開始工作時(shí),首先采集二維條碼圖像數(shù)據(jù)。由于實(shí)際工作中條碼圖像會(huì)出現(xiàn)污損等情況,所以必須對采集到的圖像進(jìn)行降噪、校正等處理。條碼圖像為灰度圖像,必須對其進(jìn)行二值化處理才能進(jìn)行碼字識(shí)別。在將PDF417碼的所有碼字正確分割后,還要以查表方式在碼本中查找與碼字相對應(yīng)的值。為確認(rèn)掃描的有效性,還要進(jìn)行校驗(yàn)。如出錯(cuò),則進(jìn)行糾錯(cuò)。最后,傳輸譯碼的數(shù)據(jù)到LCD顯示。條碼圖像譯碼算法的流程如圖5所示。·
二維條碼的一個(gè)很重要的特點(diǎn)是可以引入加密機(jī)制,信息一旦生成便不可修改。當(dāng)建立了自己的編譯碼系統(tǒng)時(shí),就可以在編碼過程中加入各種加密形式。比如在二維條形碼表面加上水印,在譯碼時(shí)采用同一個(gè)水印解密的方法就可以實(shí)現(xiàn)條碼信息的加密與防偽。在這里,數(shù)字水印就是基于二維條碼進(jìn)行信息隱藏的技術(shù)。可以利用變形技術(shù)對PDF417碼符號(hào)字符中的各組成單元寬度加以適量的變動(dòng),采用誤差累積的方式實(shí)現(xiàn)隱藏信息的嵌入和提取。由于二維條碼使用廣泛、體積小、容量大而且人眼無法分辨,因此在二維條碼加入水印還有不易引起察覺、攜帶方便、安全性高、抵御打印掃描攻擊、隱藏信息量大等優(yōu)點(diǎn)。
我國乃至全球都在大力推行二維條碼技術(shù)。隨著二維條碼技術(shù)的普及,對二維條碼識(shí)別系統(tǒng)的需求日益增加。在信息安全、現(xiàn)代物流、現(xiàn)代制造、電子商務(wù)、電子政務(wù)等領(lǐng)域,二維條碼識(shí)讀系統(tǒng)都會(huì)有良好的應(yīng)用。
1 便攜式二維條碼識(shí)讀系統(tǒng)的總體設(shè)計(jì)
本系統(tǒng)要求在FPGA片內(nèi)利用SoPC技術(shù)實(shí)現(xiàn)便攜式的二維條碼識(shí)讀。它不信賴后臺(tái)數(shù)據(jù)庫的支持,通過對二維條碼的掃描即可將得到的大容量的承載信息(包括文字、頭像、指紋等個(gè)人信息)在LCD上顯示,并可通過USB接口將信息拷貝,或通過RS-232接口將信息上傳給PC機(jī),也可以通過GPRS將獲得的信息方便快捷地發(fā)往數(shù)據(jù)中心作驗(yàn)證。
本系統(tǒng)使用集成在QuartusII中的SoPC Builder開發(fā)組件配置生成片上系統(tǒng)。SoPC Builder是一個(gè)功能強(qiáng)大的基于圖形界面的片上可編程系統(tǒng)的定制工具,可以在短時(shí)間內(nèi)完成用戶定制的SoPC設(shè)計(jì)。根據(jù)應(yīng)用的需要,應(yīng)從SoPC Builder庫中選擇IP模塊、存儲(chǔ)器、外圍接口和處理器,并且配置生成一個(gè)高集成度的SoPC系統(tǒng)。因而選取以下一些IP模塊組成片上系統(tǒng):Nios 32bit CPU、Boot Monitor ROM、Communication UARTA、Debugging UART、Timer、User PIO、LCD PIO、External RAM Bus、External Flash Interface。SoPC Builder能自動(dòng)產(chǎn)生每個(gè)模塊的HDL文件,同時(shí)自動(dòng)產(chǎn)生一些必要的仲裁邏輯來協(xié)調(diào)Avalon Bus上各功能模塊的工作。
系統(tǒng)以Altera公司的用于可編程邏輯器件的第二代軟核處理器Nios II為核心。Nios II是基于哈佛結(jié)構(gòu)的32位RISC通用嵌入式處理器軟核,能與用戶邏輯相結(jié)合,適配到Altera公司的FPGA中。性能超過200DMIPS。它非凡為SoPC設(shè)計(jì)了一套綜合解決方案。本系統(tǒng)采用Nios II的經(jīng)濟(jì)型(Nios II/e)。片上系統(tǒng)方式能實(shí)現(xiàn)主功能,使系統(tǒng)集成度高、高等性強(qiáng)。
系統(tǒng)結(jié)構(gòu)大體分為三層,由低到高分別為系統(tǒng)硬件層、操作系統(tǒng)層、應(yīng)用軟件層,如圖2所示。
最底層的系統(tǒng)硬件層是系統(tǒng)的物理設(shè)備基礎(chǔ),提供操作系統(tǒng)和應(yīng)用軟件的運(yùn)行平臺(tái)和通信接口。系統(tǒng)的硬件平臺(tái)在Altera公司的Nios II Cyclone嵌入式系統(tǒng)開發(fā)板上實(shí)現(xiàn)。
第二層的操作系統(tǒng)采用μClinux。這一層提供任務(wù)調(diào)度以及設(shè)備驅(qū)動(dòng)。同時(shí)提供中斷來實(shí)現(xiàn)系統(tǒng)對外界的通信請求的實(shí)時(shí)響應(yīng),如對條碼掃描的控制、對GPRS通信端 口的控制等。使用操作系統(tǒng)可以提高系統(tǒng)的運(yùn)行效率和可靠性。
最上層實(shí)現(xiàn)條碼譯碼核心算法。該算法能對采集到的條碼圖像進(jìn)行高效的處理和匹配,實(shí)現(xiàn)譯碼。這部分工作采用C語言在Nios II的集成開發(fā)環(huán)境(IDE)中實(shí)現(xiàn)。
2 系統(tǒng)硬件的設(shè)計(jì)與實(shí)現(xiàn)
CMOS圖像傳感芯片為光電轉(zhuǎn)換元件,用于采集二維條碼圖像,直接輸出為數(shù)字信號(hào)。由外部擴(kuò)展SRAM存儲(chǔ)該數(shù)據(jù),再送到Nios進(jìn)行圖像處理。當(dāng)一組二維條碼信息的識(shí)別完成時(shí),服務(wù)程序控制I/O接口給出中斷申請信號(hào),Nios響應(yīng)此中斷申請,進(jìn)入中斷服務(wù)程序。譯碼后的二維條碼數(shù)據(jù)被送入LCD進(jìn)行顯示。動(dòng)態(tài)采集到的二維條碼圖像存儲(chǔ)在SRAM內(nèi),而軟件程序和PDF417碼本都儲(chǔ)存在FPGA芯片外擴(kuò)的FLASH內(nèi)。
系統(tǒng)硬件電路主要包括以下七個(gè)部分:條碼圖像采集模塊、Nios主控模塊、GPRS無線通信模塊、存儲(chǔ)器擴(kuò)展(FLASH、SRAM、CPLD)模塊、輸出接口(RS-232、USB模塊、照明控制模塊。其硬件平臺(tái)結(jié)構(gòu)見圖3。
2.1條碼圖像采集模塊
條碼掃描器芯片采用OmniVision OV7649黑白圖像傳感芯片,該芯片分辨率為640×480像素,成像速度為30幀/秒,采取逐行掃描方式,輸出為數(shù)字信號(hào)。條碼圖像采集的程序流程是:首先Nios初始化OV7649的各個(gè)寄存器,主要包括狀態(tài)寄存器(STA)、數(shù)據(jù)和時(shí)鐘控制寄存器(CLKRC)和自動(dòng)增益控制寄存器(AGC)的設(shè)置;然后查詢等待,條碼圖像被OV7649采集進(jìn)入數(shù)據(jù)寄存器后,通過DMA方式存入SRAM。Nios再從SRAM中提取數(shù)據(jù)進(jìn)行譯碼。這一部分的工作原理見圖4。
2.2 Nios主控模塊
Nios軟核CPU實(shí)現(xiàn)主要的控制功能。當(dāng)OV7649預(yù)備采集條碼圖像數(shù)據(jù)時(shí),Nios發(fā)出一個(gè)初始信號(hào),控制SRAM重新分配地址塊,同時(shí)OV7649開始采集條碼圖像數(shù)據(jù)。采集完數(shù)據(jù)并送到SRAM中存儲(chǔ)后,Nios開始調(diào)用譯碼程序?qū)D像進(jìn)行譯碼。譯碼完成后,Nios控制條碼信息在LCD中顯示。
2.3 存儲(chǔ)器擴(kuò)展模塊
該模塊包括FLASH、SRAM、CPLD三個(gè)部分。其中,CPLD用于存儲(chǔ)配置FPGA的程序,F(xiàn)LASH用于存儲(chǔ)系統(tǒng)軟件,而SRAM用于存放動(dòng)態(tài)采集到的大量條碼圖像數(shù)據(jù)。按照量化位數(shù)的不同,選用不同容量的SRAM作為外部擴(kuò)展,這里選擇了IDT71V016,它的容量是64K×16Bit。
3 系統(tǒng)軟件的設(shè)計(jì)與實(shí)現(xiàn)
這里不采用現(xiàn)有條碼掃描大多采用的直接用模擬電路探測條碼的條空分界信號(hào)的方法,因?yàn)檫@種方法掃描結(jié)果將使條空分界線鈍化,降低了以后操作中信號(hào)檢測的準(zhǔn)確性。而是將條碼圖形通過內(nèi)置CMOS掃描儀整個(gè)讀取,然后通過嵌入式編程完成條空分界。這種方法的譯碼準(zhǔn)確率要高,而且采用編程的方法不會(huì)有前者存在的對掃描角度要求嚴(yán)格的問題。
譯碼流程說明如下:
·降噪處理
這里采用多幀圖像平均降噪方法。圖像采集芯片OV7649成像速度為30幀/秒,為消除在實(shí)際操作過程中由于人手抖動(dòng)、條碼圖像移動(dòng)等而產(chǎn)生的誤差,每一次掃描只取六幀圖像,所有時(shí)間為0.2s,可以忽略抖動(dòng)的影響。
·背景分離
背景分離是將條碼區(qū)與背景分離,從而避免在沒有有效信息的區(qū)域進(jìn)行特征提取,加速后續(xù)處理的速度。背景分離采用標(biāo)準(zhǔn)差閾值跟蹤法實(shí)現(xiàn),圖像條碼部分由黑白相間的條塊組成,灰度變化大,因而標(biāo)準(zhǔn)差較大;而背景部分灰度分布較為平坦,標(biāo)準(zhǔn)差較小。將條碼圖像分塊,每個(gè)小塊的標(biāo)準(zhǔn)差若大于某一閾值。則該小塊中的像素點(diǎn)為有效;否則為背景。
·圖像校正
由于掃描進(jìn)來的圖像總會(huì)出現(xiàn)一定的傾斜和偏移,給快速、正確地識(shí)別條碼帶來困難。利用行差運(yùn)算與Hough變換相結(jié)合的方法,能快速、準(zhǔn)確地找到檢測二維條碼圖像邊界線,估計(jì)出傾斜角度,從而對圖像進(jìn)行矯正。
·圖像二值化
通過統(tǒng)計(jì)整個(gè)條碼的邊界強(qiáng)度,得出圖像的邊界強(qiáng)度直方圖。直方圖中邊界強(qiáng)度較小的部分對應(yīng)著噪聲邊界,邊界強(qiáng)度較大的部分對應(yīng)著條碼的條、空邊界。由于邊界強(qiáng)度直方圖具有明顯的雙峰結(jié)構(gòu),可以采用基于閾值選取的方法尋找最佳閾值。因?yàn)槊看蔚墓庹盏韧饨鐥l件是不同的,此二值化門限電平必須是動(dòng)態(tài)調(diào)整的。根據(jù)這個(gè)閾值分離出噪聲邊界和條、空邊界。
在碼字割完成之后,要把數(shù)據(jù)碼字轉(zhuǎn)換成PDF417碼的符號(hào)字符。首先檢測起始符位置,然后開始分割碼字,每17個(gè)模塊就確定為一個(gè)碼字,直到檢測完所有碼字,碼字分割即完成。這一過程可以通過采用模板匹配方式在固定的碼本中查找與碼字相對應(yīng)的值來實(shí)現(xiàn)。也就是利用Query語句查詢數(shù)據(jù)庫查出相應(yīng)的PDF417符號(hào)字符。
·信號(hào)糾錯(cuò)
PDF417碼在識(shí)讀過程中,由于條碼圖案的損壞,或掃描數(shù)據(jù)傳輸出錯(cuò),會(huì)出現(xiàn)袱發(fā)錯(cuò)誤。Reed_Solomon錯(cuò)誤控制碼適合糾正突發(fā)錯(cuò)誤,一般情況下使用R-S錯(cuò)誤控制碼對碼字進(jìn)行檢錯(cuò)和糾錯(cuò)。但在有嚴(yán)重污損的情況下,R-S碼已經(jīng)不能達(dá)到要求??梢岳煤唵蔚亩逊e式二維條形碼圖像處理算法——“邊緣規(guī)整”算法,雖然不能從根本上解決污染的清除問題,但可以大大降低譯碼錯(cuò)誤率。 ARM開發(fā)論壇
整個(gè)系統(tǒng)軟件部分大致分為設(shè)備初始化、條碼圖像采集、譯碼、條碼內(nèi)容顯示、數(shù)據(jù)輸出等幾部分。軟件流程圖見圖6。
4 自定義指令的應(yīng)用
在條碼識(shí)別算法中,對條碼圖像的處理,數(shù)據(jù)運(yùn)算量大,循環(huán)數(shù)目多。如在對條碼圖像校正的過程中,需要頻繁地用到坐標(biāo)轉(zhuǎn)換。為了達(dá)到系統(tǒng)的實(shí)時(shí)性要求,對于算法的硬件加速是必不可少的。采用Nios處理器的定制指令,把用戶自定義的功能直接添加到Nios的ALU中去,用一組易于通過硬件實(shí)現(xiàn)的位移和加法運(yùn)算替代乘加運(yùn)算,完成坐標(biāo)的轉(zhuǎn)換和許多循環(huán)的數(shù)據(jù)處理,加快專項(xiàng)任務(wù)的執(zhí)行。用戶邏輯和用戶指令是NiosII系統(tǒng)最閃亮的特點(diǎn)之一。同時(shí),充分利用了可編程邏輯器件硬件執(zhí)行運(yùn)算速度快的優(yōu)點(diǎn),這一點(diǎn)和用于控制NiosCPU的特點(diǎn)相得益彰。定制指令邏輯的NiosII的連接 在SoPC Builder中完成。NiosII 配置向?qū)峁┝艘粋€(gè)可添加256條定制指令的圖形用戶界面,在該界面中導(dǎo)入設(shè)計(jì)文件,設(shè)置定制指令名,并分配定制指令所需的CPU時(shí)鐘周期數(shù)目。系統(tǒng)生成時(shí),Nios II IDE為每條用戶指令產(chǎn)生一個(gè)在系統(tǒng)頭文件中定義的宏,可以在C應(yīng)用程序中像調(diào)用函數(shù)一樣方便地直接調(diào)用這個(gè)宏。
本文使用Altera公司的Cyclone FPGA實(shí)現(xiàn),具有開發(fā)周期短、成本低等特點(diǎn);隨著二維條碼越來越廣泛的應(yīng)用,此方案會(huì)有更廣闊的前景。
評(píng)論