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