Dlib库实现人脸关键点定位

一、引言

Dlib" 是一个C++库,提供了广泛的机器学习算法和工具,包括图像处理、计算机视觉、数据挖掘和机器学习等领域。它被广泛用于人脸识别、人脸关键点检测、物体检测等任务。Dlib库的特点之一是其高度的可移植性,它可以在多个平台上运行,包括Windows、Linux和macOS。

接下来会针对dlib库对于人脸关键点定位的功能来进行代码演示。

二、准备环节

我们需要用到的模型是:shape_predictor_68_face_landmarks.dat 

"shape_predictor_68_face_landmarks.dat" 是一个预训练的模型文件,用于在图像中检测人脸并定位人脸的68个关键点。这个模型文件通常与Dlib库一起使用,以进行人脸关键点检测。

这个模型是在大量人脸图像数据集上训练得到的,它可以用来定位人脸的各种关键点,包括眼睛、眉毛、鼻子、嘴巴等部位的位置。这对于许多计算机视觉应用非常有用,例如人脸表情识别、人脸识别、面部特征分析等。

通常,你可以从Dlib官方网站下载这个模型文件。注意,模型文件的大小可能会比较大,因此下载可能需要一些时间,具体文件名和路径可能会根据Dlib的版本和发布而有所不同。

一旦你下载了这个模型文件,你可以在Dlib的Python接口中使用 dlib.shape_predictor 来加载它,然后将其应用于图像以检测人脸关键点。

三、代码演示

import numpy as np
import cv2
import dlib

img = cv2.imread("hg1.jpg")  # 读取图像

detector = dlib.get_frontal_face_detector()  # 构造人脸检测器
faces = detector(img, 0)  # 检测人脸

# dlib.shape_predictor载入模型(加载预测器)
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")

for face in faces:  # 获取每一张脸的关键点(实现检测)
    shape = predictor(img, face)  # 获取关键点
    # 将关键点转换为坐标(x,y)的形式
    landmarks = np.matrix([[p.x, p.y] for p in shape.parts()])
    # 绘制每一张脸的关键点(绘制shape中的每个点)
    for idx, point in enumerate(landmarks):
        pos = (point[0, 0], point[0, 1])  # 当前关键的坐标
        # 针对当前关键点,绘制一个实心圆
        cv2.circle(img, pos, 2, color=(0, 255, 0))
        font = cv2.FONT_HERSHEY_SIMPLEX  # 字体
        cv2.putText(img, str(idx), pos, font, 0.4, (255, 255, 255), 1, cv2.LINE_AA)

cv2.imshow("img", img)
cv2.waitKey()
cv2.destroyAllWindows()

 这里对cv2.putText(),进行一些补充介绍:

cv2.putText(image, text, org, fontFace, fontScale, color, thickness, lineType, bottomLeftOrigin)

  • image: 要绘制文本的图像。
  • text: 要绘制的文本内容。
  • org: 文本的起始坐标,通常是一个元组 (x, y) 表示文本的左下角位置。
  • fontFace: 字体类型,通常使用 cv2.FONT_HERSHEY_ 开头的常量,如 cv2.FONT_HERSHEY_SIMPLEX
  • fontScale: 字号缩放因子。
  • color: 文本颜色,通常是一个BGR格式的元组,例如 (0, 255, 0) 表示绿色。
  • thickness: 文本的线宽,通常为一个整数值,-1 表示填充文本。
  • lineType: 文本轮廓线的类型,通常使用 cv2.LINE_AA 实现抗锯齿效果。
  • bottomLeftOrigin: 一个布尔值,指示 org 坐标是否表示文本的左下角(True)或左上角(False)。

 四、运行结果

Dlib库实现人脸关键点定位_第1张图片

图中可以看出目标图像上有68个被标记的关键点,这与选择的预训练模型有关。 

你可能感兴趣的:(opencv,1024程序员节,计算机视觉)