1.本发明涉及身份安全技术领域,具体涉及一种指纹比对识别的方法。
背景技术:
2.指纹是人体重要的生物特征,因为其具有终身不变性和唯一性被广泛使用。在以往的研究中,许多科学家在指纹识别领域提出了相当多的算法和技术,使用简单的细节匹配,通过算法捕捉特征点,并得到位置、方向等信息,再通过一些匹配算法计算指纹识别率,有两种方法比较就有代表性,一种是基于方向场的提取与特征点匹配,指纹方向场提取主要包括:基于梯度的方法、基于滤波的方法、基于模型的算法、基于神经网络的方法。典型的算法有:利用不同梯度方向比例来进行指纹识别、通过匹配滤波器来提取方向场进行指纹识别、用频域滤波器提取方向场进行指纹识别,另一种是指纹特征点、奇异点匹配,典型的算法有:lbp算法、hog算法、sift算法。但这类算法容易受到噪音、指纹图像质量等因素的影响。
3.采用较好的预处理方案可以大幅度提高后期网络的构建及训练成本,可快速构建自有深度学习网络。目前主要从三个方面入手,分别是:指纹图像增强、二值化技术、细化技术。图像增强有空间滤波法、时域滤波方法和频域滤波方法,时域滤波法去噪速度较快,去除了图片中大部分噪声,但是图像边缘部分去除效果差。频域滤波法边界去噪的效果好,但是处理速度相对较慢。二值化技术主要包含:全局阈值法、otsu二值化法、局部阈值法、边缘算子法。全局阈值法速度较快,但是处理后的图像效果不好,局部阈值法对灰度值突变部分效果比较好,otsu二值化法注重图像本身的灰度值分布,边缘算子法边界处理的效果比较好。细化技术主要包含:非迭代算子法和迭代算子法。非迭代算子法图像删减速度快,但是图像细化处理不完整,迭代算子法解决了图像不完整的弊端,但是计算量加大,处理时间变长。
4.因此现有指纹识别技术存在以下缺点:无法处理噪声较多以及图像质量较差的指纹图像;未经过预处理的图像识别精度和效率都很低;现有的指纹识别网络结构复杂且对未经预处理的指纹图像特征抓取能力较低,致使指纹识别率和效率较低。
技术实现要素:
5.本发明的目的在于:针对目前现有指纹识别技术无法处理噪声较多以及图像质量较差的指纹图像;未经过预处理的图像识别精度和效率都很低;现有的指纹识别网络结构复杂且对未经预处理的指纹图像特征抓取能力较低,致使指纹识别率和效率较低,提供了一种指纹比对识别的方法,采用深度学习的方法,将指纹图像通过网络提取指纹特征向量,再将两种特征向量进行减操作,最后将得到的特征向量进行特征提取,输出的结果为两枚指纹是否匹配,降低现有网络的复杂程度,减少参数数量,提升指纹识别精度和效率。
6.本发明的技术方案如下:
7.一种指纹比对识别的方法,包括以下步骤:
8.获取待比对的成对指纹图像,对指纹图像进行预处理,将指纹图像分为训练集和测试集;
9.搭建fprnet模型,fprnet模型包括三个模块,包括以下步骤:
10.模块一和模块二分别提取指纹图像的特征向量,并压缩提取的特征向量;
11.通过subtract函数将模块一和模块二的特征向量进行减操作,并输入到模块三;
12.模块三将得到的特征向量再进行特征提取,将最终得到的特征向量输入全连接层进行对比识别,判断指纹是否匹配;
13.将预处理过的训练集指纹图像,输入搭建的fprnet模型中进行训练,通过迭代循环得到训练后的fprnet模型;
14.将预处理过的测试集指纹图像输入训练好的fprnet模型,通过迭代对比得到识别率。
15.进一步的,所述模块一和模块二具有相同的网络结构,均有i层网络模型,第n层输出的结果为xn,公式为:xn=f([x1,x2,
…
,x
n-1
]),
[0016]
其中[x1,x2,
…
,x
n-1
]表示第1层到第n-1层输出的每一层的张量,f为复合函数,f包括卷积层、bn层、池化层、激活函数操作。
[0017]
进一步的,所述subtract函数的公式为:tn=x
n-x
′n,其中,xn表示模块一的输出的特征向量,x
′n表示模块三的输出的特征向量,tn表示模块三的输入值。
[0018]
进一步的,所述模块三将得到的特征向量tn,通过模块三网络得到最终的一维向量mn,公式为:mn=f
′
([t
′1,t
′2,
…
,t
′
n-1
]),
[0019]
其中,f
′
是复合函数,包括卷积层、bn层、展平层、全连接层、激活函数操作。
[0020]
进一步的,所述判断指纹是否匹配的公式为:
[0021][0022]
其中,t为阈值,mn(m
t
)∈mn,表示mn向量里各个位置的数值,当cn为0表示两枚指纹相同,当cn为1时表示两枚指纹不相同。
[0023]
进一步的,所述判断指纹是否匹配还包括损失函数,损失函数为binary_crossentropy交叉熵损失函数,公式为:
[0024][0025][0026]
进一步的,所述激活函数采用adam作为优化器优化输出结果,adam算法的梯度更新规则公式为:
[0027][0028]
其中t表示梯度,mn表示n时刻的动量值,vn表示n时刻的指数衰减均值。
[0029]
进一步的,所述bn层用于加快网络的收敛速度,具体步骤为:先计算样本的均值和方差;将样本数据标准化处理;进行平移和缩放处理,公式为:
[0030]
[0031][0032][0033]
其中,μb为样本均值,为样本方差,利用γ和β进行仿射变换,得到最终的bn输出yi。
[0034]
进一步的,所述激活函数为relu激活函数或sigmoid激活函数。
[0035]
与现有的技术相比本发明的有益效果是:
[0036]
1.一种指纹比对识别的方法,采用深度学习的方法,将指纹图像通过网络提取指纹特征向量,再将两种特征向量进行减操作,最后将得到的特征向量进行特征提取,输出的结果为两枚指纹是否匹配,降低现有网络的复杂程度,减少参数数量,提升指纹识别精度和效率;
[0037]
2.一种指纹比对识别的方法,采用relu函数作为激活函数,relu函数克服了梯度消失,并且使整体网络训练速度加快。
附图说明
[0038]
图1为一种指纹比对识别的方法的流程图。
[0039]
图2为一种指纹比对识别的方法fprnet模型结构的流程图。
[0040]
图3为一种指纹比对识别的方法的模块一和模块二的网络结构图。
[0041]
图4为一种指纹比对识别的方法的模块三的网络结构图。
[0042]
图5为一种指纹比对识别的方法的指纹数据集样图。
[0043]
图6为一种指纹比对识别的方法的实验结果图。
具体实施方式
[0044]
需要说明的是,术语“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0045]
下面结合实施例对本发明的特征和性能作进一步的详细描述。
[0046]
请参阅图1-6,一种指纹比对识别的方法,包括以下步骤:
[0047]
获取待比对的成对指纹图像,对指纹图像进行预处理,将指纹图像分为训练集和测试集;预处理包括去噪、灰度图像处理、二值化,去噪采用高斯滤波法,二值化采用全局阈值法;
[0048]
搭建fprnet模型,fprnet模型包括三个模块,包括以下步骤:
[0049]
模块一和模块二分别提取指纹图像的特征向量,并压缩提取的特征向量;
[0050]
通过subtract函数将模块一和模块二的特征向量进行减操作,并输入到模块三;
[0051]
模块三将得到的特征向量再进行特征提取,将最终得到的特征向量输入全连接层进行对比识别,判断指纹是否匹配;
[0052]
将预处理过的训练集指纹图像,输入搭建的fprnet模型中进行训练,通过迭代循环得到训练后的fprnet模型;
[0053]
将预处理过的测试集指纹图像输入训练好的fprnet模型,通过迭代对比得到识别率。
[0054]
所述模块一和模块二具有相同的网络结构,均有i层网络模型,第n层输出的结果为xn,公式为:xn=f([x1,x2,
…
,x
n-1
]),
[0055]
其中[x1,x2,
…
,x
n-1
]表示第1层到第n-1层输出的每一层的张量,f为复合函数,f包括卷积层、bn层、池化层、激活函数操作。
[0056]
模块一和模块二包含四个隐含层,目的是将大小为240mm
×
320mm的图像通过模块一、二的网络结构得到输出结果的特征向量,然后将两个向量相减输入下一个网络部分,最终得到待识别的特征向量,经过对比可以判断两枚指纹是否相似。
[0057]
所述subtract函数的公式为:tn=x
n-x
′n,其中,xn表示模块一的输出的特征向量,x
′n表示模块三的输出的特征向量,tn表示模块三的输入值。
[0058]
所述模块三将得到的特征向量tn,通过模块三网络得到最终的一维向量mn,公式为:mn=f
′
([t
′1,t
′2,
…
,t
′
n-1
]),
[0059]
其中,f
′
是复合函数,包括卷积层、bn层、展平层、全连接层、激活函数操作。
[0060]
由于模块一和模块二的网络结构相同,当输入同一张指纹图像输出的特征向量里对应位置每一个数值都存在一定的比例关系,因此设置一个阈值t,当两枚指纹图像相同时,经过减操作的特征向量里的数值都等于nt,不相同的指纹图像进行减操作的指纹特征向量里的大部分数值都不等于nt,得到的特征向量再提取特征,最后输出的特征向量通过全连接层就可以判断两枚指纹是否相同,所述判断指纹是否匹配的公式为:
[0061][0062]
其中,t为阈值,mn(m
t
)∈mn,表示mn向量里各个位置的数值,当cn为0表示两枚指纹相同,当cn为1时表示两枚指纹不相同。
[0063]
所述判断指纹是否匹配还包括损失函数,损失函数为binary_crossentropy交叉熵损失函数,公式为:
[0064][0065][0066]
针对概率之间的损失函数,当yi和相等时,loss才为0,否则loss就是个正数。而且概率相差越大,loss就越大。
[0067]
所述激活函数采用adam作为优化器优化输出结果,adam算法的梯度更新规则公式为:
[0068]
[0069]
其中t表示梯度,mn表示n时刻的动量值,vn表示n时刻的指数衰减均值。
[0070]
所述bn层用于加快网络的收敛速度,具体步骤为:先计算样本的均值和方差;将样本数据标准化处理;进行平移和缩放处理,公式为:
[0071][0072][0073][0074]
其中,μb为样本均值,为样本方差,利用γ和β进行仿射变换,得到最终的bn输出yi。
[0075]
所述激活函数为relu激活函数或sigmoid激活函数。模块一、二采用relu函数作为激活函数,relu函数克服了梯度消失,并且使整体网络训练速度加快。通过输入层将图片调整成相同的大小,方便了特征点的提取。模块三采用relu激活函数和sigmoid激活函数。
[0076]
实验分析
[0077]
环境搭建
[0078]
实验采用的硬件环境为:cpu intel(r)core(tm)i7-8565u cpu@1.80ghz 1.99ghz,gpu nvidia geforce mx250,内存16gb。软件深度学习框架采用tensorflow2.6.0版本,cuda11.2版本,采用的数据包包括keras、os包、sys包、argparse包等。实验用到的操作系统为:windows 10 64位。编程语言为python3.9。
[0079]
数据集
[0080]
采用数据集部分为fvc2000数据集和fvc2002数据集中的指纹图像,另一部分数据集来自触摸式指纹采集器自行采集。分别对20人的指纹进行采集,每个人10枚手指印,再对每种指纹的不同方向进行采集,每枚指纹采集5个方向的指纹图像,接着对收集到的指纹图像进行旋转,截取等操作。自行采集的指纹绝大部分都伴随着指纹图像模糊、破损、缺失的情况。最终在一个包括7500张左右的指纹图形集中展开。数据实例如图5所示。
[0081]
实验步骤
[0082]
分为三个步骤,分别为:
[0083]
(1)对大小为240mm*320mm的图像进行预处理,通过指纹图像增强、灰度图像处理、二值化得到本网络训练需要的指纹图片,将预处理好的图片划分为训练集和测试集。
[0084]
(2)将处理好的指纹图片送入到网络进行训练,通过不断的迭代循环最终得到一个训练效果不错的网络模型。伴随着迭代次数增加,损失是不断减少的,因此选择一个合适的迭代次数不仅可以缩短网络训练时间,而且还能得到一个相当不错的训练结果。根据实验效果选取的迭代次数为2500次。
[0085]
(3)将测试集的指纹也通过预处理,然后送入到训练好的网络中,经过迭代对比得到识别率。
[0086]
实验结果分析
[0087]
经过了2500次的迭代得到了最终的网络模型,训练效果如图6所示。fprnet网络模型对指纹的识别率达到了98.72%。然后用测试集去检验模型是否具有准确性和鲁棒性。训
练集和测试集的比例是9:1,因此测试集的指纹图片有640张,将测试集图片通过fprnet网络模型,最后的测试结果如表1所示。
[0088]
表1:测试集上指纹图片的识别率
[0089][0090]
从实验结果看,指纹图像总体识别率为98.75%,达到了不错的效果。
[0091]
为了验证设计的fprnet模型对未进行预处理的数据有着较高识别率,对未进行预处理的指纹进行了实验。实验数据集采用fvc2000。实验结果如表2所示。
[0092]
表2:有无预处理的图像经过深度神经网络得到的识别率
[0093][0094]
经过设计的fprnet网络的识别,在未对指纹进行预处理的指纹识别率达到了98.23%,证明fprnet网络对图像不清晰、模糊的指纹图像有着较高的识别率。
[0095]
以上所述实施例仅表达了本技术的具体实施方式,其描述较为具体和详细,但并不能因此而理解为对本技术保护范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术技术方案构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。