有没有办法在使用 dlib 检测面部标志后选择面部的特定点?

     2023-03-16     13

关键词:

【中文标题】有没有办法在使用 dlib 检测面部标志后选择面部的特定点?【英文标题】:Is there a way to select a specific point at the face after detecting facial landmarks using dlib? 【发布时间】:2021-07-25 11:01:18 【问题描述】:

我正在使用 Dlib 的 68 点人脸界标预测器,它有 68 个点标记在人脸的各个区域,如下图所示:

我已经设法从预测的地标中访问特定点,例如,我可以通过以下方式选择唇角处的点,该点是面部地标预测器中的第 48 个点 ' 导入简历2 导入 dlib 从 google.colab.patches 导入 cv2_imshow

p = "path_to_shape_predictor_68_face_landmarks.dat"
img= cv2.imread('Obama.jpg')
gray=cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor(p)
face = detector(gray)
# Get the shape using the predictor
landmarks=predictor(gray, face)

# Defining x and y coordinates of a specific point
x=landmarks.part(48).x
y=landmarks.part(48).y
# Drawing a circle
cv2.circle(img, (x, y), 6, (0, 0, 255), -1)
cv2_imshow(img)'

它会生成一个在指定区域上绘制一个红色小圆圈的图像。然而;如果我想选择一个不属于地标模型的 68 个点的点,我该如何获得它?

这张图会详细说明:

红色圆圈表示我使用代码访问的点,蓝色圆圈表示所需的点。

【问题讨论】:

定义要检测的点。你的意思是像你用鼠标点击一个点,你需要得到那个点的坐标吗? 我需要从给定的面部图像中提取面部的一部分,因此我需要指定用于提取特定区域的掩蔽函数的坐标。 试试 google face-mesh google.github.io/mediapipe/solutions/face_mesh.html,它提供了 468 个面部关键点。 【参考方案1】:

我可能会向您建议几种解决方案:

1- 简单的方法是使用三角学和几何学,例如计算左眼的瞳孔:

pupil_x = int((abs(landmarks.part(39).x + landmarks.part(36).x)) / 2) # The midpoint of a line Segment between eye's corners in x axis
pupil_y = int((abs(landmarks.part(39).y + landmarks.part(36).y)) / 2) # The midpoint of a line Segment between eye's corners in y axis
pupil_coordination = (pupil_x, pupil_y)

完整代码:

import cv2
import dlib

detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor("shape_predictor_81_face_landmarks.dat")

img = cv2.imread("test.jpg")
(h, w, _) = img.shape
h2 = 600
w2 = int(h2 * h / w)
img = cv2.resize(img , (h2, w2))
img = cv2.flip(img , 1)
gray = cv2.cvtColor(img , cv2.COLOR_BGR2GRAY)
faces = detector(gray)
face = faces[0]
landmarks = predictor(gray, face)

pupil_x = int((abs(landmarks.part(39).x + landmarks.part(36).x)) / 2)
pupil_y = int((abs(landmarks.part(39).y + landmarks.part(36).y)) / 2)
pupil_coordination = (pupil_x, pupil_y)

cv2.circle(img, pupil_coordination, 6, (0, 0, 255), -1)
cv2.imshow('Show', img )
cv2.waitKey(0)
cv2.destroyAllWindows()

2- 其他解决方案是使用更大的面部标志模型,请查看: 81 Facial Landmarks Shape Predictor

3- 困难的方法是重新训练和自定义您自己的形状检测器:Train a face landmarking model

对于地标索引,我使用了以下参考: Face reference points

【讨论】:

使用 dlib 面部标志裁剪面部

】使用dlib面部标志裁剪面部【英文标题】:Croppingfaceusingdlibfaciallandmarks【发布时间】:2018-03-2413:51:54【问题描述】:我正在尝试使用dlib识别的面部标志来裁剪面部。右眉毛会引起问题-作物平展而不是沿着眉毛弧线。我在这里做... 查看详情

给定 dlib 的 68 点面部标志,确定它们有多好

...heyare【发布时间】:2018-05-0614:52:48【问题描述】:我正在使用dlib进行人脸检测,然后进行68点面部地标检测。一般来说,这很有效。但是,dlib的人脸检测器有时会检测到(例如)只有一只眼睛可见或人的嘴巴不可见(或在极少... 查看详情

人脸检测进阶:更快的5点面部标志检测器(代码片段)

...库分发的原始68点面部标志检测器进行比较。然后我们将使用Python、dlib和OpenCV实现面部标志检测,然后运行它并查看结果。最后,我们将讨论使用5点面部标志检测器的一些限制,并重点介绍一些您应该使用5点版本的6... 查看详情

无法使用 OpenCV2 检测面部标志

】无法使用OpenCV2检测面部标志【英文标题】:UnabletodetectfaciallandmarksusingOpenCV2【发布时间】:2021-04-2613:03:47【问题描述】:我开发了一个脚本,使用dlib和cv2在该图像中有一张脸的图像上绘制面部标志。这是脚本;importcv2importdlibi... 查看详情

使用 dlib 检测眼睛地标

】使用dlib检测眼睛地标【英文标题】:DetectEyeLandmarkusingdlib【发布时间】:2019-04-2007:49:17【问题描述】:使用dlib,是否可以在不进行人脸检测的情况下检测眼睛地标?如果是,如何?如果没有,有什么建议或建议吗?谢谢!Sampl... 查看详情

Dlib 面部标志起始索引

...gindex【发布时间】:2017-06-0705:53:02【问题描述】:我正在使用dlib来获取面部标志点,我的问题是关于索引,68个地标的参考图从(1)开始,dlib代码Dlibfaciallandmarks是否从(0)开始?所以如果我想输出左眼地标使用dlib我应该从(37)作为... 查看详情

为啥 dlib 面部地标检测器会抛出 RuntimeError?

】为啥dlib面部地标检测器会抛出RuntimeError?【英文标题】:WhydlibfaciallandmarkdetectorthrowsRuntimeError?为什么dlib面部地标检测器会抛出RuntimeError?【发布时间】:2017-07-3118:14:52【问题描述】:我对python编程很陌生。我正在尝试运行dlib... 查看详情

当头部的滚动角度不在 -30 到 30 度之间时,dlib 68 面部标志点不准确

...【发布时间】:2019-09-2215:37:11【问题描述】:我正在尝试使用dlib从iphone相机(BGRA格式)中检测面部并提取面部标志。到目前为止,我已经从AVMetaData中检 查看详情

人脸检测进阶:使用dlibopencv和python检测眼睛鼻子嘴唇和下巴等面部五官(代码片段)

使用dlib、OpenCV和Python检测眼睛、鼻子、嘴唇和下巴今天的博客文章将首先讨论与面部标志相关的(x,y)坐标以及如何将这些面部标志映射到面部的特定区域。然后我们将编写一些可用于提取每个面部区域的代码。我们将通过在一些... 查看详情

使用 Dlib 进行面部地标检测

】使用Dlib进行面部地标检测【英文标题】:FacialLandmarkDetectionusingDlib【发布时间】:2016-07-0906:59:24【问题描述】:是否可以使用train_shape_predictor_ex.cpp.html和face_landmark_detection_ex.cpp.html来训练不同的地标数字?默认情况下,两者都... 查看详情

图像处理中面部标志点的归一化

...别面部情绪(悲伤、快乐、愤怒等)相关的项目。我正在使用dlib库中的面部标志检测器,它检测到68个兴趣点。对于相同的情绪,这些兴趣点可能会因人脸的朝向、眼睛的大小、嘴唇的大小等在不同的脸上而有所不同。我想规范... 查看详情

人脸检测进阶:使用dlibopencv和python检测面部标记(代码片段)

使用dlib、OpenCV和Python检测面部标记今天,我们将使用dlib和OpenCV来检测图像中的面部标记。dlib的安装教程:https://wanghao.blog.csdn.net/article/details/121470556人脸检测器模型:https://download.csdn.net/download/hhhhhhhhhhwwwwwwwwww/50939290... 查看详情

有没有办法知道正确的相机预览尺寸是不是与面部检测器兼容(产生检测到的面部)

】有没有办法知道正确的相机预览尺寸是不是与面部检测器兼容(产生检测到的面部)【英文标题】:Isthereawaytoknowifacorrectcamerapreviewsizewillbecompatiblewiththefacedetector(yielddetectedfaces)有没有办法知道正确的相机预览尺寸是否与面部检... 查看详情

如何使用openCV检测脸颊?

】如何使用openCV检测脸颊?【英文标题】:HowtodetectcheeksusingopenCV?【发布时间】:2019-06-1511:49:05【问题描述】:我正在使用Python、openCV、dlib进行虚拟化妆。目前,我可以得到面部标志,如嘴唇、鼻子、下巴等。但我不太确定能得... 查看详情

在基于 JavaScript 的面部标志检测中查找所有点的坐标

...ection【发布时间】:2020-11-0701:59:00【问题描述】:我必须使用JavaScript编程语言检测面部标志。为此,我看过this视频教程。此外,我能够成功执行at提供的视频代码。现在我已经显示了每个面部标志点的坐标值。 查看详情

人脸检测实战高级:使用opencvpython和dlib完成眨眼检测(代码片段)

今天,我们使用面部标记和OpenCV检测视频流中的眨眼次数。为了构建我们的眨眼检测器,我们将计算一个称为眼睛纵横比(EAR)的指标,该指标由Soukupová和Čech在他们2016年的论文《使用面部标记的实时眨眼检测》中介绍... 查看详情

使用面部标志检测的numpy数组创建一个文本文件。?

】使用面部标志检测的numpy数组创建一个文本文件。?【英文标题】:Createantextfilewithnumpyarrayoffaciallanmarkdetection.?【发布时间】:2019-05-2502:45:13【问题描述】:我正在尝试制作具有面部标志检测代码的面部交换应用程序。但是,... 查看详情

Python Dlib 使用面部标记进行裁剪

】PythonDlib使用面部标记进行裁剪【英文标题】:PythonDlibtocropusingFacialLandmarking【发布时间】:2019-06-1004:05:13【问题描述】:我正在尝试使用DLIB中的地标裁剪图像。我尝试使用numpy数组制作自己的形状我尝试在stackexchange或其他githu... 查看详情