首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于Nios的掌纹鉴别系统设计与实现

基于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测试得到的。

结 语

本文所设计的“基于Nios的掌纹鉴别系统”,虽然这只能算是一个掌纹鉴别系统的雏形,但是完全可以完整地实现掌纹鉴别功能。由于本设计基于Nios软核处理器,因此具有安装简单,使用方便的特点,用户使用并不需要任何特殊的技能或培训。另外,整个掌纹的采集与处理过程也将非常舒适与快速,增大了产品的适用范围。在设计过程中,将整个系统分为核心处理子系统、图像采集和存储子系统、通信子系统、显示子系统和供电子系统,尽量做到这些子系统可以进行独立或者部分独立的调试。由于采用这种设计思路,系统从硬件结构上相当灵活,因此该设计完全可以针对不同的具体应用场合加以定制和优化。各个子系统在硬件结构上是模块化的,而所有这些子系统的控制器全部集成在一片FPGA中,高集成度带来的不仅是成本下降,还有便利性和灵活性。Nios软核处理器的引入不仅使整个系统做到了真正的软硬件可裁减.更加把这种新的设计理念带入到嵌入式系统开发中。

基于Nios的系统设计是传统嵌入式设计和FPGA设计的综合,而凸现Nios软核处理器的特性几乎全部需要HDL的支持。可使用IP的数量和HDL的造诣将直接决定系统的品质。在本设计中将两者相结台,对高速信号的处理和算法涉及到的大量运算采用VHDL来实现,而系统的总体控制及资源管理由Nios负责。在Ni0s为我们找到了高集成度与模块化设计理想结合的问时,本设计方案也给Nios提供了最佳的应用场合。引 言

在信息化的当今世界,信息安全不管是对企业还是个人都越来越重要。生物特征鉴别在信息安全身份认证领域占据着重要地位[1]。传统的指纹鉴别系统已经商用化,但由于指纹特征十分细小,对于采集图像设备的分辨率要求很高.导致设备成本居高不下。另外,大约有4%的人由于指纹磨损而提取不出指纹特征(如一些老年人和体力劳动者)[2],所以人们把目光投向了分辨率要求不高有可能实现低成本与大范围应用的掌纹鉴别领域。

掌纹识别和鉴别是1998年才出现的新兴生物特征识别技术,经过几年的研究已经达到了商用的要求(在低分辨率条件下识别率高于99%[1])。掌纹鉴别的适用范围广泛,从特定领域来说,可以广泛应用在银行、法院、刑侦、监狱等需要保密性要求比较高的部门,从大众领域来说,住宅小区和生产车间是重要的应用场台。上述应用场台除了要求本身算法的可靠性外,还要求识别设备小型化,便携化以及可升级性.所以摆脱PC的束缚,在嵌人式系统上实现掌纹鉴别更加具有实际应用价值,也势必会将掌纹鉴别推向更广阔的应用领域,然而在当前还没有嵌入式掌纹鉴别系统问世。

Nlos是Altera公司推出的一款采用流水线技术、单指令流的32位RISC软核处理器,并针对Altera公司的可编程逻辑器件和片上可编程系统的思想做了相应优化[3,4]AlIera公司提供的SoPC Builder不仅可以创建和配置用户的Ni0s,还可以添加自定义用户指令。这使得Nios可以很容易的与用户逻辑结合,构成功能更加强大的SoC系统。本文提出了基于Nios软核处理器的掌纹鉴别系统设计方案,并最终实际完成了该系统。

1 系统结构及功能概述

从逻辑功能来看,作为一个完整的掌纹鉴别系统应该具备以下两个基本功能:鉴别和注册。鉴别功能即根据用户的lD和采集到的掌纹图像判定用户身份是否与声明的ID相符。如果当前用户是合法的,则记录本次登录,如果当前用户是不合法的,则向系统管理员报告。注册功能即将新用户的掌纹特征添加到掌纹特征库,并给此用户一个新的ID。
为了实现鉴别和注册功能,将系统分为以下几个模块:图像采集模块、鉴别处理模块、输入输出模块和通信模块。其中,鉴别处理模块是整个系统的核心,它既要完成掌纹鉴别算法的运算,还要对其它的模块进行控制和监测。系统的结构框图如图l所示

用户指令是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测试得到的。

结 语

本文所设计的“基于Nios的掌纹鉴别系统”,虽然这只能算是一个掌纹鉴别系统的雏形,但是完全可以完整地实现掌纹鉴别功能。由于本设计基于Nios软核处理器,因此具有安装简单,使用方便的特点,用户使用并不需要任何特殊的技能或培训。另外,整个掌纹的采集与处理过程也将非常舒适与快速,增大了产品的适用范围。在设计过程中,将整个系统分为核心处理子系统、图像采集和存储子系统、通信子系统、显示子系统和供电子系统,尽量做到这些子系统可以进行独立或者部分独立的调试。由于采用这种设计思路,系统从硬件结构上相当灵活,因此该设计完全可以针对不同的具体应用场合加以定制和优化。各个子系统在硬件结构上是模块化的,而所有这些子系统的控制器全部集成在一片FPGA中,高集成度带来的不仅是成本下降,还有便利性和灵活性。Nios软核处理器的引入不仅使整个系统做到了真正的软硬件可裁减.更加把这种新的设计理念带入到嵌入式系统开发中。

基于Nios的系统设计是传统嵌入式设计和FPGA设计的综合,而凸现Nios软核处理器的特性几乎全部需要HDL的支持。可使用IP的数量和HDL的造诣将直接决定系统的品质。在本设计中将两者相结台,对高速信号的处理和算法涉及到的大量运算采用VHDL来实现,而系统的总体控制及资源管理由Nios负责。在Ni0s为我们找到了高集成度与模块化设计理想结合的问时,本设计方案也给Nios提供了最佳的应用场合。


图像采集模块主要包括摄像头和外扩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所有资源的地址映射和一些库函数。
记录学习中的点点滴滴,让每一天过的更加有意义!
返回列表