python教程分享Python中提取人脸特征的三种方法详解

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()查看。

使用感受:速度比较慢,精度还行。

到此这篇关于python中提取人脸特征的三种方法详解的文章就介绍到这了,更多相关python提取人脸特征内容请搜索<猴子技术宅>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<猴子技术宅>!

需要了解更多python教程分享Python中提取人脸特征的三种方法详解,都可以关注python教程分享栏目—猴子技术宅(www.ssfiction.com)

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/pythons/1091980.html

(0)
上一篇 3天前
下一篇 3天前

精彩推荐

发表评论

您的电子邮箱地址不会被公开。