《深度学习》OpenCV 指纹验证、识别
目录
一、指纹验证
1、什么是指纹验证
2、步骤
1)图像采集
2)图像预处理
3)特征提取
4)特征匹配
5)相似度比较
6)结果输出
二、案例实现
1、完整代码
2、实现结果
调试模式:
三、指纹识别案例
1、展示指纹库图片
2、待验证指纹图
3、看完整代码
运行结果:
一、指纹验证
1、什么是指纹验证
在OpenCV中,指纹验证是一种图像处理技术,用于识别和验证人类指纹。指纹是一种独特的生物特征,每个人的指纹都具有独特的纹路和图案。指纹验证使用这些独特的特征来确认一个人的身份。
指纹验证主要包括两个步骤:指纹图像的提取和指纹图像的匹配。
在指纹图像提取阶段,OpenCV会处理输入的图像,通过一系列的图像处理和特征提取算法,提取出指纹图像中的纹路和图案。
在指纹图像匹配阶段,OpenCV会将提取的指纹图像与一个或多个预先存储的指纹模板进行比对。比对过程中,OpenCV会计算两幅指纹图像之间的相似度,并根据相似度的阈值进行判断。
如果两幅指纹图像的相似度超过了设定的阈值,OpenCV将判断它们属于同一个人,否则判断它们属于不同的人。指纹验证可以应用于许多领域,如安全系统、身份识别和刑事调查等。
2、步骤
1)图像采集
通过摄像头或扫描仪等设备获取人的手指指纹图像。
2)图像预处理
对采集到的指纹图像进行预处理,包括图像增强、去噪、增强对比度等操作,以便更好地提取指纹特征。
3)特征提取
在预处理后的图像中提取指纹的特征,常用的方法包括细化、方向计算、特征点定位等。
4)特征匹配
将提取的指纹特征与预先存储的指纹模板进行匹配。匹配算法可以使用比对指纹特征向量之间的相似度,如欧氏距离、汉明距离等。
5)相似度比较
根据匹配得到的相似度进行比较,判断两幅指纹图像是否属于同一个人。可以根据设定的阈值进行判断,超过阈值则认为匹配成功,否则认为匹配失败。
6)结果输出
根据匹配结果输出验证结果,可以是通过图像显示、文本信息或其他方式进行输出。
二、案例实现
1、完整代码
import cv2
def cv_show(name, img):cv2.imshow(name,img)cv2.waitKey(0)def verification(src,model): # 判断src图与模版图片model一致性# 创建SIFT特征提取器sift = cv2.SIFT_create()kp1,des1 = sift.detectAndCompute(src,None) # 输入参数为图片、掩码图像,返回图片src的关键点坐标与关键点描述符kp2,des2 = sift.detectAndCompute(model, None) # 计算模版图片的关键点和描述符# 创建FLANN匹配器,FLANN是一个高效的算法,用于在大规模数据集中执行最近邻搜索flann = cv2.FlannBasedMatcher()# 使用k近邻匹配(des1中的每个描述符与des2中的最近两个描述符进行匹配)# 对des1中的每个描述符在des2中查找两个最近邻matches = flann.knnMatch(des1,des2,k=2) # 对待验证图与模版图进行匹配,返回匹配成功的点之间的欧式距离、测试图像的索引、样本图像的索引# distance:匹配的特征点描述符的欧式距离,数值越小也就说明俩个特征点越相近。
# queryIdx:测试图像的特征点描述符的下标(第几个特征点描述符),同时也是描述符对应特征点的下标。
# trainIdx:样本图像的特征点描述符下标,同时也是描述符对应特征点的下标。# 进行比较筛选ok = [] # 存放匹配成功的点的坐标for m,n in matches: # 遍历匹配成功点对应的两组欧氏距离,m为最近的一对点,n为次近的一对点# 根据lowe's比率测试,选择最佳匹配if m.distance < 0.8 * n.distance: # 判断如果最近的比上次近的大小小于0.8,那么认为这是个正确的匹配ok.append(m) # 将正确匹配的点存入列表# 统计逋过筛选的匹配数量num = len(ok)if num >= 500: # 判断如果匹配数量大于500,则认为匹配成功result = "认证通过"else:result = "认证失败"return resultif __name__ == '__main__':src1 = cv2.imread("src1.BMP") # 导入待验证图cv_show('src1', src1)src2 = cv2.imread("src2.BMP")cv_show('src2', src2)model = cv2.imread("model.BMP") # 导入模版图cv_show('model',model)result1 = verification(src1,model) # 放入函数进行判断result2 = verification(src2,model)print('src1验证结果为:',result1)print('src2验证结果为:',result2)
2、实现结果


调试模式:

三、指纹识别案例
1、展示指纹库图片

2、待验证指纹图

3、看完整代码
import reimport cv2
import numpy as np
import sys
import osdef getNum(src, model): # 输入待验证图与模版图img1 = cv2.imread(src)img2 = cv2.imread(model)sift = cv2.SIFT_create() # 创建sift特征提取器kp1,des1 = sift.detectAndCompute(img1, None) # 提取待验证图片和模版图的关键点和描述符信息kp2,des2 = sift.detectAndCompute(img2, None)flann = cv2.FlannBasedMatcher() # 建立Flann匹配器,其用来匹配大规模数据速度快matches = flann.knnMatch(des1,des2,k=2) # 使用匹配器的K近邻算法匹配待匹配图片与模版图片,匹配两个最近距离ok = []for m,n in matches: # 判断距离比例值是否小于0.8,是则将这一对点存入列表if m.distance < 0.8 *n.distance:ok.append(m)num = len(ok) # 返回匹配成功的匹配数目return num"""获取指纹编号"""def getID(src, database):max = 0for file in os.listdir(database): # 使用os.listdir读取database文件夹内的每一个文件model = os.path.join(database, file) # 智能的将database的路径和file的路径结合成一个新的路径num = getNum(src,model) # 将待验证图片src与提取出来的模版图model放入函数进行匹配,返回匹配成功的点的对数print("文件名:",file,"匹配数:",num)if num > max: # 判断匹配成功的个数并不断更新max的值max = num # 如果遇到最大匹配个数,那么将这个个数更新到max值,然后再更新模版图片的地址name = fileID = re.match(r'^(\d+)?\.([\S\s]+)$',name)[1] # 正则匹配模版图片的文件名前缀if max < 100: # src图片不一定是库里面人的指纹,判断匹配成功的数量是否小于100,小于则说明库里没有对应的指纹ID = 9999return ID # 返回对应的图片名称"""根据指纹编号,获取对应姓名"""
def getName(ID):nameID = {0:'张三',1:'李四',2:'王五',3:'赵六',4:'朱老七',5:'钱八',6:'曹九',7:'王二麻子',8:'andy',9:'Anna',9999:"没找到"}name = nameID.get(int(ID))return name"""主函数"""
if __name__ == '__main__':src = "src.BMP"database = "database"ID = getID(src, database)name = getName(ID) # 将得到的ID导入函数判断待验证指纹的人的姓名print("识别结果为:",name)
运行结果:

相关文章:
《深度学习》OpenCV 指纹验证、识别
目录 一、指纹验证 1、什么是指纹验证 2、步骤 1)图像采集 2)图像预处理 3)特征提取 4)特征匹配 5)相似度比较 6)结果输出 二、案例实现 1、完整代码 2、实现结果 调试模式: 三、…...
爬虫入门之爬虫原理以及请求响应
爬虫入门之爬虫原理以及请求响应 爬虫需要用到的库, 叫requests. 在导入requests库之前, 需要安装它, 打开cmd: 输入pip install 库名 pip install requests后面出现successful或requirement already就说明已经下载成功了!!! 下载出现的问题: 1.有报错或者是下载慢 修改镜像…...
CTF ciscn_2019_web_northern_china_day1_web1复现
ciscn_2019_web_northern_china_day1_web1 复现,环境源于CTFTraining 分析 拿到题目扫描,发现没有什么有用资产 扫描过程中注册账号登录,发现上传入口 上传文件,发现下载删除行为,寻找功能点,发现不能访问…...
docker命令汇总
Docker 是一个开源的应用容器引擎,它允许开发者打包应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。 以下是一些常用的 Docker 命令…...
云计算在现代企业中的应用与优势
云计算在现代企业中的应用与优势 随着信息技术的飞速发展,云计算已经成为现代企业不可或缺的一部分。作为一种创新的计算模式,云计算为企业提供了前所未有的灵活性和可扩展性,极大地推动了企业的数字化转型。 一、云计算的基本概念 云计算…...
Android平台GB28181实时回传流程和技术实现
规范解读 GB28181 中的 “INVITE” 是会话初始协议(SIP)中的一种请求方法,主要用于邀请一个或多个参与者加入特定的会话。在 GB28181 标准中,“INVITE” 请求通常用于发起媒体流的传输请求。当一个设备想要接收来自另一个设备的媒…...
Text-to-SQL方法研究
有关Text-to-SQL实现细节,可以查阅我的另一篇文章text-to-sql将自然语言转换为数据库查询语句 1、面临的挑战 自然语言问题往往包含复杂的语言结构,如嵌套语句、倒装句和省略等,很难准确映射到SQL查询上。此外,自然语言本身就存在歧义,一个问题可能有多种解读。消除…...
【Router】路由功能之MAC地址过滤(MAC Filter)功能介绍及实现
MAC地址过滤(MAC Filter) MAC 地址过滤是一种网络安全技术,通过在网络设备(如路由器)上设置规则,允许或阻止特定 MAC 地址的设备连接到网络。其主要作用是增强网络的安全性,防止未经授权的设备接入网络。 MAC Filter工作原理 MAC 地址过滤的工作原理是根据设备…...
Flink 本地 idea 调试开启 WebUI
Flink 本地 idea 调试开启 WebUI Maven 引用相关的包配置端口使用本地带UI环境启动 // maven 导入<!-- flink运行时的webUI --><dependency><groupId>org.apache.flink</groupId><artifactId>flink-runtime-web</artifactId><version…...
如何识别IP地址是独享的还是共享的
在网络环境中,IP地址的分配和使用方式直接影响到用户的在线隐私和访问安全。选择独享IP还是共享IP取决于用户的具体需求,理解这两种IP地址的差异及其特点至关重要。本文将探讨如何区分独享IP和共享IP,以及各自的优缺点。 1. 什么是独享IP与共…...
X-Spreadsheet使用教程:打造你的Web端电子表格应用
在Web开发中,经常需要处理数据表格的展示与编辑,而X-Spreadsheet作为一款轻量级、功能强大的JavaScript电子表格库,为开发者提供了一个便捷的解决方案。本文将详细介绍如何使用X-Spreadsheet在Web项目中创建和配置电子表格,让你的…...
订餐点餐|订餐系统基于java的订餐点餐系统小程序设计与实现(源码+数据库+文档)
订餐点餐系统小程序 目录 基于java的订餐点餐系统小程序设计与实现 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布…...
Tkinter制作登录界面以及登陆后页面切换(一)
Tkinter制作登录界面以及登陆后页面切换(一) 前言序言1. 由来2. 思路3. 项目结构描述4. 项目实战1. 登录界面实现(代码)2. 首页界面实现(代码)3. 打包build.py(与main.py同级目录)4.…...
Colorful/七彩虹将星X17 AT 23 英特尔13代处理器 Win11原厂OEM系统 带COLORFUL一键还原
安装完毕自带原厂驱动和预装软件以及一键恢复功能,自动重建COLORFUL RECOVERY功能,恢复到新机开箱状态。 【格式】:iso 【系统类型】:Windows11 原厂系统下载网址:http://www.bioxt.cn 注意:安装系统会…...
《Ubuntu20.04环境下的ROS进阶学习8》
一、中断和定时器中断 在ROS中我们经常会遇到要使用中断函数的情况,中断函数的触发方式有很多种,比如检测到某个引脚的电平变化,或某个数据达到了一定的范围,但最实用的中断触发方式还是定时器中断。 二、编写ROS的中断代码 ros中…...
ubuntu24.04 怎么调整swap分区的大小,调整为16G
在Ubuntu中,swap分区的大小通常建议为物理内存的1到2倍,具体取决于你的使用需求和系统内存。例如,如果你有8GB内存,swap可以设置为8GB到16GB。swap的主要作用是当物理内存不足时,提供额外的虚拟内存,帮助防…...
【论文阅读】视觉里程计攻击
Adversary is on the Road: Attacks on Visual SLAM using Unnoticeable Adversarial Patch 一、视觉SLAM的不安全因素 根据论文的分析,视觉SLAM由于完全依赖于特征,缺少验证机制导致算法不安全。前端在受到干扰的情况下,会导致误匹配增加&…...
解决 Git LFS 切换分支失败问题
场景描述 在本地已有分支 A 的情况下,目前工作在分支 B。当尝试从 B 分支切回 A 分支时,由于 A 分支存在 LFS 上传的大文件,导致切换失败。这个问题通常是因为某些 LFS 文件在服务器上不存在或没有权限访问。 报错日志 切换分支时遇到的错…...
BaoStock 的安装
安装 pip3 install baostock使用这个库登录免费帐户时有时候会出现登录失败的问题 import baostock as bs # 登录系统 lg bs.login() # 登出系统 bs.logout()login failed! logout failed!可能是由于高版本的python需要验证ssl,本地将其设置为可信服务器地址可以…...
聚势启新 智向未来 | 重庆华阳通用科技有限公司揭牌成立
助推两江新区汽车产业高质量发展 (以下文字内容转载自两江新区网) 9月26日,重庆华阳通用科技有限公司(华阳通用重庆子公司)在两江新区揭牌成立,将致力于智能座舱、智能驾驶两大领域,不断加大技术研发投入…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...
