【发布时间】:2017-02-09 03:49:36
【问题描述】:
dlib 中有一个示例 python 程序来检测面部标志位置。 face_landmark_detection.py
该程序检测人脸特征,并在原始照片中用点和线表示地标。
我想知道是否可以获取每个点的坐标位置。就像 (10, 25)。 'a' 表示嘴角。
在稍微修改程序一次处理一张图片后,我尝试打印出dets和shape的值,但没有成功。
>>>print(dets)
<dlib.dlib.rectangles object at 0x7f3eb74bf950>
>>>print(dets[0])
[(1005, 563) (1129, 687)]
表示面部标志点的参数和参数的数据类型仍然未知。 这是简化的代码
import dlib
from skimage import io
#shape_predictor_68_face_landmarks.dat is the train dataset in the same directory
predictor_path = "shape_predictor_68_face_landmarks.dat"
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor(predictor_path)
win = dlib.image_window()
#FDT.jpg is the picture file to be processed in the same directory
img = io.imread("FDT.jpg")
win.set_image(img)
dets = detector(img)
print("Number of faces detected: {}".format(len(dets)))
for k, d in enumerate(dets):
print("Detection {}: Left: {} Top: {} Right: {} Bottom: {}".format(
k, d.left(), d.top(), d.right(), d.bottom()))
# Get the landmarks/parts for the face in box d.
shape = predictor(img, d)
#print(shape)
print("Part 0: {}, Part 1: {} ...".format(shape.part(0),
shape.part(1)))
# Draw the face landmarks on the screen.
win.add_overlay(shape)
win.add_overlay(dets)
dlib.hit_enter_to_continue()
---------------2016 年 3 月 10 日更新--------------- ------------
今天想起python中的help()方法,试了一下。
>>>help(predictor)
Help on shape_predictor in module dlib.dlib object:
class shape_predictor(Boost.Python.instance)
| This object is a tool that takes in an image region containing
some object and outputs a set of point locations that define the pose
of the object. The classic example of this is human face pose
prediction, where you take an image of a human face as input and are
expected to identify the locations of important facial landmarks such
as the corners of the mouth and eyes, tip of the nose, and so forth.
在原代码中,变量shape是预测器方法的输出。
>>>help(shape)
形状描述
class full_object_detection(Boost.Python.instance)
| This object represents the location of an object in an image along
with the positions of each of its constituent parts.
----------------------------------------------------------------------
| Data descriptors defined here:
|
| num_parts
| The number of parts of the object.
|
| rect
| The bounding box of the parts.
|
| ----------------------------------------------------------------------
变量shape似乎与点坐标位置有关。
>>>print(shape.num_parts)
68
>>>print(shape.rect)
[(1005, 563) (1129, 687)]
我假设有 68 个表示人脸标志点。
>>> print(shape.part(68))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: Index out of range
>>> print(shape.part(65))
(1072, 645)
>>> print(shape.part(66))
(1065, 647)
>>> print(shape.part(67))
(1059, 646)
如果是真的。剩下的问题是哪个部分在响应哪个面部标志点。
【问题讨论】:
-
您可以检测点并在图像上绘制它们的数字。或者你可以看这里matthewearl.github.io/2015/07/28/switching-eds-with-python
-
哇,这是个好主意。