python3利用Dlib19.7实现人脸68个特征点标定

yizhihongxing

Python3利用Dlib19.7实现人脸68个特征点标定

简介

本篇攻略将介绍如何使用Python3和Dlib19.7库实现人脸68个特征点标定。Dlib是一个非常强大的机器视觉工具集,其中包含了一些实现基础人脸识别、人脸对齐和特征点检测等功能的算法。本文将使用其中的特征点检测算法,实现68个特征点的标定。首先,需要准备依赖环境。

设计思路

要实现人脸68个特征点的标定,可以分为以下几个步骤:

  1. 安装 Dlib19.7及其依赖包
  2. 下载 shape_predictor_68_face_landmarks.dat 数据文件
  3. 加载待检测的图片
  4. 使用 Dlib19.7 的人脸检测算法找到图像中的人脸
  5. 使用 Dlib19.7 的特征点检测算法找到每张人脸上68个关键点
  6. 将特征点输出到图片上,完成标定过程

详细步骤

步骤1:安装 Dlib19.7及其依赖包

在终端中使用以下命令完成 Dlib19.7 安装:

pip install dlib==19.7

需要注意的是,Dlib19.7依赖于Boost和CMake,需要先安装这些依赖库,否则会安装失败。可以使用以下命令安装:

sudo apt-get install -y build-essential cmake
sudo apt-get install -y libgtk-3-dev
sudo apt-get install -y libboost-all-dev

步骤2:下载 shape_predictor_68_face_landmarks.dat 数据文件

在进行特征点检测时,需要使用训练好的数据文件。可以在官网 http://dlib.net/files/ 找到相关资源。下载完成后,将文件放置到指定目录下即可。

步骤3:加载待检测的图片

使用 OpenCV 加载待检测的图片(需要先安装 OpenCV),如下所示:

import cv2

image = cv2.imread("test.jpg")

步骤4:使用 Dlib19.7 的人脸检测算法找到图像中的人脸

import dlib

detector = dlib.get_frontal_face_detector()

faces = detector(image)

步骤5:使用 Dlib19.7 的特征点检测算法找到每张人脸上68个关键点

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

for face in faces:
    landmarks = predictor(image, face)
    for n in range(68):
        x = landmarks.part(n).x
        y = landmarks.part(n).y
        # 将检测到的特征点绘制到图片上
        cv2.circle(image, (x, y), 1, (0, 0, 255), -1)

步骤6:将特征点输出到图片上,完成标定过程

cv2.imwrite("result.jpg", image)
cv2.imshow("result.jpg", image)
cv2.waitKey(0)

完整代码可能如下所示:

import cv2
import dlib

# 加载图片
image = cv2.imread("test.jpg")

# 创建人脸检测器
detector = dlib.get_frontal_face_detector()

# 在图像中找到人脸
faces = detector(image)

# 加载特征点检测器
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")

# 对每张人脸检测68个特征点
for face in faces:
    landmarks = predictor(image, face)
    for n in range(68):
        x = landmarks.part(n).x
        y = landmarks.part(n).y
        # 将检测到的特征点绘制到图片上
        cv2.circle(image, (x, y), 1, (0, 0, 255), -1)

# 结果展示
cv2.imshow("result.jpg", image)
cv2.waitKey(0)
cv2.destroyWindow("result.jpg")

示例说明

示例1

假设我现在有一张人脸图片 "test.jpg",需要进行68个特征点的标定。可以使用以上步骤进行标定。此时输出的图片将会包含标注了68个特征点的人脸。

import cv2
import dlib

# 加载图片
image = cv2.imread("test.jpg")

# 创建人脸检测器
detector = dlib.get_frontal_face_detector()

# 在图像中找到人脸
faces = detector(image)

# 加载特征点检测器
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")

# 对每张人脸检测68个特征点
for face in faces:
    landmarks = predictor(image, face)
    for n in range(68):
        x = landmarks.part(n).x
        y = landmarks.part(n).y
        # 将检测到的特征点绘制到图片上
        cv2.circle(image, (x, y), 1, (0, 0, 255), -1)

# 结果展示
cv2.imshow("result.jpg", image)
cv2.waitKey(0)
cv2.destroyWindow("result.jpg")

示例2

如果要对很多张图片进行特征点检测,需要将以上步骤封装到函数中,以方便复用。

import cv2
import dlib

def mark_faces(image_path, output_path):
    # 加载图片
    image = cv2.imread(image_path)

    # 创建人脸检测器
    detector = dlib.get_frontal_face_detector()

    # 在图像中找到人脸
    faces = detector(image)

    # 加载特征点检测器
    predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")

    # 对每张人脸检测68个特征点
    for face in faces:
        landmarks = predictor(image, face)
        for n in range(68):
            x = landmarks.part(n).x
            y = landmarks.part(n).y
            # 将检测到的特征点绘制到图片上
            cv2.circle(image, (x, y), 1, (0, 0, 255), -1)

    # 将结果保存到文件中
    cv2.imwrite(output_path, image)

mark_faces("test.jpg", "result.jpg")

如此,便可以简单地对很多张图片进行68个特征点的标定了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python3利用Dlib19.7实现人脸68个特征点标定 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • Numpy数组的转置和轴交换的实现

    以下是Numpy数组的转置和轴交换的实现的攻略: Numpy数组的转置和轴交换的实现 在Numpy中,可以使用transpose()函数来对数组进行转置操作,使用swapaxes()函数来对数组进行轴交换操作。以下是一些实现方法: 数组转置 可以使用transpose()函数来对数组进行转置操作。以下是一个示例: import numpy as np a =…

    python 2023年5月14日
    00
  • 对pandas中两种数据类型Series和DataFrame的区别详解

    对pandas中两种数据类型Series和DataFrame的区别详解 Pandas是一个常用的数据处理库,它提供了两种主要的数据类型:Series和DataFrame。本文将详细介绍这两种数据类型区别,并提供两个示例。 Series Series是一种一维数组,可以存储任何数据(整数、浮点数、字符串、对象等)。Series具有以下特点: 每个元素都有一个索…

    python 2023年5月14日
    00
  • Python利用numpy实现三层神经网络的示例代码

    以下是关于Python利用numpy实现三层神经网络的示例代码的攻略: Python利用numpy实现三层神经网络 在Python中,可以使用numpy库来实现三层神经网络。以下是一个示例: import numpy as np # 定义sigmoid函数 def sigmoid(x): return 1 / (1 + np.exp(-x)) # 定义sig…

    python 2023年5月14日
    00
  • NumPy与Matplotlib联合绘图

    NumPy和Matplotlib是Python科学计算中常用的两个库,其中NumPy用于数值计算和数组操作,而Matplotlib则用于数据可视化。 下面介绍一些常用的NumPy和Matplotlib绘图方法。 NumPy绘图方法 NumPy提供了一些基本的绘图函数,包括plot、hist、scatter、imshow等。 使用方法如下: plot函数:用于…

    2023年3月4日 Numpy
    00
  • python matplotlib库绘制条形图练习题

    以下是关于Python Matplotlib库绘制条形图练习题的完整攻略,包含两个示例。 Python Matplotlib库绘制条形图练习题 条形图是一种用于数据可视化的方式,可以用于比较不类别之间的数值大小。在Python中,可以使用Matplotlib库绘制条形图。以下是绘条形图的基本步骤: 导入Matplotlib库和NumPy库。 创建一个Figu…

    python 2023年5月14日
    00
  • 浅谈numpy.where() 的用法和np.argsort()的用法说明

    以下是浅谈numpy.where()的用法和np.argsort()的用法说明的攻略: numpy.where()的用法 在numpy中,可以使用numpy.where()函数来根据条件返回数组中的元素。以下是一些示例: 返回满足条件的元素 可以使用numpy.where()函数来返回满足条件的元素。以下是一个示例: import numpy as np a…

    python 2023年5月14日
    00
  • Python NumPy矩阵对象详解及方法

    Python NumPy矩阵对象详解及方法 在Python编程中,NumPy是一个非常重要的科学计算库,它提供了许多高效的数值计算工具。本攻略将详细介绍Python NumPy的矩阵对象及其方法,包括矩阵的创建、矩阵的属性和方法、矩阵的运算、矩阵的转置、矩阵的逆、矩阵的行列式、矩阵的特征值和特征向量等。 导入NumPy模块 在使用NumPy模块之前,需要先导…

    python 2023年5月13日
    00
  • Pip install和Conda install的使用

    Pip install和Conda install都是Python中常用的包管理工具,用于安装和管理Python包。以下是一个完整的攻略,包含两个示例说明。 Pip install Pip是Python中最常用的包管理工具之一,可以用于安装和管理Python包。以下是一个使用Pip install安装Python包的示例: pip install numpy…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部