[计算机毕业设计]机器视觉指纹识别图像识别

news2025/4/18 14:58:16

前言

    📅大四是整个大学期间最忙碌的时光,一边要忙着准备考研,考公,考教资或者实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过和节省时间与精力投入到更重要的就业和考试中去,学长分享优质的选题经验和毕设项目与技术思路。

🚀对毕设有任何疑问都可以问学长哦!

本次分享的课题是

🎯机器视觉指纹识别图像识别

课题背景与意义

 传统的基于细节点的指纹识别是通过一系列的图像处理和操作技术才能完成,随着近年来人工智能技术的不断发展,将卷积神经网络应用在指纹识别匹配上成为了可能。在本文章中,首先介绍了孪生神经网络的定义,之后会讲解如何利用Tensorflow2.X结合孪生神经网络来完成基于公开指纹数据集的指纹识别任务。

课题实现技术思路

孪生神经网络

     孪生神经网络英文简称为Siamese网络,它的主体结构是由一对共享相同权值的神经网络所组成的,通常被用于来计算数据之间的相似度,也正是因为具有相同的权值,因此才被称为“孪生”。值得注意的是,它并不是一个具体的神经网络模型,而只是一个架构,其中两边的输入网络可以被自定义设置为具体的CNN卷积神经网络或其它模型,其示意图如图1所示。

图1  孪生神经网络

    虽然这里强调的是共享相同权值的一对神经网络才能被称为孪生神经网络,但事实上也可以让它们的权值各不相同,但这样的网络则有另一个称呼,即被称为伪孪生神经网络,其示意图如图2所示。孪生神经网络由于共享权值,因此适合于处理输入是一对较为类似或近似的数据的情况,这样共享的权重才能对两边的数据都有着较好的适应性。反之,如果输入的一对数据本身存在着较大的差异,例如图像和字幕之间的关联,那么即可以通过伪神经网络来进行处理。

                      图2    伪孪生神经网络

    通常来说,输入到孪生神经网络里的一对数据最后都会被分别转换成一个向量的形式,之后根据这二者向量之间的差异来得到它们之间的相似度,例如常见的度量指标有欧氏距离和余弦距离等。整个网络的训练目标是让两个相似的输入距离尽可能的小,而让两个不同类别或差异较大的输入距离尽可能的大。以人脸识别为例,同一个人的脸被认为是相似输入,而不同人的人脸即被认为是不同输入,其示意图如图3所示。

图3   孪生神经网络的输入数据

      另外可以计算输入图像相似度的网络不单单只有孪生神经网络和伪孪生神经网络,例如三输入的三元组Triplet网络同样也可以实现。虽然事实上分类网络也可以达到这样的效果,但通常来说它更多被应用于判断事物的总体分类,例如猫狗分类,而较少去关注个体分类,例如判断输入的猫是不是同一只猫。因此就目前来看,较为主流的相似度评判网络还是以孪生神经网络、伪孪生神经网络和三元组网络这三者为主。

     将孪生神经网络应用到当前的指纹识别实战任务中去,即是将网络的输入数据替换成指纹图像。同一个人的指纹输入即为相似输入,不同人的指纹输入即为不同输入,而该网络的设计目的便是让它可以根据输入的指纹图像来判断这对指纹是否属于同一个人,即达到指纹识别的目的。通常其中一个输入可被视为是保存在数据库里的指纹模板,另一个输入则是当前用户访问服务时被采集到的指纹数据,其模型示意图如图4所示。

图4     基于孪生神经网络的指纹识别

 CASIA指纹数据集

   在本小节中,所使用的指纹数据来自于中国科学院生物特征与安全研究中心里的指纹数据库,其数据下载网站为:   http://biometrics.idealtest.org/findTotalDbByMode.do?mode=Fingerprint

     登录到网站之后,会看到如图5所示的页面,其中左侧上方是数据的分类,包含了常见的生物特征数据如虹膜、指纹、脸和掌纹等,而右侧则是当前所定位到的多个版本的指纹数据集,在本次实战中这里选用右侧最上方出现的指纹数据集即CASIA Fingerprint Subject Ageing Version 1.0.

           图5  CASIA指纹数据集下载页面(1)

     由于在该网站中下载相关数据集需要以个人账户的形式进行访问,因此需要事先注册一个账号。首先点击右上方Register按钮跳转至如图6所示页面,之后点击右下方的IAgree按钮并同意相关协议后跳转到如7所示的个人信息页面。在填报好相关内容之后,会对指定的个人邮箱发送验证信息,通过之后便可以拥有一个可以访问于该网站的个人账号。

                  图6  CASIA指纹数据集下载页面(2)

       

      登录账号并点击先前的CASIA Fingerprint Subject Ageing Version 1.0.数据集进行下载,下载完成并解压之后一共会得到2009和2013两个年份收集到的指纹数据集,其中具体文件结构如图8所示。

                   图8   CASIA指纹数据集文件结构

     在图8中,从上至下,2009和2013代表的是指纹数据收集的年份,uru4000、T2和uru4500代表的是传感器的类型,1、2表示的是收集指纹的批数,1代表第一批,2代表第二批。而0000等数字表示的是被采集者的ID,最后获得到的数据格式会是诸如RRRR_IIIIF_XXXX_Z_S.bmp这样的形式,其不同序号表达的具体信息如图9所示。以图9.20所示的0403_00001_0000_0_S.bmp为例,0403表示的是当前采集这个指纹所使用的传感器ID(不是类型),第一个0000表示的是被采集者的ID,紧接其后的1表示的是采集的是右食指,第二个0000表示的是图像的索引序号,而最后一个0则是表示被采集的当前次数。

                      图9     CASIA指纹数据名称含义

     整个CASIA指纹数据集一共由5880张指纹组成,它们分别采自于不同的实验对象,其中针对每个实验对象的左、右食指和中指进行一共20次指纹图像的采集,即每个手指分别会被采集5次,图10展示了CASIA数据中的一个试验者被采集到的左、右食指和中指的指纹图像。

   

                   图10  CASIA指纹数据集案例

 指纹对齐实战

     由于在CASIA指纹数据集中,采集到的指纹数据特征有可能各不相同,有些采集到的指纹特征甚至已经遭到破坏(如潮湿、刮伤等),因此分析这种包含各种真实情况的指纹数据集会更加具有实际意义。而在利用孪生神经网络对不同人的指纹进行匹配之前,最重要的一步那便是指纹的对齐操作。

     由于在指纹采集的过程中手指会产生旋转、偏移或错位,因此采集到的指纹图像其中很多都是无法正常对齐的,特征点无法直接进行匹配,图10展示了一幅在CASIA数据集中同一个人相同手指在不同时间点时被采集到的指纹图像,从图中可以观察到即便被采集的是相同的手指,但所被标注的重点区域却是各不相同的且无法通过肉眼直接将它们对应起来。而倘若指纹识别系统没有对某个人验证时采集到的指纹进行对齐或矫正,那么该指纹就很难与储存在数据库中的指纹模板匹配起来,由此则会产生验证失败。

                        图10      同一个人相同手指被采集的指纹图像

      针对指纹的对齐算法来说,目前应用较为广泛的其中一种是SIFT算法或SURF算法。SIFT算法全称为Scale-invariant feature transform,即尺度不变特征变换。而SURF则可以看作为是SIFT算法的一种改良,通过一种更高效的方式来完成特征的提取和描述,其全称为Speeded Up Robust Features,即加速稳健特征。由于在本实战中更注重的是神经网络模型的搭建和训练,因此这里仅仅只对SIFT特征点匹配算法进行简要的介绍,后续其可以通OpenCV第三方库来进行直接调用。

      SIFT算法于1999年被David Lowe所提出,其之后被广泛应用于计算机视觉里的各个领域里,如图像识别、图像匹配和目标检测等,它是一种基于局部兴趣特征点的算法,不受图像尺度和旋转的影响,同时也对光照和外部因素有着很强的抗干扰性,因此适合被用作于图像的分析上,尤其是在目标检测领域里一直备受关注,即便是今日,该算法依旧被许多研究学者所采用。

     SIFT算法主要可以被划分为2个步骤,即特征点的检测和特征点描述。在特征点检测阶段,SIFT会利用DoG(Difference of Gaussian)算法先进行角点检测,将一些变化明显的区域如边缘和角当作特征点,因为它们相对于平滑区域来说变化相对更加明显。之后在特征点描述的建立阶段,SIFT首先会计算得到图像局部区域的梯度直方图,并将它转换成一定维数的特征向量。之后在计算出特征向量后会再对领域的特征向量进行归一化处理并计算出该区域关键点的主方向,而领域的特征可以根据主方向进行特定方向的旋转,使其具有旋转不变性,同样地,也可以根据领域中各像素的大小进行指定尺度的缩放,从而实现尺度不变性。

     旋转不变性和尺度不变性是图像分类和目标检测等任务中最重要的两个性质,而迁移到图像对齐任务中来,同样也十分重要。以刚才提到的指纹对齐为例,在利用了SIFT算法后,即便采集到的是旋转、偏移的指纹图像也能和数据库中的指纹模板进行匹配,而其中原因便是SIFT算法具有旋转不变性和尺度不变性,能够从这些有着旋转、偏移的指纹图像中提取出正确的特征点,之后根据输入指纹的特征点位置与数据库存储的指纹模板的特征点位置进行比较和矫正,便可完成指纹的对齐工作。

🚀海浪学长的作品示例:

大数据算法项目

机器视觉算法项目

 

微信小程序项目

Unity3D游戏项目

最后💯

🏆为帮助大家节省时间,如果对开题选题,或者相关的技术有不理解,不知道毕设如何下手,都可以随时来问学长,我将根据你的具体情况,提供帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/23984.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2022Q3运动户外行业数据分析(高增长概念解读)

本篇我们将继续来分析22年Q3季度中,运动户外行业的高增长概念。 在运动户外行业中,我们发现了3个高增长品类,分别是:泳镜、运动休闲鞋、运动包。 一、游泳用品高增长概念——泳镜 在功能上区分,泳镜可以分为竞速泳镜、…

十秒钟搞懂linux的软硬链接细节图解和目录结构文件的基本命令

秒懂linux链接图解一,软硬链接的分析1,软链接的图解:2,硬链接的图解3,软硬链接的区别4,目录创建软链接的语法格式二,linxu的根目录结构示意图和各部分的功能,可以根据单词部分记忆(部…

SDN环境搭建(超详细)

文章目录前言一. 安装VMware workstation二、Ubuntn安装三、Mininet安装四、RYU安装五、WireShark安装六、在Mininet中启动可视化界面常见问题总结写在后面前言 最近在做SDN这方面的实验,在这里记录一下自己的学习过程和踩过的坑。 具体环境: VMware-wo…

RepGhost

轻量级的CNN模块重参数化技术构建硬件高效的 Ghost 模块,通过结构重新参数化技术开发一种硬件高效的 RepGhost 模块,以实现特征的隐式重用。RepGhostNet 把 Concat 操作去掉,同时修改现有结构以满足重参数化的规则。最终得到的 RepGhostNet 是一个高效的…

swift-类属性-MachO读取

上一篇 swift-类属性 为源码层面类属性结构剖析,接下来从MachO层面验证读取类属性内容 极简类结构 class IFLPerson2 {var age: Int 20var heigh: Double 180}MachO-__swift5_types读取 var size: UInt 0//__swift5_types section 的pFilevar ptr getsectdata(…

Alibaba内部传出的面试秘技,秋招offer尽收囊中

又逢“金九银十”,年轻的毕业生们满怀希望与忐忑,去寻找、竞争一个工作机会。已经在职的开发同学,也想通过社会招聘或者内推的时机争取到更好的待遇、更大的平台。 然而,面试人群众多,技术市场却相对冷淡,…

修改Cmder默认命令提示符

修改Cmder默认命令提示符常规操作第二种方法我的方法参考常规操作 打开在Cmder目录下的vendor文件夹,编辑里面的clink.lua文件找到local lambda “λ”,将“λ”修改为“$”,如图(图片来源:https://www.jianshu.com/…

11月“图无处不在”线上直播 - Neo4j宣布下一代图数据平台Neo4j 5上线

中国北京,2022年11月10日—— 图技术的领导者Neo4j 宣布下一代可用于云端的图数据平台Neo4j 5上线。在传统数据库的基础上,扩大了原生图的性能优势,同时在本地、云、混合云或多云部署中实现更高可扩展性,从而使企业能够更快地创建…

Java 集合---尚硅谷Java入门视频学习

问题:什么时候需要一个容纳数据的容器,也就是集合对象? Java集合框架中就包含了对不确定个数的数据处理的集合类问题:如果只是为了容纳数据,可以是直接使用数组,为什么要学习集合? 数组使用起来…

【论文阅读】多模态模型CoCa

Introduction 在这项工作中,我们统一了单编码器、双编码器和编码器-解码器范式,并训练了一个包含三种方法优点的图像-文本基础模型。我们提出了对比Captioner模型(CoCa),该模型采用经过对比损失和captioning损失训练的编码器-解码器架构。如图…

C语言源代码系列-管理系统之职工工资管理系统

往期文章分享点击跳转>《导航贴》- Unity手册,系统实战学习点击跳转>《导航贴》- Android手册,重温移动开发 👉关于作者 众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过…

数据存储策略——lsm-tree

文章目录一、背景二、lsm-tree简介三、lsm-tree设计思想四、lsm-tree原理1.写操作2.读操作3.有序表持久化4.后台压缩五、lsm-tree的应用六、lsm-tree优缺点分析总结一、背景 由于传统机械磁盘的原理,它在读写时有个寻道的操作,在读写时都需要消耗一个寻…

基于PHP+MySQL网上报名系统的设计与实现

一直以来如何更好的实现校园现代化和信息化是当前很多高校一直探索的问题,随着时代的发展,高校内各类考试和报名也越来越多,如何通过互联网直接进行在线报名是本系统研究的一个重点内容。 本系统是一个网上报名系统,为了能够更加灵…

[计算机毕业设计]机器学习的数据驱动股票价格预测

前言 📅大四是整个大学期间最忙碌的时光,一边要忙着准备考研,考公,考教资或者实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过…

财政政策与货币政策(下)

财政政策与货币政策(下) – 潘登同学的宏观经济学笔记 文章目录财政政策与货币政策(下) -- 潘登同学的宏观经济学笔记粘性价格下的货币经济总供给曲线总供给曲线斜率与价格粘性菲利普斯曲线的消失货币政策的“动态不一致”财政政策与货币政策的配合财政主导 vs. 货币主导恶性通…

【学习记录】实例分割的发展与区别

【学习记录】实例分割的发展与区别 参考于《The Evolution Of Instantce Segmentation》 文章目录【学习记录】实例分割的发展与区别发展历程RCNNFast RCNNMultipath NetworkFaster RCNNMask RCNN发展历程 RCNN 开发集成了RCNN技术产生了AlexNet,以及使用选择性搜索…

浅谈App的启动优化

1. 应用启动的方式 在Android中,应用启动一般可分为三种:冷启动、温启动、热启动。 那么什么是冷启动、温启动和热启动呢?下面我们来简单看一下它们的定义: 冷启动:当启动应用时,后台没有该应用的进程。这…

Allegro导入导出设计数据操作指导

Allegro导入导出设计数据操作指导 Allegro有个非常好用的功能,就是支持设计数据的导入和导出,让协同设计变得更加方便,具体操作如下 以下面的设计数据为例,需要把这些数据导入到另外一个版本中 点击file-export-subdrawing Options所有的项目都勾选起来 Find选择需要导…

linux笔记(7):东山哪吒D1H使用framebuffer控制HDMI直线

文章目录1.测试流程和结果1.1 使能HDMI1.2 framebuffer操作流程1.3 测试结果2.测试过程详述2.1 编译源码2.2上传可执行文件2.3修改文件的权限,执行文件3.源码解释3.1 HDMI使用的颜色格式是ARGB4.源码工程链接这部分linux笔记是记录我入门的过程,内容基本…

【Flutter】【widget】Table 表格widget

文章目录前言一、Table 是什么?二、使用步骤1.Table 基础使用2.宽度3.设置边框4.TableCell设置单元格式widget等其他设置总结前言 Table 表格widget,其实很少使用到的,等有需要的时候在查看该widget 一、Table 是什么? 表格widg…