使用shape_to_np函数,我们可以将这个对象转换成一个NumPy数组。
有了这两个辅助函数,我们现在就可以检测图像中的面部标记了。
打开一个新文件,将其命名为facial_landmarks.py,然后插入以下代码:
import the necessary packages
from imutils import face_utils
import numpy as np
import argparse
import imutils
import dlib
import cv2
#构造参数解析器并解析参数
ap = argparse.ArgumentParser()
ap.add_argument(“-p”, “–shape-predictor”, required=True,
help=“path to facial landmark predictor”)
ap.add_argument(“-i”, “–image”, required=True,
help=“path to input image”)
args = vars(ap.parse_args())
导入所需的Python包。
将使用imutils的face_utils子模块访问上面详述的助手函数。
然后将导入dlib。
解析我们的命令行参数:
–shape-predictor:这是通往dlib预先训练的面部标记检测器的路径。你可以在这里下载检测器模型,也可以使用本文的“下载”部分来获取代码+示例图像+预先训练过的检测器。
–image:我们要检测面部标记的输入图像的路径。
既然我们的导入和命令行参数已经处理完毕,让我们初始化dlib的面部检测器和面部标记预测器:
初始化dlib的人脸检测器(基于HOG)然后创建
面部标记预测器
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor(args[“shape_predictor”])
初始化dlib的预训练人脸检测器,该检测器基于对用于对象检测的定向梯度标准直方图+线性SVM方法的修改。
然后使用提供的shape_predictor的路径加载面部标记预测器。
但是,在我们能够实际检测面部标记点之前,我们首先需要检测输入图像中的面部:
加载输入图像,调整大小,并将其转换为灰度
image = cv2.imread(args[“image”])
image = imutils.resize(image, width=500)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)