当前位置:   article > 正文

Dlib库实现人脸关键点定位_c++ dlib人脸关键点

c++ 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 来加载它,然后将其应用于图像以检测人脸关键点。

三、代码演示

  1. import numpy as np
  2. import cv2
  3. import dlib
  4. img = cv2.imread("hg1.jpg") # 读取图像
  5. detector = dlib.get_frontal_face_detector() # 构造人脸检测器
  6. faces = detector(img, 0) # 检测人脸
  7. # dlib.shape_predictor载入模型(加载预测器)
  8. predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
  9. for face in faces: # 获取每一张脸的关键点(实现检测)
  10. shape = predictor(img, face) # 获取关键点
  11. # 将关键点转换为坐标(x,y)的形式
  12. landmarks = np.matrix([[p.x, p.y] for p in shape.parts()])
  13. # 绘制每一张脸的关键点(绘制shape中的每个点)
  14. for idx, point in enumerate(landmarks):
  15. pos = (point[0, 0], point[0, 1]) # 当前关键的坐标
  16. # 针对当前关键点,绘制一个实心圆
  17. cv2.circle(img, pos, 2, color=(0, 255, 0))
  18. font = cv2.FONT_HERSHEY_SIMPLEX # 字体
  19. cv2.putText(img, str(idx), pos, font, 0.4, (255, 255, 255), 1, cv2.LINE_AA)
  20. cv2.imshow("img", img)
  21. cv2.waitKey()
  22. 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)。

 四、运行结果

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/324788?site
推荐阅读
相关标签
  

闽ICP备14008679号