引 言
在信息化的當今世界,信息安全不管是對企業還是個人都越來越重要。生物特征鑒別在信息安全身份認證領域占據著重要地位。傳統的指紋鑒別系統已經商用化,但由于指紋特征十分細小,對于采集圖像設備的分辨率要求很高.導致設備成本居高不下。另外,大約有4%的人由于指紋磨損而提取不出指紋特征(如一些老年人和體力勞動者),所以人們把目光投向了分辨率要求不高有可能實現低成本與大范圍應用的掌紋鑒別領域。
掌紋識別和鑒別是1998年才出現的新興生物特征識別技術,經過幾年的研究已經達到了商用的要求(在低分辨率條件下識別率高于99%)。掌紋鑒別的適用范圍廣泛,從特定領域來說,可以廣泛應用在銀行、法院、刑偵、監獄等需要保密性要求比較高的部門,從大眾領域來說,住宅小區和生產車間是重要的應用場臺。上述應用場臺除了要求本身算法的可靠性外,還要求識別設備小型化,便攜化以及可升級性。所以擺脫PC的束縛,在嵌人式系統上實現掌紋鑒別更加具有實際應用價值,也勢必會將掌紋鑒別推向更廣闊的應用領域,然而在當前還沒有嵌入式掌紋鑒別系統問世。
Nlos是Altera公司推出的一款采用流水線技術、單指令流的32位RISC軟核處理器,并針對Altera公司的可編程邏輯器件和片上可編程系統的思想做了相應優化AlIera公司提供的SoPC Builder不僅可以創建和配置用戶的Ni0s,還可以添加自定義用戶指令。這使得Nios可以很容易的與用戶邏輯結合,構成功能更加強大的SoC系統。本文提出了基于Nios軟核處理器的掌紋鑒別系統設計方案,并最終實際完成了該系統。
1、系統結構及功能概述
從邏輯功能來看,作為一個完整的掌紋鑒別系統應該具備以下兩個基本功能:鑒別和注冊。鑒別功能即根據用戶的lD和采集到的掌紋圖像判定用戶身份是否與聲明的ID相符。如果當前用戶是合法的,則記錄本次登錄,如果當前用戶是不合法的,則向系統管理員報告。注冊功能即將新用戶的掌紋特征添加到掌紋特征庫,并給此用戶一個新的ID。
為了實現鑒別和注冊功能,將系統分為以下幾個模塊:圖像采集模塊、鑒別處理模塊、輸入輸出模塊和通信模塊。其中,鑒別處理模塊是整個系統的核心,它既要完成掌紋鑒別算法的運算,還要對其它的模塊進行控制和監測。系統的結構框圖如圖l所示
圖像采集模塊主要包括攝像頭和外擴SRAM。由于手掌凹凸不平及受壓力不同時,導致的形變較大,所以采集掌紋圖像,一般不使用像采集指紋時使用的掃描設備。而如果采用數碼相機,系統的體積和成本必然上升,喪失了莫優越性。筆者采用OmniVvision公司的OV7649攝像頭作為圖像采集設備,OV7649是30萬像素的CMOS數字攝像頭,體積極小,價格便宜,分辨率足以達到掌紋鑒別的要求。因為OV7649輸出為8位數據寬度,所以SRAM采用了與OV7649的數據寬度相同的IDT7lV424,用來作為存儲掌紋圖像的緩沖區。
鑒別處理模塊采用的FPGA選擇Altera公司的APEX20K200F,配置了256KB的SRAM及1MB的Flash,另外我們還添置了32MB的SDRAM. SRAM和SDRAM用來為Ni0s運行程序和存儲相關數據,Flash用來存儲提取好的掌紋樣本特征。選擇Nios軟核CPU作為核心處理模塊主要考慮到它為設計帶來了高的集成度和靈活性,這樣再對設計方案作更改時比較方便,而且核心算法如果用Nios的用戶指令實現,那么運算速度將會得到很大提高。AIIera也提供了一些免費的IP核,包括常用的UART、SRAM、F1ash和SDRAM控制器。這樣在S0PCBuilder里很容易定制好自己需要的Nios處理器,假如想更改其中的某些部分只需在S0PC Builder里重新配置即可。實踐證明,選擇Nios軟核處理器給后續的工作帶來很多便利。
輸入輸出模塊和通信模塊結構相對簡單。前者包括一些按鍵和1塊16×2的漢字LCD,用來提示用戶操作和顯示系統相關信息,后者采用的是西門子的slml00-tcp無線通信模塊。這樣可保證系統的報告直接可以發到系統管理員的手機上.同時也為連接1naternaet提供了條件,這樣系統的擴展性就得以增強了。
2、系統的硬件設計
系統硬件結構如圖2所示.可以看到在l片FPGA中包含了Nios處理器、SRAM控制器、SDRAM控制器、Flash控制器、uART以及攝像頭和外擴SRAM控制器、2維DCT變換的用戶邏輯模塊。這正體現了Nios的優勢,將很多資源集中在FPGA中為設計PCB帶來了便利,而且對系統的更改也變得非常容易,只要重新在FPGA中添加不同的模塊就可以了。筆者分別設計了2塊PCB,分別是圖像采集板和無線通信模塊,工作的重點主要在以下兩個方面。
(1)Nios與OV7649的工作協調機制
OV7649控制信號線使用的是oMniVisn公司的SCCB總線。SCCB總線包括SIO_C和SIO_D兩條信號線,分別代表時鐘和串行數據I/O,無論是傳輸控制命令還是讀寫數據,都是由不同的時序來區分不同的操作。筆者并沒有用Nios直接與OV7649相連.而是獨立用VHDL編寫了一個控制模塊。這樣做的原因主要有兩方面:第一,OV7649輸出的像素同步時鐘頻率為24MHz,同時以30幀/s的速率輸出分辨率為640×480的圖像數據,如此高的數據率直接用Nios提取其中一幀圖像是不好實現的,因此必須編寫提取圖像寫入外擴sRAM的VHDL模塊,直接用FPGA將掌紋圖像數據寫入外擴SRAM;第二,Nios只占用了FPGA資源的三分之一左右,完全可以利用剩下的資源,這樣編寫C代碼的時候就不必考慮SCCB總線的時序。對于Nios來說,圖像采集只需發啟動和配置命令就可以實現.然后等待控制模塊的完成信號返回,直接到外擴SRAM取數據即可。
攝像頭控制模塊首先對攝像頭進行初始化配置。初始設定為 自動增益控制、自動白平衡、VGA格式(640 x80)、30幀/s、YuV 4:2:2數字視頻信號輸出、設置默認的圖像對比度、亮度及飽和度。然后接收OV7649產生的數字視頻信號、控制信號和狀態信號,即把幀同步信號VREF、行同步信號HREF、復位信號RST、像素時鐘信號PCLK等引腳連接到FPGA,根據這些信號將數據寫入外擴SRAM。圖3和圖4是OV7649輸出的各種同步信號的時序圖。
(2)外擴SRAM的讀寫控制
如前所述,開發板上配有256KB的SRAM和IMB的Flash。因為提取的每幀掌紋圖像至少為320×40×2=150KB.同時圖像處理的相關代碼和掌紋樣本庫也有相當的容量,所以還需要外擴1MB的SRAM作為存儲采集圖像的緩沖區。為了和攝像頭的數據寬度匹配,外擴的SRAM選用了IDT7lV424,作為FPGA從OV7649輸出視頻中提取一幀圖像的存儲器。這2片SRAM必須達到以下要求 在采集圖像時為FPGA中的攝像頭控制模塊迅速將圖像數據寫入,其余時間則將資源釋放,被Ni0s統一管理。為此,一方面根據輸出視頻數據的高速時鐘信號利用FPGA的資源編寫了VHDL模塊;另一方面,根據SOPC Builder提供的配置文件修改.寫出了控制IDT71424的IP,并將其集成到SOPC Builder中。
3、系統的軟件設計
(1)軟件開發環境與用戶指令
Nios的軟件開發環境叫做Nios SDK SHELL,它提供了一個基于命令行婁似于Nnix的界面,用戶在此環境下可以和Nios進行通信。我們需要先將編寫好的.c文件用nios-builder命令生成srec文件。這個過程是由Nlos SDKSHELL調用GNUpro編譯器來完成,GNUpro負責完成C代碼和相關的頭文件及庫函數的編譯、鏈接等工作。編譯通過后就可以用nios-run命令將生成的.srec文件通過串口下載到N1os上運行。在SOPC Builder中配置好Nios后,會得到為用戶生成的CPU_SDK文件夾,其中有個名為excalibur.h的頭文件,它包括Nios所有資源的地址映射和一些庫函數。
用戶指令是Nios的最大特點之一,也是硬核處理器無法提供給用戶的。使用好用戶指令可以給系統速度帶來極大的提升。掌紋鑒別算法有很多種,對掌紋特征提取通常包括提取掌紋幾何特征、變換域特征和代數統計特征三大婁。在本系統的設計過程中,對算法的選擇主要是從如何發揮Nios的優勢出發,爭取能在系統的實時性、可靠性及軟硬件結合三方面拽到一個平衡點。對掌垃圖像進行DCT變換是這個處理過程中運算量最大的部分,同時這也恰恰是利用用戶指令的機會。2維DCT的處理模塊是在1維DCT的基礎上加以改善得到的,并且在SOPC Builder中添加為用戶指令。用戶指令的引人為系統速度帶來極大的提升。首先在SOPC Builder配置Nios時,分別使用MSEP和MuL兩種乘法,運行C代碼實現,然后又用2維DCT的用戶指令來做相同圖像的處理對比。下文會有具體的測試數據。
(2)代碼流程分析
參照圖5所示,現在開始分析流程圖中各操作的具體步驟。
用nr_installuserisr(na_button_pio_irq,palm_isr,(int)pi0)函數來建立一個用戶中斷服務,對按鍵中斷響應進入中斷服務程序palm_isr.然后向攝像頭控制模塊發送指令,需要用的函數有
vold mitSCCBMPodule()
void WriteSCCB(unsigned char id_addr,unsigned char sub addr,unsigend char data);
unsigned char ReadSCCB(unsigned char id_addr,un-signed char sub_addr)
void EndSCCBModule();
首先用initSCCBModule函數對攝像頭控制模塊初始化,然后用WriteSCCB函數寫入需要的攝像頭配置.EndSCCBModule表示結束配置,還可以用RemdSCCB來讀取攝像頭的寄存器配置,檢查與吸入的配置是否相同。檢測到攝像頭控制模塊的完成信號,就可以從外擴SRAM讀取數據了。接著對圖像數據做一些預處理,包括提取圖像的Y分量并找到掌紋的感興趣區域。然后提取掌紋特征,這部分的運算量主要集中在DCT變換,需要使用用戶指令nm_det_2.在用戶指令執行完畢后,既是對特征的處理,并將處理結果顯示。對于提取的掌紋特征如果需要寫入Flash儲存起來,那就需要調用
int nr_flash erase sector(unsigned short*flash base,unsigned short*sector address)
int nr_flash write(unsigned short*lash base unsigned short*address,unsigned short value)
無線通信模塊需要與Nios的串口連接,用AT命令來控制打電話、發短信和訪問Internet。需要調用的串口控制函數是voidnr txstring(char*s)和int nr_rxchar(vpid)這兩個函數就是發送AT命令和接收無線模塊返回的狀態信息。
4、測試與分析
實驗主要分為兩個部分:正確鑒別率測試(如表1所列)和鑒別時間測試(如表2所列)。
從表1的數據來分析,可以看出在樣本數不大的范圍內隨著閾值為130時得到了96.7%的正確鑒別率.對于在Nios平臺下的掌紋鑒別來說這個結果是完全可以接受的,但是此時對擴展測試集有3.3%的錯誤接受率。筆者取的擴展測試集規模與樣本數相同,假設將此系統用于住宅小區門禁系統,這就意味著此小區區外的31名人員中有1個可能能夠進人該小區。為了保證安全性筆者將閾值減小至100,系統對擴展測試集的鑒別效果相當好,樣本之外的掌紋不會錯識為樣本庫中的掌紋,付出的代價就是正確鑒別率下降為93.5%。眾所周知,嵌入式處理器的運算能力有限,所以對特征提取時間比較關注,這也是系統能否邁向實用化的關鍵之一。表2是系統實時性的測試,從中可以看出在配置Nios時選用不同的乘法器(MSTEP是Nios的標準乘法器,MUL是Nios的全硬件乘法器)運算時間有所縮短,而使用用戶指令對運算的加速效果相當明顯,以上數據是使用函數hr_timer_milliseconds測試得到的。
5、結 語
本文所設計的“基于Nios的掌紋鑒別系統”,雖然這只能算是一個掌紋鑒別系統的雛形,但是完全可以完整地實現掌紋鑒別功能。由于本設計基于Nios軟核處理器,因此具有安裝簡單,使用方便的特點,用戶使用并不需要任何特殊的技能或培訓。另外,整個掌紋的采集與處理過程也將非常舒適與快速,增大了產品的適用范圍。在設計過程中,將整個系統分為核心處理子系統、圖像采集和存儲子系統、通信子系統、顯示子系統和供電子系統,盡量做到這些子系統可以進行獨立或者部分獨立的調試。由于采用這種設計思路,系統從硬件結構上相當靈活,因此該設計完全可以針對不同的具體應用場合加以定制和優化。各個子系統在硬件結構上是模塊化的,而所有這些子系統的控制器全部集成在一片FPGA中,高集成度帶來的不僅是成本下降,還有便利性和靈活性。Nios軟核處理器的引入不僅使整個系統做到了真正的軟硬件可裁減.更加把這種新的設計理念帶入到嵌入式系統開發中。
基于Nios的系統設計是傳統嵌入式設計和FPGA設計的綜合,而凸現Nios軟核處理器的特性幾乎全部需要HDL的支持。可使用IP的數量和HDL的造詣將直接決定系統的品質。在本設計中將兩者相結臺,對高速信號的處理和算法涉及到的大量運算采用VHDL來實現,而系統的總體控制及資源管理由Nios負責。在Ni0s為我們找到了高集成度與模塊化設計理想結合的問時,本設計方案也給Nios提供了最佳的應用場合。
責任編輯:gt
評論
查看更多