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