提取人脸特征的三种方法

这篇具有很好参考价值的文章主要介绍了提取人脸特征的三种方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第一种方法 直接使用dlib。

安装dlib方法:

https://blog.csdn.net/hhhhhhhhhhwwwwwwwwww/article/details/121470556

思路:

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()检测人脸效果一般,模糊的人脸检测不出来。速度上也是比较慢。

第二种方法 使用深度学习方法查找人脸,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)

计算人脸的关键点。

提取人脸的特征。

使用感受:使用深度学习模型提取人脸特征,无论速度还是准确率都有很大的提高,即使很模糊的图像依然能检测到。

第三种使用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://download.csdn.net/download/hhhhhhhhhhwwwwwwwwww/85345364文章来源地址https://www.toymoban.com/news/detail-468932.html

到了这里,关于提取人脸特征的三种方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • YOLOv5改进 | 主干篇 | 华为GhostnetV1一种移动端的专用特征提取网络

    本文给大家带来的改进机制是华为移动端模型 Ghostnetv1 ,华为GhostnetV1一种移动端的专用特征提取网络,旨在在计算资源有限的嵌入式设备上实现高性能的图像分类。 GhostNet的关键思想 在于通过引入Ghost模块,以较低的计算成本增加了特征图的数量,从而提高了模型的性能。这

    2024年01月21日
    浏览(47)
  • 【RT-DETR有效改进】华为 | Ghostnetv1一种专为移动端设计的特征提取网络

    👑欢迎大家订阅本专栏,一起学习RT-DETR👑     本文给大家带来的特征提取网络是华为 | Ghostnetv1其是一种专为移动端设计的特征提取网络,网络模型非常的小,其推理速度非常快,对于追求极致FPS的读者来说其是一个非常好的选择,其网络效果也是完爆经典模型MobileNet系列

    2024年01月21日
    浏览(41)
  • 人脸识别平台批量导入绑定设备的一种方法

            因为原先平台绑定设备是通过一个界面进行人工选择绑定或一个人一个人绑定设备。如下:  但有时候需要在几千个里选择出几百个,那这种方式就不大现实了,需要另外一种方法。   目前相到可以通过导入批量数据进行绑定的方式。 一、前端 主要是显示选择文件

    2024年02月11日
    浏览(51)
  • 脑电信号特征提取方法与应用

    前言 脑电图(EEG)信号在理解与脑功能和脑相关疾病的电活动方面发挥着重要作用。典型的脑电信号分析流程如下:(1)数据采集;(2)数据预处理;(3)特征提取;(4)特征选择;(5)模型训练与分类;(6)性能评估。当信号分析应用于EEG时,由于应用数字信号处理(DSP)和机器学习(ML)方法

    2024年02月03日
    浏览(34)
  • 设置环境变量的三种方法

    用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”。 修改文件后要想马上生效还要运行# source /etc/profile不然只能在下次重进此用户时生效。 一般只有root用户才有编辑权限; 用VI在用户目录下的.bash_profile文件中增加变量,改变量仅会

    2024年02月15日
    浏览(39)
  • 快速排序的三种实现方法

    快速排序的单趟排序 快速排序的单趟排序:是以一个数作为基准值,实现将数组中比基准数小的数放在基准值的左侧,比基准值大的数放在基准值的右侧。 方法一:霍尔法 霍尔法的由来:霍尔是一个人的名字,他是最初发现快速排序的人,所以,它使用的单趟排序算法被称为

    2024年01月25日
    浏览(39)
  • python中的三种注释方法

    在编写程序中,使用注释不会影响程序代码的执行,但可以使得代码通俗易懂,便于维护, 在python,一共有三种注释方法 法一 单行注释,使用#注释,一般放于句首,或者放在代码语句之后,要被注释的代码之前 例如: 法二 对于多行注释,使用单行注释效率不高,所以用三

    2024年02月02日
    浏览(50)
  • 动态VALN的三种划分方法

    VLAN的概念 VLAN(Virtual Local Area Network)的中文名为\\\"虚拟局域网\\\"。VLAN是一种将局域网设备从逻辑上划分成一个个网段,从而实现虚拟工作组的新兴数据交换技术。这一新兴技术主要应用于交换机和路由器中,但主流应用还是在交换机之中。但又不是所有交换机都具有此功能,

    2024年02月07日
    浏览(80)
  • Java延时的三种方法

    一、Robot,Thread和Timer 打印: 二、补充: 关于方法二的 this.cancel() ; 解释: 取消此计时器任务。如果任务已计划一次执行,但尚未运行,或尚未计划,则它将永远不会运行。如果任务已计划重复执行,则它将永远不会再次运行。(如果此调用发生时任务正在运行,则任务将运

    2024年02月16日
    浏览(41)
  • 脱离文档流的三种方法

            什么是脱离文档流呢?可以这样理解,本来这个标签是属于文档流管理的,那么它应该按照文档流的正常布局方式从左至右从上之下,并且符合标签本身的含义。         脱离文档流是指,这个标签脱离了文档流的管理。不受文档流的布局约束了,并且更重要

    2024年02月15日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包