许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  【Dlib人脸特征提取】2. 检测与绘制人脸特征点

【Dlib人脸特征提取】2. 检测与绘制人脸特征点

阅读数 7
点赞 0
article_banner

【 1. 人脸特征点含义 】

在我们检测到人脸区域之后,接下来要研究的问题是获取到不同的脸部的特征,以区分不同人脸,即人脸特征检测(facial feature detection)。它也被称为人脸特征点检测( facial landmark detection )。

人脸特征点通常会标识出脸部的下列数个区域: 右眼眉毛(Right eyebrow) 左眼眉毛(Left eyebrow) 右眼(Right eye) 左眼(Left eye) 嘴巴(Mouth) 鼻子(Nose) 下巴(Jaw)

【 2. 人脸特征点检测 原理

检测人脸特征点,分为如下两步:

  • 第一步:定位图像中人脸区域; 这一步我们可以使用之前学到过的 OpenCV中Harr检测器 或者 Dlib中HOG加SVM的检测器。
  • 第二步:在人脸区域内检测出人脸关键特征; 对于第二步,我们使用Dlib中的特征点检测。
  1. Dlib中使用的人脸特征检测的原理来自2014年,由Vahid Kazemi和 Josephine Sullivan在论文 《One Millisecond Face Alignment with an Ensemble of Regression Trees》中提出的人脸特征点评估的方法。
  2. 论文中方法的主要思想是:使用级联回归树(ensemble of regression trees, ERT),即使用级联回归因子,基于梯度提高学习的回归树方法。该方法首先需要使用一系列标定好的人脸图片作为训练集,然后会生成一个模型。使机器学习模型能够找出任何脸上的这些特征点。
简要的分为以下三步: (1) 定义一张脸上的68个具体的特征点(landmarks); (2) 标记面部特征点,获得带标记的训练数据。需要手动标记图像上的面部特征点,标签指定围绕每个面部结构的区域; (3) 给定训练数据,训练回归树的集合,直接从像素强度本身估计面部界标位置,得到模型。

【 3. Dlib人脸特征点模型 】

Dlib提供两种 人脸检测 模型:

  • shape_predictor_5_face_landmarks.dat:

        检测5个人脸特征点,即双眼的眼头及眼尾以及鼻头这五个位置。

        因为只检测五个点,所以执行速度很快。

        如图:
    在这里插入图片描述
  • shape_predictor_68_face_landmarks.dat:

        检测68个人脸特征点。

        如图:
    在这里插入图片描述

【 4. Dlib 检测人脸特征点 】

(1)利用Dlib的正向人脸检测器 get_frontal_face_detector(),进行人脸检测,提取人脸外部矩形框 :

detector = dlib.get_frontal_face_detector()
faces = detector(image, 1)
返回的faces为识别出的脸部数组。

(2)利用训练好的人脸68点特征检测器,进行人脸面部轮廓特征提取:

链接:shape_predictor_68_face_landmarks.dat

   提取码:kuv2

predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
shape = predictor(image, face)

(3)示例:

import cv2
import dlib
# 读取图片
img_path = "picture.jpg"
img = cv2.imread(img_path)
# 转换为灰阶图片
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 正向人脸检测器将图像
detector = dlib.get_frontal_face_detector()
# 使用训练好的5个特征点模型
predictor_path = "shape_predictor_68_face_landmarks.dat"
predictor = dlib.shape_predictor(predictor_path)
# 使用检测器来检测图像中的人脸
faces = detector(gray, 1)
# 打印结果
print("人脸数: ", len(faces))
for i, face in enumerate(faces):
    print("第", i+1, "个人脸的矩形框坐标:\n","left:", face.left(), "right:", face.right(), "top:", face.top(), "bottom:", face.bottom())
    # 获取人脸特征点
    shape = predictor
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删
相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空