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