InsightFace 人脸识别算法实现过程解析

news2024/9/9 8:11:32

最近研究了一下人脸识别算法,初步实现了基础的人脸识别。

源码github下载地址:insightface

第一步 解压源码配置环境

1、使用conda虚拟环境创建insightface环境

conda create -n insightface python=3.8

创建环境完成后,激活环境

conda activate insightface

2、insightface环境配置

进入到解压好的insightface文件夹,运行环境安装文件

pip install -r requirements.txt

继续安装以下环境包

pip install opencv-python
pip install onnxruntime
pip install onnx
pip install requests
pip install tqdm
pip install scikit-image
pip install albumentations
pip install matplotlib
pip install opencv-contrib-python

成功安装以上安装包后第一步配置环境圆满完成

第二步 使用原生代码

1、创建代码

进入python-package运行下面指令

python setup.py build_ext -i
import cv2
import numpy as np
import insightface
import insightface.app as insapp
import insightface.data as insdata
 
FaceAna = insapp.FaceAnalysis(allowed_modules=['detection'])
FaceAna.prepare(ctx_id=0, det_size=(640, 640))
img = insdata.get_image('t1')  #图片放在./insightface\data\images文件夹下
faces = FaceAna.get(img)#获取各个人脸特征值

wimg = FaceAna.draw_on(img, faces)
cv2.imwrite("./out put.jpg", wimg)
cv2.imshow("frame", wimg)
cv2.waitKey(0) 

运行该代码后会自动下载检测模型。模型下载地址可以看下图download_path:后面地址

在这里插入图片描述

下载完成后的模型:

在这里插入图片描述

运行完成会展示下面图片,并且会在当前文件夹内创建out put.jpg保存该文件。

在这里插入图片描述

到此处便可以进行人脸检测和获取人脸的特征值(faces),接下来我们要进行人脸识别。

第三步 人脸识别

我的思路是进行图片对比,通过欧氏距离衡量两张人脸图像的特征向量之间的相似性。


import cv2
import numpy as np
import insightface
import insightface.app as insapp
import insightface.data  as insdata
from sklearn import preprocessing
import math

result = []


#进行图片比对
def feature_compare(feature1, feature2):
    #计算出欧氏距离传给dist
    diff = np.subtract(feature1, feature2)# 使用矩阵相减 feature1 - feature2
    dist = np.sum(np.square(diff), 1) #np.square()矩阵进行平方运算,全部变成正数,再将低于1的值相加,也就是dist值越低越有可能是同一个人
    return dist

#提取两张(仅有一个人脸)的图片的人脸特征值存放到数组中
def get_face_feat(img):    
    faces = app.get(img)
    feature = ()
    for face in faces:        
        feature = np.array(face.embedding).reshape((1, -1))
        feature = preprocessing.normalize(feature)
        box = face.bbox.astype(np.int64)        
        result.append(feature)
  
app = insapp.FaceAnalysis()
app.prepare(ctx_id=0, det_size=(640, 640))
img = insdata.get_image('51')  #不用带后缀,图片放到./insightface/python-package/insightface/data/images
img2 = insdata.get_image('52')

get_face_feat(img)
get_face_feat(img2)
res = []
dist = feature_compare(result[0],result[1])

print('dist:',dist)	#值越小是同一个人的概率越大,我设置的阈值为 1
if(int(dist)<=0.9):
    print("是同一个人!")
if(int(dist)>0.9):
    print("不是同一个人!")

图51和图52运行结果:
在这里插入图片描述

图51和图31比较:

在这里插入图片描述

用到的测试图片:

51
图51

52
图52

31
图31

到此最基础的insightface人脸识别已经完成。

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

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

相关文章

手把手教你如何在宝塔上添加可道云登录页面的ICP备案信息,别跟权威开玩笑。

如何在宝塔上添加可道云登录页面的ICP备案信息 事情的原由来我们开始吧首先登录你的宝塔页面双击打开index.php文件保存退出即可 感谢大佬&#xff0c;希望对被查到的朋友有所帮助&#xff01; 事情的原由 今天突然收到腾讯云发来的一封Email&#xff0c;说我需要整改我的网站…

如何在职场上生存,送你3条秘技

洞悉本质才能方向明确&#xff0c;掌握方法才能事半功倍。 下面这3条职场生存的秘技&#xff0c;都是“过来人”的经验之谈&#xff0c;不管在哪里工作&#xff0c;都能管中窥豹、可见一斑&#xff0c;实在是值得深刻领悟。 01 你和领导的本质关系是工作关系 你有价值&#xff…

嵌入式开发服务器与客户端交互 日志2024/7/31

嵌入式开发服务器与客户端交互 客户端 网页 操作 请求相关代码: 这里为了适配 低版本浏览器 用的不是fetch 当然用fetch更好 var curUlr window.location.href; //获取当前网页地址var newURL curUlr.lastIndexOf("/");//截取到最后一个斜杠索引var pathUrl…

Python:如何实现对表格的自动化

前情提要&#xff1a;需要有openpyxl哦 如果没有请参考上一篇文章 http://t.csdnimg.cn/fjbLJ 先介绍一下对表格的基本操作 首先创立一个 transactions.xlsx 基本操作&#xff1a;获取表格&#xff0c;获取值 import openpyxl as xl # 这个as 单纯简化 相当于别名 wbxl.load_…

02 I/O多路复用---进程的聊天

服务器同时和很多客户端连在一起 管道的read&#xff0c;总是能读出来

mysql逻辑架构与sql执行过程

目录 1.背景 2.mysql逻辑架构图 3.逻辑架构解读 第一层:连接层 第二层:服务层 1.Management Serveices & Utilities 2.SQL Interface:SQL接口 3.Parser:解析器 4.Optimizer:查询优化器 5.Caches 和 Buffers:查询缓存组件 第三层:存储引擎层 第四层:数据存储层 …

【数据结构初阶】千字文章带你征服 “ 双向链表 ”(附源码)

hi&#xff0c;bro&#xff01;又见面啦 目录 前言&#xff1a; 一、链表的分类 二、双向链表 1、 概念与结构 2、 双向链表的实现 2.1 定义双向链表的结构 2.2 初始化 2.3 尾插 2.4 头插 2.5 打印 2.6 尾删 2.7 头删 2.8 查找 2.9 在pos结点之后插入…

实验室责任人员管理保障实训系统安全

在智慧校园的实训管理生态中&#xff0c;实验室责任人员的角色犹如精密机器中的关键齿轮&#xff0c;他们不仅是实验室安全与高效运转的守护者&#xff0c;更是实训教学质量的直接塑造者。这一角色的重要性&#xff0c;在智慧校园的数字化转型中得到了前所未有的凸显&#xff0…

过期知识:thinkphp5 使用migrate给现有的数据表新增表字段

个人开发网站记录, 这个文章主要是个以后健忘的我看的. 我在搞我的画笔审核 , 发现数据表的画笔数据在审核驳回的时候还是软删除好一些, 免得用户找不到之前上传的画笔数据, 后期也可以考虑重新显示给用户,让用户可以修改画笔信息重新提交审核. 这个时候想起了…

ViewModel相关

郭霖公众号 原作者原文 前言 ViewModel不仅是Activity和Fragment的数据集中管理和通讯&#xff0c;也是促进了MVVM和MVI架构规范&#xff0c;此文为深入理解ViewModel 概念 ViewModel是复制准备和管理Activity和Fragment数据的类&#xff0c;他还处理Activity或Fragment与应…

探索天穹数仓自治能力的新实践

探索天穹数仓自治能力的新实践 随着业务和技术的发展&#xff0c;传统数仓模式向数智数仓模式演进&#xff0c;数据治理面临诸多挑战。自治平台采用双引擎策略&#xff0c;注重感知能力、观测能力、诊断能力和优化能力的建设&#xff0c;实现了对数据的精细化管理。例如&#x…

鸿蒙应用框架开发【基于原生能力的无障碍模式】

基于原生能力的无障碍模式 介绍 本示例基于系统提供的无障碍阅读能力&#xff0c;实现了无障碍扩展服务集成、原生组件屏幕朗读以及多个控件组合标注。 效果图预览 原生组件屏幕朗读&#xff1a; 创建说明&#xff1a; 在已创建工程的ets文件夹下创建accessibility文件夹&…

SCIEI双检CCF期刊,硕博毕业生的福音,投稿欲从速!

SCI&EI双检CCF期刊&#xff0c;目前已稳定检索46年&#xff0c;CCF-C类&#xff0c;且发文量稳定&#xff0c;国人友好&#xff0c;发过的人都说审稿极速。 期刊详情 【期刊简介】IF&#xff1a;4.0-5.0 JCR1区中科院3区 【出版社】Elsevier出版社 【检索情况】SCI&a…

【文件fd】深入理解和实现Linux底下一切皆文件 | 系统和语言文件操作二者关系_封装 | 系统调用为什么怎样封装成库函数

目录 1.系统调用的打开/读/写文件操作 2.如何理解Linux底下一切皆文件 2.1设备属性 2.2设备的操作方法 3.如何实现Linus底下一切皆文件 4.源码查看 5.系统和语言文件操作二者关系 5.1 flags选项和C语言的"w""a"方式 二者的关系 5.2 系统的文件描…

llama-3.1下载部署

llama-3.1 下载 下载 huggingface 详情页填写申请后等待审核 点击 头像->setting->access token 创建token 配置环境变量 下载模型 pip install -U huggingface_hubhuggingface-cli download --resume-download meta-llama/Meta-Llama-3.1-8B-Instruct --local-di…

Linux ——互斥量

1.进程线程间的互斥相关背景概念 临界资源&#xff1a;多线程执行流共享的资源就叫做临界资源临界区&#xff1a;每个线程内部&#xff0c;访问临界资源的代码&#xff0c;就叫做临界区互斥&#xff1a;任何时刻&#xff0c;互斥保证有且只有一个执行流进入临界区&#xff0c;…

使用 cPanel WHM 重置 MySQL 根密码

MySQL 是托管在 cPanel 管理服务器上的网站的主要数据库软件&#xff0c;广泛用于 WordPress 和电子商务应用程序&#xff0c;例如 Magento。由于 MySQL 需要管理多个不同网站和数据库的读写权限&#xff0c;因此它是一个多用户系统。 每个用户账户都有一组权限限制其访问。而M…

【报错解决】Sql server 2022连接数据库时显示证书链是由不受信任的颁发机构颁发的

SSMS 20在连接Sql server 2022数据库时有如下报错&#xff1a; A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - 证书链是由不受信任的颁发机构颁发的。 原因是尝试使…

C++进阶 二叉搜索树

目录 二叉搜索树概念 二叉搜索树的模拟实现 二叉搜索树的查找 二叉搜索树的插入 二叉搜索树的删除 二叉搜索树的性能分析 二叉搜索树的应用 K模型 KV模型 二叉搜索树概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树…

nginx的反向代理及负载均衡

nginx的反向代理 安装包链接https://nginx.org/download/nginx-1.26.1.tar.gz yum -y install gcc gcc-c pcre-devel openssl-devel [rootstaticserver ~]# tar -xzvf nginx-1.26.1.tar.gz [rootstaticserver nginx-1.26.1]#./configure --prefix/usr/local/nginx --userngi…