在Python中使用face_landmarks()绘制面部特征标记
发布时间:2023-12-27 07:44:49
face_landmarks()是dlib库中一个非常有用的函数,它能够检测人脸并提取出人脸的面部特征标记,如眼睛、鼻子、嘴巴等。本篇文章将带你学习如何使用face_landmarks()函数,并使用一个例子来绘制人脸的面部特征标记。
首先,确保已经安装了dlib库。可以通过以下命令在命令行中安装dlib:
pip install dlib
接下来,导入必要的库:
import dlib import cv2 import numpy as np import matplotlib.pyplot as plt
我们还需要下载一个预训练的模型文件shape_predictor_68_face_landmarks.dat,它包含了一个已经训练好的面部特征标记模型。可以从http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2 下载。下载完成后,解压缩并将其放在当前工作目录下。
现在来看一个例子,我们将使用face_landmarks()函数来检测人脸并绘制面部特征标记。
# 初始化dlib的面部检测器和面部特征标记模型
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
# 加载图像
image = cv2.imread("example.jpg")
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
# 将图像转换为灰度图
gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
# 使用dlib的面部检测器检测人脸
faces = detector(gray)
for face in faces:
# 使用面部特征标记模型预测面部特征位置
landmarks = predictor(gray, face)
# 绘制面部特征标记
for n in range(0, 68):
x = landmarks.part(n).x
y = landmarks.part(n).y
cv2.circle(image, (x, y), 2, (255, 0, 0), -1)
# 显示并保存结果
plt.imshow(image)
plt.axis("off")
plt.show()
cv2.imwrite("output.jpg", cv2.cvtColor(image, cv2.COLOR_RGB2BGR))
在上面的例子中,我们首先初始化了dlib的面部检测器和面部特征标记模型。然后,我们加载了一张图像,并将其转换为灰度图像。接下来,我们使用面部检测器检测出人脸的位置,然后使用面部特征标记模型预测面部特征的位置。最后,我们遍历预测的面部特征位置,并在图像中绘制出这些特征标记。
运行上面的代码,你将得到一张带有人脸面部特征标记的图像。你可以尝试在example.jpg中替换成其他的图像,并看到生成的结果。人脸的面部特征将以蓝色的圆圈标记出来。
总结一下,在本篇文章中,我们学习了如何使用face_landmarks()函数来检测人脸并绘制面部特征标记。这对于许多计算机视觉任务来说是非常有用的,例如人脸识别、人脸表情分析等。希望本文对你有帮助,谢谢阅读!
