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