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