网络信息化时代的一大特征就是身份的数字化和隐性化。如何准确、快捷地鉴定一个人的身份,并有效地保护信息安全是信息化时代必须解决的一个重要社会问题。自动指纹识别技术作为一种新型的身份认证技术,不仅具有许多独到的信息安全优点,还具有很高的实用性和可行性。
指纹识别的处理过程包括以下几个步骤:1)利用传感器件采集手指生物样本,然后用预先建立的数学公式或算法从样本中提取其独有的数据,并将其转换成一个模板。2)登记认证程序从指纹的30~40个特征点中至少提取7个特征匹配点进行验证,包括构成某一指纹细节的纹路分叉点和终止点,并定义成特征点之间的距离。3)进行指纹注册,保存信息代码以作为今后用户认证的参考模板。当进入指纹识别系统时,用户将手指触摸传感器区域,所获取的现场扫描模板与参考模板进行比较。整个指纹比对过程如图1所示。
嵌入式指纹识别系统
北京铱波电子公司开发研制的嵌入式指纹识别系统,采用英特尔公司的高性能微控制器PXA255作为控制内核,除了采用了与指纹识别操作相关的器件外,还提供应用控制接口以实现安防、门禁等应用系统。该指纹识别系统的硬件框图如图2所示。

图1:指纹识别系统的指纹比对过程。

图2:嵌入式指纹识别系统的硬件框图。
这个硬件平台提供如下资源:具有8Mb的FLASH和16Mb的SDRAM;PXA255本身具有的串口控制器在调试期间和PC通信;采用了日本富士通公司的按压式硅电容半导体指纹传感器MBF200,其指纹采集面积为12.8×15mm;两个LED数码显示管和一个三色发光二极管显示运行结果;采用4个按键用于用户指纹数据的管理,其中注册键用于注册指纹,验证键用于验证指纹,前进键和后退键用于选定指纹数据以进行删除和增加的操作,4个按键任意一个被按下时,触发按键中断。此外,该平台能适应不同应用系统要求的控制执行机构。
本指纹识别系统采用Windows CE作为操作系统。Windows CE是微软公司专门为信息设备、移动应用、消费电子产品等嵌入式应用领域设计的一款操作系统,它以开放性好、应用程序开发商众多、功能强大并且与PC及互联网的互动性强等优点而受到嵌入式应用开发者的重视。
要把Windows CE 移植到目标平台上,必须为平台内建设备提供驱动程序。Windows CE支持广泛的基于各种CE平台的设备驱动程序,也提供一些用于驱动开发的模型,包括来自其它操作系统的驱动程序模型。多种多样的驱动程序模型使得Windows CE 能适应大部分的内部和外围设备。
在Windows CE操作系统下提供了两种基于Windows CE的驱动程序模型:本地设备驱动(Native Device Driver)和流接口驱动(Stream Interface Driver)。两者的差别在于它们向上提供的编程接口不同:本地设备驱动可以根据具体设备的需求提供相应的接口,而流接口驱动则提供一组通用接口即流接口函数。本地设备驱动程序又称内置驱动程序,适合于集成到Windows CE平台上的设备有键盘、显示屏、PC卡插槽等内部设备;其它外部设备以及流设备则较多采用流接口驱动。流接口向上提供的编程接口使应用程序可以很方便地用访问文件的接口来访问设备。
这些驱动程序模型都可以采用图3给出的两种实现方式,图3的左侧是分层实现方式,右侧是一体实现方式,它们都向上提供DDI(Device Driver Interface)函数,供其它模块或应用程序调用。分层实现方式在设备驱动程序中被分为MDD(Mode Device Driver)层和PDD(Platform Dependent Device)层。微软公司提供的设备驱动样板程序大多采用分层实现方式。这些程序只需改动PDD层就可以移植到设备驱动领域,从而提高开发效率和驱动程序的可靠性。不过,对那些有较高性能要求的设备驱动或特别适合直接实现DDI的设备,一体实现方式更有效。
Windows CE下的设备驱动程序将操作系统与硬件联系起来,使得操作系统能够管理硬件设备,向应用程序提供访问硬件的调用。Windows CE的设备驱动程序开发步骤如下:1)选择驱动程序的接口:本地设备驱动和流接口驱动。
2)选择驱动程序模型的实现方式:一体实现方式或分层实现方式。
3)设计并实现驱动程序:如果选择本地设备驱动,大多直接修改微软公司提供的样板程序;如果选择流接口驱动,一体实现方式只需要按照相关规范实现流接口函数,而分层实现方式还需要设计MDD、PDD和DDSI。
4)安装驱动程序。

图3:Windows CE驱动程序的分层实现方式和一体实现方式。
指纹识别系统的设备驱动开发
一般来说,对于Windows CE没有内嵌特殊设备的驱动,使用流接口驱动模式开发快速有效;而对于Windows CE的本地设备则要尽量使用微软公司提供的样板程序,只需修改相应的硬件相关代码,从而缩短开发流程,提高驱动程序可靠性。
下面以图2系统中的设备驱动开发为例,讨论Windows CE设备的驱动开发过程。由图2可以看出,在这个系统中有三类设备的驱动程序需要实现,分别是人机接口设备、指纹采集设备和控制执行机构。
人机接口设备属于内部设备,Windows CE一般都提供了样本程序,按照硬件配置对样本程序进行适当修改就可以使用。而控制执行机构是系统提供的各种标准控制接口,使得本嵌入式系统可以方便地应用到实际应用中去。
这里主要介绍指纹采集设备MBF200的驱动开发过程。指纹采集设备属于外部设备,而且操作较为简单,我们采用流接口驱动模型,一体实现方式,并在驱动程序中具体实现以下函数: FPS_Init:从注册表中读取设备基址、系统中断号等硬件配置信息,探测指纹传感器的存在。如果使用中断,在这个函数里要使用interrupt Initialize注册中断号,生成中断服务线程(IST)。 FPS_Deinit:空函数,未实现
FPS_Open:初始化传感器的设置
FPS_Close:空函数,未实现
FPS_Read:读取指纹数据
FPS_Write:空函数,未实现
FPS_IOControl:通过定义不同的IOCTL_xxx,实现对指纹传感器参数的不同设置
FPS_Seek:空函数,未实现
FPS_PowerDown:空函数,未实现
FPS_PowerUp:空函数,未实现
虽然在本应用实例中并未实现这些空函数,但是随着硬件平台电路设计的不同,也可以加入相应的代码。比如一旦硬件实现了设备的电源管理,就可以在FPS_PowerDown和 FPS_PowerUp中实现相应的电源管理代码。
使用Windows CE平台定制工具Platform Builder或eVC中的编译器进行编译链接,生成动态库dll文件,导出相关接口函数。当然在应用程序访问设备之前还需要安装驱动程序,安装驱动程序有两种方式,第一种是系统启动时使用设备管理器自动安装,相应的注册表设置如下:
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\FPS]
"Prefix"="FPS" ;向系统注册设备名FPS(FingerPrint Sensor)
"Dll"="fps.dll" ;对应的动态库文件
"IoBase"=dword:BC400000 :设备基址
"SysIntr"=dword:15 :设备使用的系统中断号
"Order"=dword:0 :设备管理器加载驱动的顺序
第二种方式比较简单,仅仅需要把生成的动态库文件拷贝到Windows目录下即可。当然这两种实现方式的驱动代码实现略有差别,第二种实现方式的Init函数需要对注册表项进行设置而不是读取。
在实际系统设计时,我们采用了第一种方式,目的是便于以后的程序移植。
完成上述步骤之后,在应用程序中就可以使用文件I/O接口直接访问设备了。打开设备的代码如下: HANDLE hSensor = CreateFile(L"FPS1:",
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,
NULL);
在成功打开设备之后,就可以使用ReadFile函数直接读取指纹数据。如果驱动程序实现了中断服务例程,那么一旦中断被触发,中断服务例程就会自动传回指纹数据。
本文小结
本系统的每枚指纹采集时间为30-50毫秒,在指纹辨识一对多的情况下,每枚指纹的比对大约耗时60毫秒,若本系统注册有20枚指纹,那么完成比对的平均时间大约为1秒。本系统除具有界面友好、误识率低等优点外,还具有联网功能,因而既可在本嵌入式系统处进行管理员和用户的登录、删除、更改,又可通过网络服务器进行集中登录管理、分散开门,这种方式尤其适合办公楼管理和旅馆客户群。
作者:朱雅轩,蒋健,北京理工大学;苏晓虎,北京铱波电子公司
转自:http://www.ed-china.com/ART_8800016149_400008_500014_TS.HTM