python opencv 深度学习 指纹识别算法实现 计算机竞赛
1 前言
🔥 优质竞赛项目系列,今天要分享的是
🚩 python opencv 深度学习 指纹识别算法实现
🥇学长这里给一个题目综合评分(每项满分5分)
- 难度系数:3分
- 工作量:4分
- 创新点:4分
该项目较为新颖,适合作为竞赛课题方向,学长非常推荐!
🧿 更多资料, 项目分享:
https://gitee.com/dancheng-senior/postgraduate
2 指纹识别方式
目前市面上有两种指纹识别,分别是光学式和电容式指纹识别。
2.1 电容式指纹识别
电容式指纹识别要比光学式的复杂得多,其原理是将压力感测、电容感测、热感测等感测器整合于一块芯片中,当指纹按压芯片表面时,内部电容感测器会根据指纹波峰与波谷而产生的电荷差(或是温差),形成指纹影像,再通过与算法内部的指纹库进行匹配,从而完成指纹识别。
电容式指纹识别技术较为复杂,对技术研发和积累有较高要求,并且涉及大量专利,算法得实现也相对困难,所以目前全球只有少数公司能在这方面提供领先的技术产品。
2.2 光学式指纹识别
然后是光学式指纹识别,大家常见的指纹考勤机就是光学式指纹识别。
这类光学式指纹识别主要包括4个方面功能
- 1.指纹模块负责采集指纹图像。
- 2.数字信号处理器主要把采集到的指纹图像转化为数字信号。
- 3.微控制器是整个系统的控制单元,在这里将进行指纹的验证以及输出指令。
- 4.液晶显示器将输出指纹验证结果。
当我们把手指放在指纹考勤机上时,通过镜面反射原理,指纹模块就会采集指纹图像
接着指纹图像就会被数字信号处理器转换成数字信号
然后通过微控制器将数字信号与指纹库里的指纹进行匹配,匹配结果将通过液晶显示器显示出来。这就是光学式指纹识别的工作原理。
电容式与光学式指纹识别主要在指纹的采集方式上拥有较大差异,而在指纹的验证过程中则基本类似。然而因为电容式指纹识别拥有体积小、适用性广的优点,已经有越来越多的设备采用电容式指纹识别,未来的主流将是电容式指纹识别。
3 指纹识别算法实现
3.1 指纹识别算法流程
3.2 指纹图像预处理
- 1.图像归一化
- 2.图像分割
- 3.图像二值化
- 4.细化
几个步骤 当然有一些算法为了追求极致,中间还利用了增强、多重滤波等方式,但最根本的目的都是为了在细化之后保留指纹信息并且方便后续处理。
预处理之后是特征点的提取,也就是找到指纹图像当中有价值,具有唯一性和不变性的信息。主要特征点有端点、分叉点几类,在提取部分除了简单的遍历检索确认之外,还有比较重要的一步是伪特征点的去除,主要是针对图像不清晰、不完整导致的断点和边缘端点等。
最后一步是特征点的匹配,将指纹库中的指纹信息与提取的目标图像特征点进行对比。主流算法是以指纹中心点为依据,根据特征点所在的角度及距离,确认其所在位置,根据匹配度计算是否是同一手指的指纹。
3.3 指纹图像目标提取
指纹图像目标提取主要是将指纹图片中提取出来,也叫做指纹图像分割。
图片的前景通过观察可知是由条状或者圆形的一些组成,而底图其他部分只是一个均匀的底色而已。
我们使用非常简单的手段,基于局部梯度就可以很容易实现我们的目标。
方差梯度法提取指纹:
指纹图像通常由前景区域(包含有指纹的脊线和谷线)和背景区域这两部分组成。一般来说,在指纹图像的前景区域中,指纹的脊线和谷线的灰度差是较大的,因而其灰度统计特性局部灰度方差很大;而在指纹图像的背景区域中,两者的方差是很小的。基于这一特性,可以利用指纹图像的局部方差来进行分割。因此,这种方法也被称为方差梯度法。
的灰度平均值 M和方差 Var计算方法:
提取前的指纹图像:
提取后的指纹图像:
可以看到,学长做的还有些噪点,但是也很好解决,做一次形态学操作即可:
这样噪点就去除了。
3.4 指纹图像增强
3.5 指纹特征提取
人体指纹的特征可以反映在给定的人类群体里来自不同手指的指纹之间相似的程度。
指纹的特征信息很多,所有的这些指纹特征信息构成了庞大的指纹特征集合。
指纹的细节特征主要指的是纹线端点(RidgeEnding)和纹线分叉点(RidgeBifurcation)。
纹线端点指的是纹线突然结束的位置,而纹线分叉点则是指纹线一分为二的位置。
大量的统计结果表明,使用这两类特征点就足以描述指纹的唯一性。
Minutia Cylinder-Code (MCC) ,该算法是非常著名的指纹特征识提取算法,
第一次发表在:IEEE tPAMI
Minutia Cylinder-Code: a new representation and matching technique for
fingerprint recognition", IEEE tPAMI 2010
- MCC提出了一种基于三维数据结构的圆柱编码算法,其从细节的距离和角度出发,构造了圆柱编码
- 为一种多级的指纹匹配方法,其不仅使用了细节点特征也使用了方向场等特征
- 特征视为一种局部结构,也是3D结构
部分实现代码:
# Compute the cell coordinates of a generic local structure
# 计算
mcc_radius = 70
mcc_size = 16
g = 2 * mcc_radius / mcc_size
x = np.arange(mcc_size)*g - (mcc_size/2)*g + g/2
y = x[..., np.newaxis]
iy, ix = np.nonzero(x**2 + y**2 <= mcc_radius**2)
ref_cell_coords = np.column_stack((x[ix], x[iy]))mcc_sigma_s = 7.0mcc_tau_psi = 400.0mcc_mu_psi = 1e-2def Gs(t_sqr):"""Gaussian function with zero mean and mcc_sigma_s standard deviation, see eq. (7) in MCC paper"""return np.exp(-0.5 * t_sqr / (mcc_sigma_s**2)) / (math.tau**0.5 * mcc_sigma_s)def Psi(v):"""Sigmoid function that limits the contribution of dense minutiae clusters, see eq. (4)-(5) in MCC paper"""return 1. / (1. + np.exp(-mcc_tau_psi * (v - mcc_mu_psi)))
# n: number of minutiae
# c: number of cells in a local structure
xyd = np.array([(x,y,d) for x,y,_,d in valid_minutiae]) # matrix with all minutiae coordinates and directions (n x 3)# rot: n x 2 x 2 (rotation matrix for each minutia)d_cos, d_sin = np.cos(xyd[:,2]).reshape((-1,1,1)), np.sin(xyd[:,2]).reshape((-1,1,1))
rot = np.block([[d_cos, d_sin], [-d_sin, d_cos]])# rot@ref_cell_coords.T : n x 2 x c# xy : n x 2xy = xyd[:,:2]# cell_coords: n x c x 2 (cell coordinates for each local structure)cell_coords = np.transpose(rot@ref_cell_coords.T + xy[:,:,np.newaxis],[0,2,1])# cell_coords[:,:,np.newaxis,:] : n x c x 1 x 2# xy : (1 x 1) x n x 2# cell_coords[:,:,np.newaxis,:] - xy : n x c x n x 2# dists: n x c x n (for each cell of each local structure, the distance from all minutiae)dists = np.sum((cell_coords[:,:,np.newaxis,:] - xy)**2, -1)# cs : n x c x n (the spatial contribution of each minutia to each cell of each local structure)cs = Gs(dists)
diag_indices = np.arange(cs.shape[0])
cs[diag_indices,:,diag_indices] = 0 # remove the contribution of each minutia to its own cells# local_structures : n x c (cell values for each local structure)local_structures = Psi(np.sum(cs, -1))
3.6 指纹识别结果
提取特征后,剩下的任务就是对特征进行分类了,可以使用的算法就很多了,比如svm,决策树、神经网络,都可以
4 整体效果
5 最后
🧿 更多资料, 项目分享:
https://gitee.com/dancheng-senior/postgraduate
相关文章:

python opencv 深度学习 指纹识别算法实现 计算机竞赛
1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 python opencv 深度学习 指纹识别算法实现 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分工作量:4分创新点:4分 该项目较为新颖…...

一图看懂CodeArts Inspector 三大特性,带你玩转漏洞管理服务
华为云漏洞管理服务CodeArts Inspector是面向软件研发和服务运维提供的一站式漏洞管理能力,通过持续评估系统和应用等资产,内置风险量化管理和在线风险分析处置能力,帮助组织快速感应和响应漏洞,并及时有效地完成漏洞修复工作&…...
【Mysql】Mysql的启动选项和系统变量(二)
概述 在Mysql的设置项中一般都有各自的默认值,比方说mysql 5.7服务器端允许同时连入的客户端的默认数量是 151 ,表的默认存储引擎是 InnoDB ,我们可以在程序启动的时候去修改这些默认值,对于这种在程序启动时指定的设置项也称之为…...

FPGA project : flash_read
实验目标: flash的普通读指令,在指定地址开始读。可以更改地址与读的数据个数。 先发送读指令扇区地址页地址字节地址。 然后读数据。再把读到的串行数据转化为8bit的数据,存入fifo。 然后读出FIFO中数据,通过uart_tx模块发送…...

nnunetv2训练报错 ValueError: mmap length is greater than file size
目录 报错解决办法 报错 笔者在使用 nnunetv2 进行 KiTS19肾脏肿瘤分割实验的训练步骤中 使用 2d 和3d_lowres 训练都没有问题 nnUNetv2_train 40 2d 0nnUNetv2_train 40 3d_lowres 0但是使用 3d_cascade_fullres 和 3d_fullres 训练 nnUNetv2_train 40 3d_cascade_fullres …...
React知识点系列(2)-每天10个小知识
目录 1. 如何优化 React 应用的性能?你用过哪些性能分析工具?2. 在 React 中,什么是 Context API?你在什么场景下会使用它?3. 你能解释一下什么是 React Fiber 吗?4. 在项目中,你是否使用过 Rea…...

AutoGPT:让 AI 帮你完成任务事情 | 开源日报 No.54
Significant-Gravitas/AutoGPT Stars: 150.4k License: MIT AutoGPT 是开源 AI 代理生态系统的核心工具包。它采用模块化和可扩展的框架,使您能够专注于以下方面: 构建 - 为惊人之作打下基础。测试 - 将您的代理调整到完美状态。查看 - 观察进展成果呈…...

USB 转串口芯片 CH340
目录 1、概述 2、特点 3、封装 4、引脚 6、参数 6.1 绝对最大值(临界或者超过绝对最大值将可能导致芯片工作不正常甚至损坏) 6.2 电气参数(测试条件:TA25℃,VCC5V,不包括连接 USB 总线的引脚&…...

Day 05 python学习笔记
循环 应用:循环轮播图 最基础、最核心 循环:周而复始,谓之循环 (为了代码尽量不要重复) while循环 while的格式 索引定义 while 表达式(只要结果为布尔值即可): 循环体 通过条件的不断变化,从…...

Python如何17行代码画一个爱心
🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…...

生产环境中常用Linux命令
太简单的我就不讲解啦,浪费时间,直接将生产中常用的 文章目录 1.总纲2.整机 top3.CPU vmstat3. 内存 free4. 硬盘: df5. 磁盘IO iostat6. 网络IO ifstat7: 内存过高的情景排查 1.总纲 整机:topcpu:vmstat内存:free硬盘:df磁盘io: iostat网络io:ifstat 2.整机 top 首先们要查…...

【使用 TensorFlow 2】03/3 创建自定义损失函数
一、说明 TensorFlow 2发布已经接近5年时间,不仅继承了Keras快速上手和易于使用的特性,同时还扩展了原有Keras所不支持的分布式训练的特性。3大设计原则:简化概念,海纳百川,构建生态.这是本系列的第三部分,…...
Vue3中使用v-model高级用法参数绑定传值
Vue3中使用v-model高级用法参数绑定传值 单个输入框传值多个输入框传值,一个组件接受多个v-model值 单个输入框传值 App.vue <template><p>{{firstName}}</p><hello-world v-model"firstName"></hello-world> </template><…...
你的工作中,chatGPT可以帮你做什么?
如何在工作中使用 ChatGPT 的 10 种实用方法 现在您已经知道如何开始使用 ChatGPT 并了解其基本功能(提示 -> 响应),让我们探讨如何使用它来大幅提高工作效率。 1. 总结报告、会议记录等 ChatGPT可以快速分析大文本并识别关键点。例如&a…...

k8s简单部署nginx
文章目录 1. 前言2. 部署nginx2.1. **创建一个nginx的Deployment**2.2. **创建一个nginx的service** 3. 总结 1. 前言 前文提要: kubeadm简单搭建k8s集群第三方面板部署k8s 上篇文章我们简单部署了k8s的集群环境,相比一定迫不及待的想部署一个实际应用了…...

小黑子—MyBatis:第四章
MyBatis入门4.0 十 小黑子进行MyBatis参数处理10.1 单个简单类型参数10.1.1 单个参数Long类型10.1.2 单个参数Date类型 10.2 Map参数10.3 实体类参数(POJO参数)10.4 多参数10.5 Param注解(命名参数)10.6 Param注解源码分析 十一 小…...

Docker快速上手:使用Docker部署Drupal并实现公网访问
文章目录 前言1. Docker安装Drupal2. 本地局域网访问3 . Linux 安装cpolar4. 配置Drupal公网访问地址5. 公网远程访问Drupal6. 固定Drupal 公网地址 前言 Dupal是一个强大的CMS,适用于各种不同的网站项目,从小型个人博客到大型企业级门户网站。它的学习…...
React知识点系列(1)-每天10个小知识
目录 1.什么是 React,以及它在前端开发中的优势是什么?2.你是如何组织和管理 React 组件的?3.你能解释一下 React 的生命周期方法吗?你通常在哪个生命周期方法中发起网络请求?4.什么是 React Hooks?你常用哪…...
substring 和 substr 的区别
1、结论 两个方法都用于截取字符串,其用法不同: 1)相同点: ① 都用于截取字符串; ② 第一个参数都是表示提取字符的开始索引位置; 2)不同点: ① 第一个参数的取值范围不同&…...
产品经理的工作职责是什么?
产品经理的工作职责主要包括以下几个方面: 1. 产品策划与定义:产品经理负责制定产品的整体策略和规划,包括产品定位、目标用户、市场需求分析等。他们需要与团队合作,定义产品的功能和特性,明确产品的核心竞争力和差异…...

python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...

dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...

初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...