Python中提取人脸特征的三种方法详解
作者:AI浩 发布时间:2023-11-06 09:38:04
1.直接使用dlib
安装dlib方法:
Win10安装dlib GPU过程详解
思路:
1、使用dlib.get_frontal_face_detector()方法检测人脸的位置。
2、使用 dlib.shape_predictor()方法得到人脸的关键点。
3、使用dlib.face_recognition_model_v1()方法提取特征。
新建face_embedding1.py,插入代码:
import dlib,numpy
import cv2
# 人脸关键点检测器
predictor_path = "shape_predictor_68_face_landmarks.dat"
# 人脸识别模型、提取特征值
face_rec_model_path = "dlib_face_recognition_resnet_model_v1.dat"
predictor_path是恋人关键点检测器模型的路径。
face_rec_model_path是提取人脸特征的路径。
# 加载模型
detector = dlib.get_frontal_face_detector() #人脸检测
sp = dlib.shape_predictor(predictor_path) #关键点检测
facerec = dlib.face_recognition_model_v1(face_rec_model_path)# 编码
分别初始化人脸检测、关键点检测、特征编码方法。
image_path='train_images/11.jpg'
image = cv2.imread(image_path)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
# 人脸检测
dets = detector(image, 1)
if len(dets)==1:
print('检测到人脸')
shape = sp(image, dets[0])# 关键点
# 提取特征
face_descriptor = facerec.compute_face_descriptor(image, shape)#获取到128位的编码
v = numpy.array(face_descriptor)
print(v)
读取图片。然后将图片转为RGB格式。
检测人脸。
获取人脸的68个关键点。
获取128位人脸编码。
使用感受: 使用dlib.get_frontal_face_detector()检测人脸效果一般,模糊的人脸检测不出来。速度上也是比较慢。
2.使用深度学习方法查找人脸,dlib提取特征
思路:
这种方法使用 cv2自带的dnn.readNetFromCaffe方法,加载深度学习模型实现人脸的检测。然后继续使用dlib提取人脸特征。
新建face_embedding2.py,插入代码:
import dlib,numpy
import cv2
# 人脸关键点检测器
predictor_path = "shape_predictor_68_face_landmarks.dat"
# 人脸识别模型、提取特征值
face_rec_model_path = "dlib_face_recognition_resnet_model_v1.dat"
prototxt_path = 'deploy.proto.txt'
model_path = 'res10_300x300_ssd_iter_140000_fp16.caffemodel'
导入需要的包。
定义模型的路径。
net = cv2.dnn.readNetFromCaffe(prototxt_path, model_path)
sp = dlib.shape_predictor(predictor_path) #关键点检测
facerec = dlib.face_recognition_model_v1(face_rec_model_path)# 编码
初始化人脸检测模型、关键点检测模型、人脸特征提取模型。
image_path='train_images/11.jpg'
image = cv2.imread(image_path)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
(h, w) = image.shape[:2]
blob = cv2.dnn.blobFromImage(cv2.resize(image, (300, 300)), 1.0,
(300, 300), (104.0, 177.0, 123.0))
net.setInput(blob)
detections = net.forward()
startX, startY, endX, endY = 0, 0, 0, 0
for i in range(0, detections.shape[2]):
# extract the confidence (i.e., probability) associated with the
# prediction
confidence = detections[0, 0, i, 2]
# filter out weak detections by ensuring the `confidence` is
# greater than the minimum confidence
if confidence > 0.5:
# compute the (x, y)-coordinates of the bounding box for the
# object
box = detections[0, 0, i, 3:7] * numpy.array([w, h, w, h])
(startX, startY, endX, endY) = box.astype("int")
break
rect = dlib.rectangle(startX, startY, endX, endY)
这部分的代码主要是人脸检测逻辑。
读取图片,并将其改为RGB格式。
获取图片的大小。
初始化blob。
net.forward()计算人脸的位置。
遍历检测结果
如果置信度大于0.5,则认为是合格的人脸。
计算出人脸的坐标。
将坐标转为dlib.rectangle对象。
shape = sp(image, rect)
print(shape)
# 提取特征
face_descriptor = facerec.compute_face_descriptor(image, shape)#获取到128位的编码
v = numpy.array(face_descriptor)
print(v)
计算人脸的关键点。
提取人脸的特征。
使用感受:使用深度学习模型提取人脸特征,无论速度还是准确率都有很大的提高,即使很模糊的图像依然能检测到。
3.使用insightface提取人脸特征
InsightFace 是一个开源的 2D&3D 深度人脸分析工具箱,其中高效地实现了丰富多样的人脸识别、人脸检测和人脸对齐算法,并且针对训练和部署进行了优化,在多项算法测评、比赛获得优胜。
安装InsightFace
pip install insightface
pip install onnxruntime-gpu==1.9.0
注意:onnxruntime安装1.9以下的版本。
提取特征
新建face_embedding3.py 插入代码:
import insightface
import cv2
model = insightface.app.FaceAnalysis()
model.prepare(ctx_id=0, det_thresh=0.45)
face_img = cv2.imread('train_images/11.jpg')
res = model.get(face_img)
print('embedding: ', res[0].embedding)
初始化FaceAnalysis()模型。
设置置信度位0.45。
读取图片
使用模型预测。
打印人脸特征res[0].embedding。
除了能人脸特征外,还有一些其他的属性,比如:bbox、kps、landmark_3d_68、landmark_2d_106、age、gender 。可以通过res[0].keys()查看。
使用感受:速度比较慢,精度还行。
来源:https://blog.csdn.net/hhhhhhhhhhwwwwwwwwww/article/details/124703863


猜你喜欢
- python中使用.py配置文件 一、格式:创建一个config.py文件在文件中加配置:DEBUG=Truedm_connect = {
- 本文实例讲述了python使用协程实现并发操作的方法。分享给大家供大家参考,具体如下:协程协程是一种用户态的轻量级线程,又称微线程。协程拥有
- 前言Python 读取数据自动写入 MySQL 数据库,这个需求在工作中是非常普遍的,主要涉及到 python 操作数据库,读写更新等,数据
- 前言Celery在python中的应用除了实现异步任务(async task)外也可以执行定时任务(beat)一、Celery定时任务是什么
- 由于在模型训练的过程中存在大量的随机操作,使得对于同一份代码,重复运行后得到的结果不一致。因此,为了得到可重复的实验结果,我们需要对随机数生
- 自动化整理计算机文件通过Python编程完成文件的自动分类、文件和文件夹的快速查找、重复文件的清理、图片格式的转换等常见工作。1. 文件的自
- 最近 UCDChina 以“注意界面上的文字”为主题写了一系列的文章,使我在界面文字上的使用受益匪浅。之后,我对按钮上的内容的表现也做了一些
- python版本: Python 2.7.61: sys是python自带模块. 利用 import 语句输入sys 模块。当执行impor
- 本文实例为大家分享了python利用opencv实现颜色检测的具体代码,供大家参考,具体内容如下需要实现倒车辅助标记检测的功能,倒车辅助标记
- 需求描述我们需要登录考勤系统(网页端,非手机端)进行签到,如果不想每天都早早起来打卡签到,就可以通过写程序实现这一功能。业务梳理通过长时间的
- 前言最近实习任务为黑烟检测,想起了可以尝试用yolov5来跑下,之前一直都是用的RCNN系列,这次就试试yolo系列。一、安装pytorch
- Python函数的定义定义函数,也就是创建一个函数,可以理解为创建一个具有某些用途的工具。定义函数需要用 def 关键字实现,具体的语法格式
- 瞎鼓捣系列~Numpy + matplotlib 画一个魔方前言NumPy是Python科学计算的基本包。它是一个Python库,提供了多维
- 本文实例讲述了Python创建xml文件的方法。分享给大家供大家参考,具体如下:这是一个使用ElementTree有关类库,生成xml文件的
- 耦合两个或以上的体系或两种运动形式间相互作用而彼此影响以至于联合起来的现象。在软件工程中,对象之间的耦合度就是对象之间的依赖性,对象之间的耦
- 作者:JavaScript Kit译者:子乌(Sheneyan)翻译日期:2006-02-12英文原文:Conditional Compil
- 前言本文主要介绍了关于利用python将图片转换成excel文档的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
- 一.WITH AS的含义 WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片
- 推荐idea最新激活码:最新Idea激活码永久激活(最新测试有效)https://www.jb51.net/article/178193.h
- 1.在百度地图申请密钥: http://lbsyun.baidu.com/ 将<script type="tex