许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  Facial Landmarks:使用Dlib、OpenCV和Python提取面部标志点(68点)

Facial Landmarks:使用Dlib、OpenCV和Python提取面部标志点(68点)

阅读数 12
点赞 0
article_banner

Facial landmarks with dlib, OpenCV, and Python

目录

Facial landmarks with dlib, OpenCV, and Python

1.什么是 面部标志 ?(What are facial landmarks?)

dlib的面部标志探测器 :



下面我们 dlib和OpenCV来检测图像中的面部标志(Facial landmarks):

面部标志用来定位和便是人脸的显著区域,例如:

  • 眼睛
  • 眉毛
  • 鼻子
  • 下颌的轮廓

面部标注点已成功应用于人脸对齐、头部姿态估计、换脸、眨眼检测等领域。

这篇博客文章中,将重点关注面部标志的基础知识,包括:

  1. 什么是面部标志以及它们是如何工作的。
  2. 如何使用dlib、OpenCV和Python从图像中检测和提取面部标志。

这篇博文的第一部分将讨论面部标志以及为什么它们被用于计算机视觉应用。

在这里,我将演示如何使用dlib、OpenCV和Python来检测和提取面部标志。

顺便提一嘴 python3.7 的dilb 安装:

链接: https://pan.baidu.com/s/1MKqW7WH2XP-J8MOLeq3cDA 提取码: rfh8

cd到下载文件同一个目录,然后:

 pip install dlib-19.17.99-cp37-cp37m-win_amd64.whl

我用了这个,成功了

最后,我们将看看将面部标志检测应用于图像的一些结果。

  • 1.什么是 面部标志 ?(What are facial landmarks?)

人脸标志用于对图像中关键的人脸属性进行标注和识别

                                                       Fig 1 :面部标志用于对图像中关键的人脸属性进行标注和识别

检测面部标志是形状预测问题的一个子集。给定输入图像(通常是指定感兴趣对象的感兴趣区域),形状预测器试图沿着形状定位感兴趣的关键点。 在面部标志的上下文(context of facial landmarks)中,我们的目标是使用形状预测方法检测面部的重要面部结构。

因此,面部标志检查分为两步:

步骤1:定位图片中的脸。

步骤2:检测人脸ROI(Region interset)中的关键面部结构。

人脸检测(步骤#1):

可以通过多种方式实现。 我们可以使用OpenCV, 或者我们甚至可以使用基于 深度学习 的算法进行人脸定位。用于检测图像中的人脸的实际算法都无关紧要。相反,重要的是通过某种方法我们获得了人脸边界框(即,图像中人脸的(x,y)坐标)。

给定面部区域,我们可以应用步骤#2:

检测面部区域中的关键面部结构。 有各种各样的面部标志检测器,但是所有方法本质上都试图定位和标记以下面部区域:

  1. 右眉
  2. 左眉
  3. 右眼
  4. 左眼
  5. 鼻子

dlib库中包含的面部标志检测器是Kazemi and Sullivan(2014年)发表的论文"One Millisecond Face Alignment with an Ensemble of Regression Trees"

该方法首先使用:

图像上标记的面部标志的训练集。这些图像是手动标记的,指定每个面部结构周围区域的特定(x,y)坐标。 更具体地说,先验是输入像素对之间距离的概率。

给定该 训练数据  ,训练回归树的集合以直接从像素强度本身估计面部标志点位置(即,没有“特征提取”发生)。 最终结果是一个面部标志检测器,可用于实时检测具有高质量预测的面部标志。 关于这种技术的更多信息和细节,请务必阅读该论文以及官方的dlib文档。

2. 了解dlib的面部标志探测器 :

dlib库中预先训练的面部标志检测器用于估计映射到面部面部结构的 68 个(x,y)坐标的位置。

68个坐标的索引如下图所示:

                                                              Fig 2 :从iBUG 300-W数据集可视化68个面部地标坐标

这些注释是dlib面部标志预测器所训练的68点iBUG 300-W数据集的一部分。

值得注意的是,还存在其他类型的面部标志检测器,包括可以在HELEN数据集上训练的194点模型。

无论使用哪个数据集,都可以利用同一个dlib框架在输入的训练数据上训练一个形状预测器。如果您想训练面部标志检测器或您自己的自定义形状预测器,这是很有用的。

在这篇博文的剩余部分,将演示如何在图像中检测这些面部标志。

代码地址:https://github.com/iAuAi/Learning_demo

# -*- coding: utf-8 -*-  import dlibimport cv2  #源程序是用sys.argv从命令行参数去获取训练模型,精简版我直接把路径写在程序中了predictor_path = "https://www.gofarlic.com/pregram/spider_test/code/face_model/data/data_dlib/shape_predictor_68_face_landmarks.dat" faces_path = "https://www.gofarlic.com/pregram/spider_test/code/face_model/data/data_faces/face_1.jpeg"#与人脸检测相同,使用dlib自带的frontal_face_detector作为人脸检测器detector = dlib.get_frontal_face_detector() #使用官方提供的模型构建特征提取器predictor = dlib.shape_predictor(predictor_path)#读取图片img = cv2.imread(faces_path) #与人脸检测程序相同,使用detector进行人脸检测 dets为返回的结果dets = detector(img, 1)#使用enumerate 函数遍历序列中的元素以及它们的下标#下标k即为人脸序号#left:人脸左边距离图片左边界的距离 ;right:人脸右边距离图片左边界的距离#top:人脸上边距离图片上边界的距离 ;bottom:人脸下边距离图片上边界的距离for k, d in enumerate(dets):    print("dets{}".format(d))    print("Detection {}: Left: {} Top: {} Right: {} Bottom: {}".format(    k, d.left(), d.top(), d.right(), d.bottom()))     #使用predictor进行人脸关键点识别 shape为返回的结果    shape = predictor(img, d)    #获取第一个和第二个点的坐标(相对于图片而不是框出来的人脸)    print("Part 0: {}, Part 1: {} ...".format(shape.part(0),  shape.part(1)))     #绘制特征点    for index, pt in enumerate(shape.parts()):        print('Part {}: {}'.format(index, pt))        pt_pos = (pt.x, pt.y)        cv2.circle(img, pt_pos, 2, (255, 0, 0), 1)   cv2.imshow('test2', img)k = cv2.waitKey(0)cv2.destroyAllWindows()

output:

dets[(103, 44) (211, 152)]

   Detection 0: Left: 103 Top: 44 Right: 211 Bottom: 152

   Part 0: (108, 82), Part 1: (109, 93) ...

   Part 0: (108, 82)

   Part 1: (109, 93)

   Part 2: (111, 105)

   Part 3: (113, 116)

   Part 4: (118, 126)

   Part 5: (125, 135)

   Part 6: (136, 142)

   Part 7: (147, 146)

   Part 8: (160, 147)

   Part 9: (172, 145)

   Part 10: (182, 139)

   Part 11: (190, 131)

   Part 12: (196, 121)

   Part 13: (198, 111)

   Part 14: (200, 99)

   Part 15: (200, 88)

   Part 16: (200, 77)

   Part 17: (120, 66)

   Part 18: (126, 61)

   Part 19: (134, 59)

   Part 20: (142, 61)

   Part 21: (150, 65)

   Part 22: (162, 65)

   Part 23: (169, 61)

   Part 24: (177, 59)

   Part 25: (184, 61)

   Part 26: (189, 66)

   Part 27: (156, 75)

   Part 28: (157, 82)

   Part 29: (157, 89)

   Part 30: (158, 97)

   Part 31: (149, 105)

   Part 32: (154, 106)

   Part 33: (158, 106)

   Part 34: (162, 105)

   Part 35: (166, 105)

   Part 36: (129, 79)

   Part 37: (133, 76)

   Part 38: (139, 76)

   Part 39: (144, 79)

   Part 40: (139, 80)

   Part 41: (133, 80)

   Part 42: (168, 79)

   Part 43: (172, 76)

   Part 44: (178, 75)

   Part 45: (182, 77)

   Part 46: (178, 79)

   Part 47: (173, 80)

   Part 48: (142, 120)

   Part 49: (148, 116)

   Part 50: (154, 113)

   Part 51: (158, 114)

   Part 52: (162, 112)

   Part 53: (168, 115)

   Part 54: (173, 119)

   Part 55: (168, 123)

   Part 56: (163, 124)

   Part 57: (159, 125)

   Part 58: (155, 125)

   Part 59: (149, 124)

   Part 60: (144, 120)

   Part 61: (155, 119)

   Part 62: (159, 119)

   Part 63: (163, 118)

   Part 64: (171, 119)

   Part 65: (163, 118)

   Part 66: (159, 119)

   Part 67: (155, 119)


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删


相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空