欢迎访问宙启技术站
智能推送

在Python中使用face_landmarks()提取面部轮廓特征

发布时间:2023-12-27 07:46:06

在Python中使用face_landmarks()提取面部轮廓特征的方法可以使用dlib库。dlib是一个强大的计算机视觉和机器学习库,可以用于人脸检测和特征提取。下面是一个使用face_landmarks()的简单例子。

首先,需要安装dlib库。可以使用pip命令来安装dlib:

pip install dlib

接下来,需要下载dlib预训练的面部关键点检测模型。可以从dlib官方网站下载shape_predictor_68_face_landmarks.dat文件。

然后,创建一个Python脚本,导入所需的库:

import dlib
import cv2
import numpy as np

加载dlib的面部关键点检测器模型:

predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')

读取一张包含人脸的图片:

img = cv2.imread('face.jpg')

将图片转换成灰度图像:

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

使用dlib的正面人脸检测器检测人脸:

detector = dlib.get_frontal_face_detector()
faces = detector(gray)

遍历检测到的人脸,并提取面部轮廓特征:

for face in faces:
    landmarks = predictor(gray, face)
    
    # 提取面部轮廓特征
    face_landmarks = []
    for n in range(0, 68):
        x = landmarks.part(n).x
        y = landmarks.part(n).y
        face_landmarks.append((x, y))

        # 标出特征点
        cv2.circle(img, (x, y), 2, (0, 255, 0), -1)

    # 绘制面部轮廓
    face_landmarks = np.array(face_landmarks, np.int32)
    cv2.polylines(img, [face_landmarks], True, (0, 255, 0), 2)

# 显示结果
cv2.imshow('Facial Landmarks', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

上述代码中,我们首先定义了一个predictor对象,该对象是通过加载shape_predictor_68_face_landmarks.dat模型文件创建的。然后,我们读取了包含人脸的图片,并将其转换为灰度图像。接下来,我们使用dlib的正面人脸检测器检测到人脸的位置。对于每个检测到的人脸,我们使用predictor对象提取面部关键点的坐标,并将其绘制在输入图片上。

这是一个简单的使用face_landmarks()提取面部轮廓特征的例子。你可以根据自己的需求使用更多的dlib库来进行人脸分析和处理。