OpenCV—dlib库-关键点定位

前言

dlib库是一个功能强大的C++库,提供了广泛的机器学习算法和工具,包括图像处理、计算机视觉、数据挖掘和机器学习等领域。在关键点定位方面,dlib库有着出色的表现,特别是在人脸关键点定位方面。

一、含义

关键点定位是指在图像中自动找出具有显著特征或重要意义的点,这些点通常是物体边缘的角落位置、特殊形状的点或具有某种特定属性的点。在OpenCV中,关键点定位通常基于特征描述子和回归模型,通过学习图像中关键点的位置和形状模式,实现对关键点的准确定位。

二、基本步骤

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

  • 安装dlib库:首先,需要在Python环境中安装dlib库。这可以通过pip命令来完成,前面我们已经为大家讲解了如何安装dlib库,并为大家提供了相关whl文件。
  • 下载预训练模型:接下来,需要下载dlib库提供的预训练模型文件,如shape_predictor_68_face_landmarks.dat。这个文件可以从链接: https://pan.baidu.com/s/13DFQTxHN87AE6o4xAgzGRw?pwd=d37w 提取码: d37w 中获取,然后将其放在该代码相同的文件夹里面。
  • 加载模型和图像:在Python代码中,使用dlib库加载预训练模型和待处理的图像。通常,图像会被转换为灰度图像以提高处理速度。
  • 检测人脸:使用dlib库的人脸检测器检测图像中的人脸。这可以通过dlib.get_frontal_face_detector()函数来获取人脸检测器,并使用它对图像进行人脸检测。
  • 定位关键点:对于检测到的每个人脸,使用预训练模型进行关键点定位。这可以通过dlib.shape_predictor()函数来实现,该函数接受模型文件路径和检测到的人脸区域作为输入,并返回人脸关键点的位置信息。
  • 绘制关键点:最后,可以使用OpenCV等库在图像上绘制关键点,以便可视化结果。这通常涉及在关键点的位置绘制圆形或矩形标记。

三、代码实现

import cv2
import dlib
import numpy as np

img = cv2.imread('fmjj.png')

# 加载形状预测器模型
detector = dlib.get_frontal_face_detector()
# 获取前置人脸检测器
predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')
faces = detector(img, 0)
for face in faces:
    shape = predictor(img, face)

    landmarks = np.array([[p.x, p.y] for p in shape.parts()])

    for idx, point in enumerate(landmarks):
        pos = (point[0], point[1])

        cv2.circle(img, pos, 2, color=(0, 255, 0), thickness=-1)

        cv2.putText(img, str(idx), pos, cv2.FONT_HERSHEY_SIMPLEX, 0.4, (255, 255, 255), 1, cv2.LINE_AA)

cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

首先我们导入对应的库,然后读取我们需要的图像,加载形状预测器模型,检测并遍历人脸图像,对其关键点进行绘制,最终展示图像。结果如下:
在这里插入图片描述

四、总结

OpenCV中的关键点定位技术是一项重要的计算机视觉技术,具有广泛的应用前景。通过学习和掌握OpenCV中的关键点定位方法,可以为后续的计算机视觉任务打下坚实的基础。例如,在人脸识别、表情识别等一系列场景中带你运用到关键点定位。

猜你喜欢

转载自blog.csdn.net/2301_77698138/article/details/143027142