Python 实现 68 点人脸关键点检测实战
人脸关键点检测是计算机视觉领域的基石技术,通过精确定位眼角、嘴角、鼻尖等特征点,为后续的人脸分析应用提供基础数据支持。本文将系统介绍如何利用 Python 的 dlib 库实现 68 点人脸关键点检测,涵盖环境配置、核心原理及代码实战。
环境准备与模型下载
dlib 作为高效的机器学习库,其人脸检测和关键点定位功能基于 HOG(方向梯度直方图)特征与线性分类器,相比 OpenCV 的 Haar 级联分类器具有更高的准确性和稳定性。
首先安装必要的依赖库:
pip install opencv-python dlib numpy
接下来需要下载预训练的模型文件 shape_predictor_68_face_landmarks.dat。该文件包含了完整的人脸关键点检测参数,可以从 dlib 官方 GitHub 仓库获取。
技术原理简述
dlib 的 68 点检测模型融合了 HOG 特征提取和回归树算法。HOG 特征能有效捕获图像局部形状信息,对光照变化和微小形变具有良好的鲁棒性。
关键点分布遵循标准的面部结构划分:
- 0-16 点:下颌轮廓
- 17-21 点:右眉区域
- 22-26 点:左眉区域
- 27-35 点:鼻部轮廓
- 36-41 点:右眼轮廓
- 42-47 点:左眼轮廓
- 48-67 点:唇部轮廓
基础检测代码实现
初始化检测器和预测器后,我们进入图像处理流程。这里要注意,dlib 默认返回的是浮点数坐标,实际使用中通常需要转换为整数以便绘图。
import numpy as np
import cv2
import dlib
# 初始化检测器
detector = dlib.get_frontal_face_detector()
# 加载关键点预测模型
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
# 读取图像并转为灰度
img = cv2.imread("face.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 执行人脸检测,第二个参数控制上采样次数
faces = detector(gray, 1)
# 遍历检测到的人脸进行关键点标注
for face in faces:
shape = predictor(gray, face)
landmarks = np.array([[p.x, p.y] for p in shape.parts()])
# 可视化标注
for idx, point in enumerate(landmarks):
pos = (int(point[]), (point[]))
cv2.circle(img, pos, , (, , ), -)
cv2.putText(img, (idx), pos, cv2.FONT_HERSHEY_SIMPLEX, , (, , ), , cv2.LINE_AA)
cv2.imshow(, img)
cv2.waitKey()
cv2.destroyAllWindows()

