当前位置:文档之家› 基于单片机的指纹识别系统设计

基于单片机的指纹识别系统设计

基于单片机的指纹识别系统设计
基于单片机的指纹识别系统设计

摘要

随着科学技术的发展,人们的安全意识也越来越强,因为指纹具有唯一性和终生不变性,所以指纹识别成为代替传统身份识别最安全、可靠的方法之一。

本设计基于飞思卡尔Kinetis K60N512系列单片机,指纹识别模块选择的是城章科技的R305F模块,该模块带有高性能的DSP芯片,该DSP芯片嵌完整的指纹识别算法和协议,具有指纹采集,指纹比对,指纹搜索和存储等功能。模块与单片机通过串口进行通讯。指纹识别系统通过CH340G芯片实现TTL电平向RS-232电平的转换,进而实现与PC机的交互,PC机端经上位机显示指纹识别的结果。论文中介绍了基本算法的实现流程,同时介绍了K60N512芯片看门狗模块的基本原理以及启动流程等。

结果表明,该套指纹识别系统算法性能可靠,指纹识别率高,可以实现预先制定的目标,完成指纹识别的功能。

关键词:指纹识别;飞思卡尔单片机;串口

Abstract

With the development of science and technology, people's safety consciousness is being more and more strong, the fingerprint has the uniqueness and invariance for life, so the fingerprint identification is instead of the traditional identification is one of the most safe and reliable methods.

This design is based on Freescale Kinetis K60N512 series microcontroller, fingerprint identification module is the product of Growup pany, the module with high performance DSP chip, and the DSP chip with plete fingerprint identification algorithm and protocol, fingerprint’s acquisition, fingerprint’s search and storage, and other functions.Module and microcontroller municationthrough the serial port.Fingerprint identification system use CH340G chip change TTL level to RS-232level, and then realize the interaction with a PC, the PC shows the result of fingerprint identification.The thesis introduces the basic algorithm implementation process, at the same time, this article introduces the basic principle of the watchdog module inside

K60N512 chip and the start process.Results show that the algorithm of fingerprint identification system is reliable, fingerprint recognition rate is high, and can achieve target of fingerprint identification.

Key Words:Fingerprint identification,Freescale Kinetis,UART

目录

摘要I

AbstractI

1 绪论1

1.1 选题背景和研究意义1

1.2 国外研究现状1

2 指纹识别的基本原理1

2.1 指纹图像的采集1

2.2 指纹图像预处理2

2.3 指纹图像特征点的提取4

2.4 指纹图像伪细节点的处理5

2.5 指纹特征匹配5

2.6 评价指纹识别系统算法性能的指标5

3 课题的容和目标7

3.1 指纹识别系统的硬件设计7

3.2 本设计所使用单片机简介7

3.3 本设计所使用的指纹模块简介8

4 主程序分析8

4.1 Cotex-M4核寄存器简介9

4.2 Cotex-M4中断机制9

4.3 K60N512启动代码分析10

4.4 K60N512看门狗程序分析12

4.5 Flash软件构件简介13

4.6 Kinetis 的FlexBus模块简介13

4.7 K60N512异步接收器/发送器(UART)简介14

4.8 指纹模块指令介绍14

4.8.1 指纹图像获取15

4.8.2 生成特征17

4.8.3 生成模板18

4.8.4 储存模板19

4.8.5 高速搜索19

4.9 补充说明20

结论18

致18

参考文献18

1 绪论

1.1 选题背景和研究意义

随着我国经济的迅速发展,人民的生活水平得到了显著的提高,人们对于自己的隐私也愈发重视。传统的电子密码锁等设备在高速发展的科学技术的冲击下显得力不从心,用户隐私很大程度上存在泄露的风险。由于每个人的遗传基因不同,指纹也不相同,指纹识别技术的作用也因此越来越受到人们的重视。指纹是人身体上的一部分,是人所固有的生理特征,不用记忆,也不存在忘带的风险,而且每个人的指纹形状终身不变。所以指纹作为个人身份的标记是再合适不过的了。

1.2 国外研究现状

早期的指纹识别是以人工的方式进行的,由于指纹结构的复杂性以及对指纹识别要求的严格性,导致人工识别指纹工作难度大、速度慢和识别准确率受到制约,远远不能适应实际工作的需要。计算机技术的诞生与发展,为复杂的科学计算和指纹自动识别提供了可能,20世纪70年代,美、日等发达国家开始先后研究指纹识别系统。我国自动指纹识别系统的研究开发始于20世纪80年代,大学信息中心、清华大学自动化系、邮电大学、中科院以及光机所等都在此领域做了一定的工作,且取得了一定的成果,其中较为突出的是清华大学自动化系和大学信息中心两家[1]。

当然,与国外发达国家相比,我国在自动指纹识别技术的研究上还与之存在很大的差距。指纹录入设备的质量不够高,自动指纹识别算法的性能还不够好。加强这方面的研究还是很有必要的。

2指纹识别的基本原理

2.1指纹图像的采集

人的皮肤由表皮、真皮和皮下组织三部分组成。指纹指的是表皮上突起的纹线,有斗型、弓型和箕型三种基本类型。

获得良好的指纹图像是进行指纹识别的前提,目前光获取指纹图像的方法主要有光学技术、硅技术(CMOS技术)和超声波技术。本设计中使用的指纹传感器基于硅技术,

硅技术的优点是可以在较小的面积上获得较好的指纹图像(相对于光学技术),缺点是容易受到外部条件的干扰,可靠性相对较差。

2.2指纹图像预处理

图像预处理阶段是指纹识别的第一个阶段,图像预处理阶段比较典型的过程主要有图像质量评估、分割、增强、二值化和细化。指纹图像预处理的流程图如图2.1所示。

图2.1 指纹图像预处理的流程图

图像质量评估的目的主要是完成对传感器采集到的指纹图像的总体质量评价,对于低质量的指纹图像直接拒绝。对于质量达到要求的指纹图像才送给之后的处理环节,从而避免了不必要的运算。

分割的目的是将前景与背景分割开来。分割操作中应该尽可能去除无效区域,保留有效区域。有了分割操作,指纹图像预处理的时间可以大大缩短。

增强的目的主要是为了消除噪声的干扰,提高指纹图像纹线结构的清晰度。Gabor 滤波的方法是一种比较理想的指纹图像增强算法,Gabor滤波器可以同时在空间域和频率域上获得最佳的分辨率,具有良好的方向选择性和带通性。

二值化是将原来的灰度图变换为黑白两种灰阶的图像,二值化阶段阈值的选择相当重要,阈值的选择有双峰法、P参数法、大津法(Otsu法或最大类间方差法)、最大熵阈值法和迭代法(最佳阈值法)等。

细化阶段主要是将二值化之后指纹图像的脊线宽度降低为单个像素宽度,从而得到细化了的指纹图像。细化算法按迭代方式的不同可以分为串行算法和并行算法。

预处理阶段的每个环节是紧密相关的,各个环节相互配合才可能获得高质量的指纹图像,从而方便之后特征点的提取,为之后指纹匹配奠定良好的基础。正常的指纹图像如图2.2所示,二值化之后的指纹图像如图2.3所示,细化之后的指纹图像如图2.4所示。

图2.2正常的指纹图像图2.3二值化之后的指纹图像

图2.4细化之后的指纹图像2.3指纹图像特征点的提取

特征点提取的目的在于通过预先制定的算法检测指纹图像中奇异点和细节点这两类特征点的数量以及每个特征点的类型、位置和所在区域的纹线方向。奇异点指的是指纹图像的中心点和三角点。细节点指的是端点(Endpoint)、叉点(Bifurcation)、孤点(Dot)、环点(Loop)、短纹(short Ridge)等。一般的指纹图像提取的特征在10-100个之间,多数文献认为至少应该有12个特征点才可以进行匹配。8邻域编码纹线跟踪算法是一种常用的特征点提取算法。

2.4指纹图像伪细节点的处理

伪细节点的处理一般分为两类:一种在特征点提取之前,对预处理之后的指纹图像进行平滑、去除毛刺连接断纹等操作,之后提取特征作为真正的特征;另一种是特征提取之后,根据特征之间的相互关系,尽可能的识别伪特征点并滤除它们。应用以下两条真伪细节点的量化判断准则判断真伪细节点:

(1)端点不应该与其它细节点相连;

(2)分叉点不应该与其他的端点和分叉点相连。

2.5指纹特征匹配

目前,指纹匹配的相关方法主要有图像相关匹配、纹理特征匹配、纹线匹配以及细节点匹配等。前两者匹配速度快,但由于忽略了指纹的细节特征,匹配准确性不高。细节点匹配算法的难点在于:

(1)细节点提取过程会产生虚假特征点和丢失真实细节点;

(2)指纹图像普遍存在平移和旋转;

(3)指纹图像之间重合区域小,相同手指指纹的细节点集之间对应关系难以确定;

(4)图像采集过程中,由于非线性映射、手指按压力度不均造成了扭转。

2.6评价指纹识别系统算法性能的指标

评价指纹识别系统算法的性能指标有3个,分别为拒识率(FRR)、误识率(FAR)和正确识别率(CR)。

误识率(FAR)是指在已提取的特征点的指纹样本库中,不同指纹匹配分数大于给定阈值判断为匹配的比率。其计算如下式:

100%rejetnum

FAR totalnum

=

?(2.1)

拒识率(FRR)是指在已提取的特征点的指纹样本库中,相同指纹匹配分数小于给定阈值误判为不匹配的比率。其计算如下式:

100%

rejetnum

FRR totalnum =

?(2.2)

正确识别率(CR)计算如下式:

100%

correctnum

CR totalnum =

?(2.3)

式中 :

totalnum rejetnum falsenum correctnum =++

从式2.1到2.3可以看出,FRR 与FAR 呈现反比例关系,随着匹配阈值的降低,拒识率(FRR)相应降低,误识率(FAR)升高,反之亦然。所以应该充分考虑系统的需要,在拒识率(FRR)与误识率(FAR)之间找到一个最佳平衡点。

3课题的容和目标

3.1指纹识别系统的硬件设计

系统的结构框图如图3.1所示,该系统主要完成指纹的采集、处理和匹配等操。主要有以下几个模块,指纹采集模块,K60N512单片机模块以及显示模块等。

图3.1 系统的结构框图

3.2本设计所使用单片机简介

在嵌入式设备处理器的市场争夺中,ARM系列处理器凭借其小体积、低功耗、低成本和高性能,几乎垄断了该市场。本设计所使用的飞思卡尔K60N512单片机便是基于ARM Cotex-M4核,Cotex-M4核面向数字信号控制市场,具有高效并且易于使用的控制和信号处理能力。Cote-M4属于ARMv7架构,该架构采用了Thumb-2技术,该项技术比纯32位代码少使用31%的存,减少了系统开销。同时,Cotex-M4核具有一个单时钟周期乘法累加(MAC)单元、优化的单指令多数据(SIMD)指令、饱和运算指令和一个可选的单精度浮点运算单元(FPU)。此外,该核提供最佳的代码密度和一个嵌套向量中断控制器,可以出色的完成中断处理。

Cotex-M4核框图如图3.2所示。

图3.2 Cotex-M4核框图

3.3本设计所使用的指纹模块简介

指纹模块选择了城章科技的R305F模块,该产品是该公司2011年推出的最新产品。指纹模块采用了瑞典FingerPrint Card公司的FPC1011F3型指纹传感器,这款传感器利用了反射式探测技术,成像质量高,对干湿手指都具有良好的适应性。FPC1011F3是一款电容式传感器,传感器分辨率为363dpi,置8位数模转换器,它通过SPI接口与模块上面的高性能DSP芯片相连。高性能的DSP芯片嵌完整的指纹识别算法和协议,具有指纹采集,指纹比对,指纹搜索和存储等功能。模块通过串口与单片机进行通讯,数据发送端接上位机的数据接收端,数据接收端接上位机的数据发送端。本系统通过单片机与指纹模块的通信实现了自动指纹识别的功能。

首先将个人指纹信息录入指纹模块,之后指纹传感器采集指纹信息且与存储在指纹模块里面的指纹模板进行比对,若找到指纹,返回该指纹所对应的信息,送LCD显示,若未找到,提示未找到信息。

4 主程序分析

4.1 Cotex-M4核寄存器简介

Cotex-M4的寄存器有:R0~R15。其中R0~R12是32位通用寄存器,其中R0~R7又被称为低组寄存器,R8~R12被称为高组寄存器。32位的Thumb-2指令可以访问所有通用寄存器。R13:堆栈指针寄存器(SP Stack Pointer),它分为两部分,一个叫做进程堆栈指针PSP(Process Stack Pointer),一个叫做主堆栈指针MSP(Master Stack Pointe),但在同一时刻只用到了其中的一个,配置控制寄存器(CONTROL)的CONTROL[1]位来选择是使用PSP还是MSP。R14:寄存器(Link Register),子程序调用、函数调用以及异常处理时,由R14存储返回地址,复位时R14里面的值为0xffffffff。R15:程序计数寄存器(Program Counter),指向当前程序的地址,修改它的值,就可以改变程序的执行流。

同时Cotex-M4还在核水平上搭载了若干特殊功能寄存器,包括程序状态字寄存器组(PSRs或xPSR)、中断屏蔽寄存器组(PRIMASK、FAULTMASK和BASEPRI)和控制寄存器(CONTROL),且只能用MSR和MRS指令访问它们。

4.2 Cotex-M4中断机制

Cotex-M4在核水平上搭载了一个异常响应系统NVIC,支持为数众多的系统异常和外部中断。NVIC位于核部,通过私有外设总线访问。编号为0—15的对应系统异常,编号16及以上为外部中断。与经典的ARM7TDMI,ARM926EJ-S相比较,在核层次实现了向量中断控制器。当发生了异常并且要响应时,Cotex-M4需要定位其服务例程的入口地址,这些入口地址存储在异常向量表中。

通常中断程序的处理流程为:关闭系统总中断、开启外设模块并使能该外设模块中断、配置NVIC模块中的中断寄存器以及开总中断等几个过程。NVIC会根据优先级的设置来控制抢占与嵌套行为。因此,在某个异常正在响应时,所有优先级不高于它的异常

都不能抢占之,而且它也不能自己抢占自己。如果一个已经被挂起的中断被使能,NVIC 会根据优先级来决定是否服务这个中断。当然,一个被禁止的中断被触发挂起,无论怎样的优先级,NVIC都不会服务它。

高优先级中断可以抢占并挂起低优先级中断,同时将低优先级中断上下文保存于系统中断栈中,以便下次系统恢复时继续执行。当一个高优先级中断执行完以后,系统会在挂起的中断中选择一个优先级最高的中断继续执行,这个过程由Cotex-M4的NVIC自动完成,由于中断只使用中断栈,每嵌套一级中断,至少需要保存32个字节(核寄存器的容)于堆栈空间,加之中断服程序(ISR)运行过程中也需要利用中断栈空间,系统中出现较深的嵌套中断时,系统对中断栈空间的需求较高,所以中断环境初始化时,应视最深中断深度,合理分配中断栈空间大小。Cotex-M4从一个中断源发出中断请求信号到硬件响应中断请求的延迟时间固定位12个周期。这12个周期系统执行入栈和取栈等一系列操作,若中断信号连续发生,Cotex-M4可优化中断与中断间的硬件响应间隔时间至6个周期[2]。

4.3 K60N512启动代码分析

启动代码用来完成对系统的初始化,它通常包含以下几部分:中断向量表定义,地址重映射及中断向量表的复制,堆栈初始化,系统时钟频率设置,中断寄存器的初始化和进入用户程序等部分[3]。

K60N512上电时地址在0x00000000处,系统上电之后,从0x00000000处取堆栈指针到SP,之后从0x00000004处取程序指针到PC,然后跳转至PC指针所指向的地址开始执行程序。K60N512芯片可以在RAM和Flash中执行代码,在RAM中执行速度更快,因此通常将中断向量表和数据复制到RAM空间中。BSS段是指用于存放程序中未初始

化的全局变量和静态变量的一块存区域,数据段存放初始化后了的全局变量和静态变量。

芯片主时钟是利用MCG模块中的PLL模块,倍频50MHZ有源晶振得到的。Kinetis 芯片部存在3种不同的时钟:核时钟,总线时钟和flash时钟。其中核时钟是基本时钟,其他时钟均从核时钟分频得到。MCG模块为MCU提供了多种时钟源,其部包含一个锁频环(FLL)和一个锁相环(PLL),FLL接受部或外部的参考时钟源,PLL接受外部参考时钟源,外部时钟参考源来自OSC模块。

该部分启动代码由飞思卡尔公司提供,完成了芯片的基本初始化。K60N512芯片的启动程序流程图如图4.1所示。从流程图中可以看到芯片初始化的基本过程,启动代码的最终目的是跳转到main函数,在main函数里面加载关于指纹识别的相关操作代码,可以说这段代码的存在降低了开发的难度。

图4.1 启动程序流程图4.4 K60N512看门狗程序分析

本设计中采用了普通看门狗,以确保程序跑飞之后及时复位,增加了系统的可靠性。K60N512的看门狗寄存器是只写一次寄存器,即上电后只能对其进行一次写入,若要多次写入,必须先解锁看门狗。解锁看门狗是向看门狗的解锁寄存器(WDOG_UNLOCK)连续写入0xC520和0xD928,两次写入时间间隔不能超过20个时钟周期,否则解锁不成功。解锁看门狗后通过配置看门狗状态控制寄存器(WDOG_STCTRLH)的WDOGEN位来关闭看门狗。

使能看门狗以后,会在溢出时间超时之后产生看门狗复位。程序中必须在溢出超时前进行喂狗操作,喂狗之后看门狗模块重新计时,MK60N512的喂狗操作是向看门狗刷新寄存器(WDOG_REFRESH)连续写入0xB480和0xA602,两次写入时间间隔同样不能超过20个时钟周期。看门狗的溢出时间通过设置WDOG_TOVALH和WDOG_TOVALL寄存器实现。

4.5Flash软件构件简介

Flash存储器的特点是断电后保持数据,微控制器使用Flash存储器来存储代码和数据,有时也将系统运行状态参数保存在Flash中。K60512部集成512K的Flash,分为256个扇区,Flash存储器的特点是只能将数据从1写为0,不能从0写为1,写入的最小单位为一个字节,擦出的最小单位一个扇区(2K)。

Flash存储器部集成Flash控制器,控制器可以接收并执行命令。

4.6 Kinetis 的FlexBus模块简介

FlexBus片选地址寄存器(FB_CSARn)用来配置相应外部片选信号FB_CSn的地址围(基地址), FB_CSn为低电平时选中相应的外设。片选控制寄存器(FB_CSMRn)里面的FB_CSCR[PS](端口大小)与FB_CSCR[BLS](对齐方式)相配合,决定FlexBus数据总

线的端口分配和大小。引脚复用功能控制寄存器(FB_CSPMCR),配置该寄存器设置FlexBus引脚复用功能。

4.7 K60N512异步接收器/发送器(UART)简介

UART接收器可以容纳8、9或10位数据字符。UARTx_c2[RIE]位和UARTx_c2[TIE]位的设置决定是否允许接受和发送中断,若使能中断,必须首先实现中断服务程序。设置UARTx_C2[RE]位和UARTx_C2[TE]位使能UART接收机和发送机。UARTx_C1[M]位、UARTx_C1[PE]位和UARTx_C4[M10]位的状态决定数据字符的长度。UARTx_S2[MSBF]位设置为1时,接收器操作使得在起始位后面接收的第一位是数据字的最高有效位。奇偶校验位(该位禁用的情况下选择停止位)之前接收到的位被当作数据字的最低有效位,所有必要的位顺序是由模块自动处理。

UARTx_BDH寄存器与UARTx_BDL寄存器一起控制UART波特率发生器的预分频因子。更新13位波特率设置时,首先写BDH缓冲新值的高半部分,然后写BDL。直到BDL 被写入时BDH中的值才会变。

UART初始化函数主要实现了UART数据格式,波特率,UART模块时钟使能等工作。

UART构建测试可以通过查询和中断两种方式实现。查询方式通过不断调用接收函数,查询接收标志是否有效来判断是否成功接收数据。中断方式通过中断服务程序实现,成功接收一个字节之后,芯片自动跳转至中断服务程序,中断服务程序中调用接收一个字节的函数来接收数据。K60N512的UART可以稳定工作在115200bps下。

4.8指纹模块指令介绍

主程序中指纹存储程序流程图如图4.2所示,指纹搜索程序流程图如图4.3所示。

用到的指纹模块指令分列如下:

4.8.1 指纹图像获取

发送获取指纹图像的指令,等待接收应答包。指令的指令包和应答包的格式分别如表4.1和表4.2所示。

表4.1指令包格式

2 bytes 4 bytes 1 byte 2 bytes 1 byte 2 bytes

模块地址包标识包长度指令码校验和0xef01 0xffffffff 01H 03H 01H 05H

表4.2应答包格式

2 bytes 4 bytes 1 byte 2 bytes 1 byte 2 bytes

模块地址包标识包长度确认码校验和0xef01 0xffffffff 07H 03H xxH sum

图4..2 指纹存储程序流程图

图4.3 指纹搜索程序流程图4.8.2生成特征

相关主题
文本预览
相关文档 最新文档