【进阶OpenCV】 (6)--指纹识别

文章目录

  • 指纹识别
    • [1. 计算指纹间匹配点的个数](#1. 计算指纹间匹配点的个数)
    • [2. 获取指纹编号](#2. 获取指纹编号)
    • [3. 获取对应姓名](#3. 获取对应姓名)
    • [4. 代码实现](#4. 代码实现)
  • 总结

指纹识别

假设,现在我们有一个小的指纹库,此时,有一个指纹图片需要我们识别是不是指纹库中某一个人的。如果是,是谁的呢?

本篇,我们就来完成这个小项目,通过指纹图片,找出是库中哪个人的。

  • 已有指纹库
  • 对应人名
python 复制代码
nameID = {0:'张三',1:'李四',2:'王五',3:'赵六',4:'朱老七',
          5:'钱八',6:'铁栓',7:'铁柱',8:'金川',9:'银川',9999:"无此人"}
  • 源图像

1. 计算指纹间匹配点的个数

首先,如果要对指纹进行匹配的话,我们需要计算两个指纹图片的特征匹配点个数,特征相似度越高(特征匹配点数量多),两个指纹为同一个人的概率越大。

python 复制代码
"""-----计算两个指纹间匹配点的个数-----"""
def getNum(src,model):
    img1 = cv2.imread(src)
    img2 = cv2.imread(model)
    # 创建SIFT特征提取器
    sift = cv2.SIFT_create() # orb_create()
    # 检测关键点和计算描述符(特征向量) 源图像
    kp1,des1 = sift.detectAndCompute(img1,None)
    # 检测关键点和计算描述符  模板图像
    kp2, des2 = sift.detectAndCompute(img2, None)
    # 创建FLANN匹配器
    flann = cv2.FlannBasedMatcher()
    # 使用K近邻匹配(des1中的每个描述符与des2中的最近两个描述符进行匹配)
    matches = flann.knnMatch(des1,des2,k=2)
    ok = []
    for m,n in matches:
        # 根据Lowe's比率测试,选择最佳匹配
        if m.distance < 0.8 * n.distance:
            ok.append(m)
    # 统计通过筛选的匹配数量
    num = len(ok)
    return num

2. 获取指纹编号

对于我们需要查找的指纹对象,我们自然是在指纹库中匹配到之后,获取它的信息,得到它的编号,从而得到它的信息。

python 复制代码
"""-----获取指纹编号-----"""
def getID(src,database):
    max = 0
    for file in os.listdir(database):
        model = os.path.join(database,file)
        num = getNum(src,model)
        print("文件名:",file,"距离:",num)
        if num > max:
            max = num
            name = file
    ID = name[0]
    if max < 100: # src图片不一定是库里的指纹
        ID = 9999
    return ID

通过循环遍历指纹库中的每一张图片,计算每张图片与源图像的特征点数量,取出数量最多的图片,确定它是匹配成功的对象(当然最多的数量至少要超过一百个,否则没有)。

3. 获取对应姓名

python 复制代码
def getName(ID):
    nameID = {0:'张三',1:'李四',2:'王五',3:'赵六',4:'朱老七',
              5:'钱八',6:'铁栓',7:'铁柱',8:'金川',9:'银川',9999:"无此人"}
    name = nameID.get(int(ID))
    return name

4. 代码实现

python 复制代码
if __name__ == '__main__':
    src = 'src.bmp'
    database = "database"
    ID = getID(src,database)
    name = getName(ID)
    print("识别结果为:",name)
-------------------
识别结果为: 铁柱

总结

本篇介绍了,如何将源图像指纹同指纹库中的指纹进行匹配,并得到的对应指纹的信息。

相关推荐
agicall.com2 小时前
座机通话双方语音分离技术解决方案详解
人工智能·语音识别·信创电话助手·座机语音转文字·固话座机录音转文字
AI机器学习算法2 小时前
《动手学深度学习PyTorch版》笔记
人工智能·学习·机器学习
Goboy2 小时前
「我的第一次移动端 AI 办公」TRAE SOLO 三端联动, 通勤路上就把活干了,这设计,老罗看了都想当场退役
人工智能·ai编程·trae
qq_452396232 小时前
第二十篇:《UI自动化测试的未来:AI驱动的智能测试与低代码平台》
人工智能·低代码·ui
视觉&物联智能2 小时前
【杂谈】-人工智能风险文化对组织决策的深远影响
人工智能·安全·ai·agi
β添砖java3 小时前
深度学习(12)Kaggle房价竞赛
人工智能·深度学习
冬奇Lab3 小时前
RAG 系列(十):混合检索——让召回更全面
人工智能·llm
冬奇Lab3 小时前
一天一个开源项目(第95篇):Claude for Financial Services - Anthropic 官方金融行业 AI 代理套件
人工智能·开源·资讯
bbsh20993 小时前
AI辅助编程时代,企业级网站系统建设为什么还需要专业平台?
人工智能
05候补工程师3 小时前
[实战复盘] 拒绝 AI 屎山!我从设计模式中学到的“调教”AI 新范式
人工智能·python·设计模式·ai·ai编程