查看完整版本: 基于指纹识别的大学生体育锻炼管理系统

admin 发表于 2015-4-27 08:08:35

基于指纹识别的大学生体育锻炼管理系统

一、项目概述
        1.1 引言
        人的指纹是生物特征之一。指纹识别是生物识别技术中最为成熟的, 其唯一性、稳定性, 一直都被视为身份鉴别的可靠手段之一。在当今大学生活中,大学生的身体素质逐渐达不到标准,需要学校引导学生进行锻炼。然而若进行人工管理会非常不便,而进行机器智能管理,则相对简单。而指纹识别,能将各个学生的信息统一进行管理,促进了学校对学生体育锻炼的管理。
       
        1.2 项目背景/选题动机
        本系统基于Xilinx的FPGA开发平台Nexys™3 Spartan-6 作为核心控制器件,这款器件拥有48M字节的外部存储器,以及丰富的I/O器件和接口,适用于本系统。通过一些高精度的指纹识别算法,然后通过FPGA的运算,我们达到指纹图像的采集,存储,处理和对比功能,SDRAM 和Flash分别用作存储指纹程序运行时的临时数据和指纹数据信息。同时,通过USB与电脑相连,在电脑中建立数据库,并实现FPGA与电脑的通信,完成指纹识别管理系统。
       
        二、需求分析
        2.1 功能要求
        使用指纹采集器采集指纹信息,传送至SDRAM存储。在FPGA上对指纹进行处理和匹配,同时编写程序使FPGA与计算机通信并且在计算机上建立数据库,使得可以使用计算机的数据库完成数据管理。
       
        2.2 性能要求
        实现以精准,快速,实用性强的指纹识别系统。同时实现良好的FPGA与计算机通信的功能。
       
        2.3 系统要点
        本系统主要难点在于指纹识别的算法以及XILINX 与PC机通信时所需要写的驱动。
       
        三、方案设计
        3.1 系统功能实现原理
        本系统采用Xilinx公司 Spartan 6系列FPGA作为核心控制芯片,通过FPC1011F传感器采集指纹传送至存储器SDRAM存储。在Spartan上运行的指纹处理程序对指纹信息进行处理获得特征点,并存储在SDRAM中或与SDRAM中的指纹信息进行匹配。最终,通过USB与计算机通信,使用计算机中的学生数据库。
       
        系统框图如图所示:
       
       
       
        3.2 硬件平台选用及资源配置
        3.2.1 指纹传感器FPC1011F
        FPC1011F 是瑞典Fingerprint Cards公司成功推出的一种电容式面装指纹传感器。该传感器采用了多项专利,如独立的晶圆体信号放大、传感器表面的保护膜等。内部具有A/D转换,高速的SPI接口,8PIN的软排线可以方便的接入各种系统。
       
        FPC1011F指纹传感器具有以下特点:         
        (1)FPC1011F芯片产自瑞典,采用独特的反射式测量法,抗静电可达正负15 kV,耐磨100万次,已被国内金融界公认为银行指定零件。
        (2)采用专业的指纹识别芯片PS1802DSP和最优化的指纹算法,指纹成像效果好。
        (3)处理速度快,峰值能达到480MIPS,在1:1 000模式下,时间小于1 s。
        (4)功耗较同类产品低,正常工作主频120 MHz下,只有120 mW。
        (5)模块体积为35 mm×26 mm×1 mm,便于各种指纹产品的开发。
        (6)对干湿手指有自动调节功能。
       
        FPC1011F指纹传感器含有小电容板,传感器使用高灵敏度像素放大器,让每个像素即使是非常微弱的信号FPC1011F都能探测到,以此提高图像质量。用了交替命令的并排列和传感器电板,交替板的形式是两个电容板,以及指纹的山谷和山脊成为板之间的电介质。两者之间的恒量电介质传感器检测变化生成指纹图像。
        3.2.2 SPI 通信接口
        SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。
       
        SPI总线系统是一种同步串行外设接口,它可以使MCU与各种外围设备以串行方式进行通信以交换信息。外围设置FLASHRAM、网络控制器、LCD显示驱动器、A/D转换器和MCU等。SPI总线系统可直接与各个厂家生产的多种标准外围器件直接接口,该接口一般使用4条线:串行时钟线(SCK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线SS(有的SPI接口芯片带有中断信号线INT、有的SPI接口芯片没有主机输出/从机输入数据线MOSI)。
       
        SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(用于单向传输时,也就是半双工方式)。也是所有基于SPI的设备共有的,它们是SDI(数据输入),SDO(数据输出),SCK(时钟),CS(片选)。
       
        SDO – 主设备数据输出,从设备数据输入 。
        SDI – 主设备数据输入,从设备数据输出 。
        SCLK – 时钟信号,由主设备产生 。
        CS – 从设备使能信号,由主设备控制 。
       
       
        图3.3 SPI接口信号
       
        其中CS是控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时(高电位或低电位),对此芯片的操作才有效。这就允许在同一总线上连接多个SPI设备成为可能。 接下来就负责通讯的3根线了。通讯是通过数据交换完成的,这里先要知道SPI是串行通讯协议,也就是说数据是一位一位的传输的。这就是SCK时钟线存在的原因,由SCK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。数据输出通过 SDO线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿被读取。完成一位数据传输,输入也使用同样原理。这样,在至少8次时钟信号的改变(上沿和下沿为一次),就可以完成8位数据的传输。
       
        要注意的是,SCK信号线只由主设备控制,从设备不能控制信号线。同样,在一个基于SPI的设备中,至少有一个主控设备。这样传输的特点:这样的传输方式有一个优点,与普通的串行通讯不同,普通的串行通讯一次连续传送至少8位数据,而SPI允许数据一位一位的传送,甚至允许暂停,因为SCK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。也就是说,主设备通过对SCK时钟线的控制可以完成对通讯的控制。SPI还是一个数据交换协议:因为SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出。不同的SPI设备的实现方式不尽相同,主要是数据改变和采集的时间不同,在时钟信号上沿或下沿采集有不同定义,具体请参考相关器件的文档。
       
        在点对点的通信中,SPI接口不需要进行寻址操作,且为全双工通信,显得简单高效。在多个从设备的系统中,每个从设备需要独立的使能信号,硬件要稍微复杂一些。
       
        SPI接口在内部硬件实际上是两个简单的移位寄存器,传输的数据为8位,在主器件产生的从器件使能信号和移位脉冲下,按位传输,高位在前,低位在后。如图3.4所示,在SCLK的下降沿上数据改变,同时一位数据被存入移位寄存器。
       
        FPC1011F口主要由4个引脚构成:SPI_CK、SPI_DO、SPI_DI、/SS,SPI_CK是整个SPI总线的公用时钟,SPI_DO、SPI_DI作为主机,从机的输入输出的标志,SPI_DO是主机的输出,从机的输入,SPI_DI是主机的输入,从机的输出。/SS是从机的标志管脚,在互相通信的两个SPI总线的器件,/SS管脚的电平低的是从机,相反/SS管脚的电平高的是主机。在一个SPI通信系统中,必须有主机。SPI总线可以配置成单主单从,单主多从,互为主从。
       
        SPI的片选可以扩充选择16个外设。
       
        SPI接口的缺点:没有指定的流控制,没有应答机制确认是否接收到数据。
        3.2.3 SDRAM
        SDRAM:同步动态随机存储器,同步动态随机存储器,同步是指 Memory工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是自由指定地址进行数据读写。
       
        3.2.4FIFO模块
        此模块主要功能是对已经收到的指纹数据进行缓存,避免指纹数据的丢失,因此此系统SPI工作频率为16MByte,而UART串口工作频率为38MByte。所以需要设定FIFO来使得SPI和UART协调工作。
       
        3.2.5 UART模块
        此模块的主要功能是和计算机进行通信,把接受到的数据通过计算机数据库显示出来。
       
        3.3系统软件架构
        3.3.1 指纹采集步骤
       
       
       
       
[*]                                        初始化SPI接口模块
       
[*]                                        复位FPC1011指纹传感器
       
[*]                                        初始化传感器
       
[*]                                        发送启动传感器命令rd_sensor: 0x11
       
        读传传感器指令
                                                                                                                       
[*]                                                                                                        指令
                               
                                                                                                                       
[*]                                                                                                        rd_sensor   (11 H)
                               
                                                                                                                                                       
[*]                                                                                                        模式
                               
                                                                                                                       
[*]                                                                                                        串行
                               
                                                                                                                                                       
[*]                                                                                                        输入参数
                               
                                                                                                                       
[*]                                                                                                        1虚拟字节
                               
                                                                                                                                                       
[*]                                                                                                        数据延迟
                               
                                                                                                                       
[*]                                                                                                        (363±2)tCLK
                               
                                                                                                                                                       
[*]                                                                                                        返回字节
                               
                                                                                                                       
[*]                                                                                                        0
                               
                                                       
        数据延迟指直至FIFO中的数据有效前,指令的延迟该指令用来读取传感器全部或部分区域。
       
        该指令仅用于开启传感序列,指令本身并不返回任何数据。传感器序列的第一组数据在大约363个时钟周期后进入FIFO。此后每隔8个时钟周期,一个新字节就会写入FIFO,直至由XSENSE, YSENSE, XSHIFT和YSHIFT寄存器定义的区域被读取。
       
        如果FIFO装载数据已满,我们将让传感器暂停工作直至数据从FIFO中读出来防止溢出。在暂停期间所有分析模块均有效,ASIC将在一个正常传感操作中产生电流。
       
        指令输入后,SPI_DI将作为输入保持低电平,以防下一个字节被误认为一条新指令了。
       
        如果设置SPI_CS_N为高电平,读出程序将停止,为了在之后继续执行读出,我们需要使用rd_spidata指令。
       
        5) 重复发送读数据状态寄存器命令rd_spistat: 0x21直到指纹数据准备完毕。
                                                                                                                       
[*]                                                                                                        指令
                               
                                                                                                                       
[*]                                                                                                        rd_spistat    (21 H)
                               
                                                                                                                                                       
[*]                                                                                                        模式
                               
                                                                                                                       
[*]                                                                                                        串行
                               
                                                                                                                                                       
[*]                                                                                                        输入参数
                               
                                                                                                                       
[*]                                                                                                        1虚拟字节
                               
                                                                                                                                                       
[*]                                                                                                        数据延迟
                               
                                                                                                                       
[*]                                                                                                        0
                               
                                                                                                                                                       
[*]                                                                                                        返回字节
                               
                                                                                                                       
[*]                                                                                                        1
                               
                                                       
        SPI状态寄存器保存SPI接口状态信息,当接收到rd_spistat命令时,SPI_STAT寄存器中的内容将被返回。如果传感器读出指令正在执行,使用该指令不会中断读出指令。
       
        6) 发送读数据指令rd_spidata: 0x20 读取指纹数据并存入SDRAM中。
       
        读传SPI数据指令
                                                                                                                       
[*]                                                                                                        指令
                               
                                                                                                                       
[*]                                                                                                        rd_spidata    (20 H)
                               
                                                                                                                                                       
[*]                                                                                                        模式
                               
                                                                                                                       
[*]                                                                                                        串行
                               
                                                                                                                                                       
[*]                                                                                                        输入参数
                               
                                                                                                                       
[*]                                                                                                        1虚拟字节
                               
                                                                                                                                                       
[*]                                                                                                        数据延迟
                               
                                                                                                                       
[*]                                                                                                        0
                               
                                                                                                                                                       
[*]                                                                                                        返回字节
                               
                                                                                                                       
[*]                                                                                                        n
                               
                                                        发送读取SPI数据指令rd_spidata后,指纹像素数据将被返回。只要SPI_CS_N和SPI_DI保持低电平,数据将持续返回。
        3.3.2指纹数据存储的软件实现
        由于本次设计所采集的指纹图像过大,并且在指纹图像处理过程中多次生成处理后的图像信息,我们采用大容量的SDRAM作为存储介质。
       
        通过调用EDK自带的SDRAM IP内核,我们可以很方便的对SDRAM的读写操作进行控制。
       
        SDRAM写数据函数:
        void XDdr_mWriteReg(Xuint32 BaseAddress, unsigned RegOffset, Xuint32 Data)
       
        其中参数含义:
        BaseAddress:写数据在SDRAM的基地址
        RegOffset:地址偏移量,数据写在SDRAM的(BaseAddress+ RegOffset)位置
        Data:要写在SDRAM的数据
        SDRAM读数据函数:
        Void XDdr_mReadReg(Xuint32 BaseAddress, unsigned RegOffset)
        其中参数含义:
        BaseAddress:从SDRAM读数据的基地址
        RegOffset:地址偏移量,读出在SDRAM的(BaseAddress+ RegOffset)位置的数据
       
        3.3.3指纹图像预处理的软件实现
        指纹图像预处理可以分为图像分割、增强、二值化和细化等几个步骤,但是根据具体的情况,预处理的步骤也不尽相同。图像分割是指把指纹图像从背景中分离出来,减少后续处理的时间,提高特征提取的可靠性。也有一些文献将把指纹图像二值化,即将指纹脊(脊指的是手指皮肤凸起部姚按在指纹采集器上形成指纹图上的黑色线条;谷指的是脊之间的空白部分)从指纹图像中提取出来也归为图像分割部分。图像增强的目的是突出指纹纹线结构,抑制纹线上及背景中的噪声干扰;二值化是将指纹图像变为二值图像;细化是将前面两步己经处理过的指纹图像中指纹的脊的宽度降到最小,去除原纹线上的毛刺,使纹线更加清晰,尽量减少因为毛刺生成的伪交叉点、断点等。
       
        3.3.4 指纹图像的特征点提取
        常用的指纹特征描述方法是基于纹路结构特征.指纹特征可以分为全局特征、局部特征和细微特征. 全局特征包括:(i)基本纹路图案:基本纹路图案通常分为左箕型(letfloop)、右箕型(rightloop)、斗型(whorl)、拱型(acrh)和尖拱型(etntedacrh),如图4.6所示. (ii)模式区(PattemAera):模式区是指纹图像上包含了总体特征的区域,从模式区能够分辨出指纹属于那种类型. (iii)核心点(CorePoint):核心点位于指纹纹路的渐近中心,它常用作读取指纹和比对指纹时的参考点. (iv)三角点(Detla):三角点是指纹图像中三角形纹路区域的中心点,离该点最近的三条指纹纹线构成一个近似等边三角形,三角点提供了指纹纹路计数和跟踪的起始位置. 核心点和三角点统称为奇异点。 (v)纹数(Ridge Cuont):作为全局特征,纹数一般是指模式区内指纹纹路的数量. 也有些算法用某两个点之间的纹路数作为指纹特征,比如两个节点之间的纹路数。
       
       
        (1)左箕型      (2)右箕型         (3)斗型         (4)拱型         (5)尖拱型
        图4.6 基本纹路图案
       
        局部特征包括:(i)端点(Ending):一条纹路在此终结. (ii)分叉点(Biofcratino):一条纹路在此分成两条或多条纹路. (iii)分歧点(Ridge Divegrneee):两条平行的纹路在此分开. (iv)孤立点(Dot or Island):一条特别短的纹路,以至于成为一点. (v)短纹(ShortRidge):一条较短但不至于成为一点的纹路. (vi)环点(Enclosuer):一条纹路分成两条后又立即合成一条,这样形成的一个小环称为环点. (vii)桥(Bridge):两条并行的纹路在此被搭接起来. (viii)曲率(Curvauter):纹路方向改变的速度. 如图4.7所示。
       
       
        图4.7 基本纹路图案
       
        另外,除了局部特征外,从高分辨率的传感器采集的高质量的指纹图像中还可以提取比局部特征更细微的特征:毛孔. 提取毛孔特征一般要求传感器分辨率达到1000dpi,而且要求手指皮肤质量较高. 但指纹传感器的分辨率一般在500dpi左右,而且受环境、皮肤条件的影响,采集的图像中往往难以正确地提取毛孔特征,所以实际的系统中一般不使用毛孔特征.
        3.3.5 指纹图像的匹配
        指纹图像经预处理和特征提取后已消除了大量的冗余信息,得到了表示指纹特征本身的真实特征数据. 指纹匹配就是将两幅指纹图像的特征数据的相似性比较
       
        3.3.6 FPGA与计算机通信
        为了实现指纹能与数据库进行通信,需要使用完成PC机的通信。
       
        通信协议
        此部分主要完成接受指纹匹配特征信息并返回结果。返回结果在LCD上进行显示。
       
        此过程需要定义帧的标志定义。需要比较长的时间考虑。
       
        由于不同的开发平台针对应用于不同领域实现难易程度不同。所以指纹识别与匹配采用MATLAB编程,而COM+具有跨平台调用的优点,且操作方便。所以将COM+组件技术作为数据库接口部分。而数据库接口部分采用ACESS数据库。
       
        本系统期望实现指纹特征信息的存取,更新用户信息等相关操作。
       
        3.4 系统软件流程
       
       
页: [1]
查看完整版本: 基于指纹识别的大学生体育锻炼管理系统