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 dlib
import cv2#源程序是用sys.argv从命令行参数去获取训练模型,精简版我直接把路径写在程序中了
predictor_path = "D:/pregram/spider_test/code/face_model/data/data_dlib/shape_predictor_68_face_landmarks.dat"faces_path = "D:/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)

Facial landmarks: 使用 dlib, OpenCV, and Python提取面部标志点相关推荐

  1. 人脸检测进阶:使用 dlib、OpenCV 和 Python 检测面部标记

    使用 dlib.OpenCV 和 Python 检测面部标记 今天,我们将使用dlib和OpenCV来检测图像中的面部标记.dlib的安装教程: https://wanghao.blog.csdn.n ...

  2. python:dlib在视频流中提取面部特征点

    下载dlib库 这个库下载起来巨巨巨巨巨麻烦(当然不排除你运气比较好,一下子就成功了),具体下载方式请参考别的文章. 视频流中提取面部特征点 写在主循环之前: import numpy as np i ...

  3. 基于opencv,使用python提取视频帧以及提取TVL1光流

    处理视频,最常用的开源工具箱非opencv莫属了,python可以很好的支持它. 一 从视频读取帧.得到相关属性.并设置保存哪些帧 首先:我们得新建一个videocapture对象: cap=cv2. ...

  4. 表情识别(二)——使用Dlib、opencv和Python标记和提取脸部的特定区域

    文章目录 使用Dlib.OpenCV和Python检测眼睛,鼻子,嘴唇和下巴引用函数 特征点和不同人脸部位的关系 可视化每一个人脸的部位特征 使用Dlib.OpenCV和Python提取脸的局部主函数 ...

  5. dlib 使用OpenCV,Python和深度学习进行人脸识别 源代码

    请直接访问原文章 dlib 使用OpenCV,Python和深度学习进行人脸识别 源代码 https://hotdog29.com/?p=595 在 2019年7月7日 上张贴 由 hotdog发表回 ...

  6. python实现面部特效_【AI美颜算法】300行Python实现基于人脸特征的美颜算法

    先上效果图: AI美颜 人类一直是一个看脸的物种,人人都希望可以变得更美是无可争议的,而美颜类应用的出现拯救了所有人,从此人类进入了美(照)颜(骗)时代. .... 每次写技术blog都要写一堆废话引 ...

  7. python表情识别程序_Python+Dlib+Opencv实现人脸采集并表情判别功能的代码

    一.dlib以及opencv-python库安装 介于我使用的是jupyter notebook,所以在安装dlib和opencv-python时是在 这个命令行安装的 dlib安装方法: 1.若可以 ...

  8. 使用OpenCV和Python从图像中提取形状

    Welcome to the first post in this series of blogs on extracting features from images using OpenCV an ...

  9. cvtcolor python opencv_二值分析 | OpenCV + skimage如何提取中心线

    点击上方蓝字关注我们 微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 问题 前几天有个人问了我一个问题,问题是这样的,他有如下的一张二值图像: 怎么得到白色Blob中心线,他希望的 ...

  10. Python人脸微笑识别2-----Ubuntu16.04基于Tensorflow卷积神经网络模型训练的Python3+Dlib+Opencv实现摄像头人脸微笑检测

    Python人脸微笑识别2--卷积神经网络进行模型训练目录 一.微笑数据集下载 1.微笑数据集下载 2.创建人脸微笑识别项目 3.数据集上传至Ubuntu人脸微笑识别项目文件夹 二.Python代码实 ...

最新文章

  1. GitHub日收7000星,Windows计算器项目开源即爆红!
  2. 华为新版交换机端口配置由TRUNK改为ACCESS
  3. Java学习_day009面向对象(oop):对象和类(下)
  4. php 实现查询百度排名,PHP实现获取百度top50的搜索排行关键字
  5. 七牛技术总监陈超:记Spark Summit China 2015
  6. s3c6410 jpeg编码 linux,S3C6410 裸机硬件JPEG解码
  7. 字符串赋值方式理解 sizeof 和strlen的一些区别
  8. 【BZOJ3531】旅行,树链剖分+开点线段树
  9. “要从中学开始普及人工智能教育,但不能增加学生负担”
  10. python怎么读取csv文件-python如何读取csv数据
  11. mysql备份 php_详解MYSQL的备份还原(PHP实现)
  12. WPS2019专业版办公软件安装包+永久授权码!
  13. Less变量动态修改
  14. python通讯录管理系统
  15. 人大金仓 创建表空间_人大金仓kingbaseES安装及操作
  16. 通过 TensorFlow 实现 AI 语音降噪提升 QQ 音视频通话质量
  17. 关闭 c4244_秀刻开放注册锁粉;天天有鱼推基金认筹;智慧云开放交易;五子登科开放交易;火艺短视频开放交易;购视界改制;等会儿短视频关闭交易;...
  18. 在本地计算机无法启动clipbook,依赖服务组无法启动 win7依赖服务或组无法启动 怎么弄啊...
  19. 面试官这么表现就有戏?不一定哦!
  20. 分享几个翻译PDF的软件给你

热门文章

  1. matlab中screen函数,13 PTB Screen 函数
  2. 易捷行云EasyStack携手北联国芯,共筑鲲鹏生态
  3. 【复习笔记】计算机网络求职考点整理
  4. Zbar源码解析——zbar_oho_条形码阅读器|2021SC@SDUSC
  5. 技巧篇 之 Just do it (这将会是一个漫长的历程。。。)
  6. 自动化测试遇到的难点_谈谈我在自动化测试中遇到的坑
  7. 体系切换,华为IPD的研发管理之道(上)
  8. 机器学习经典模型简单使用及归一化(标准化)影响
  9. 武林传奇之七剑下天山java游戏开发商_宝3武林传奇之七剑下天山的配方
  10. hyperledger fabric 2.3.3 搭建教程