在之前的博客中,我们已经介绍了基于libfacedetection的人脸定位。该项目也实现了初步的人脸特征点定位(5个点,包括眼睛,鼻尖和嘴角)。在一些应用中,我们需要更加精确的人脸特征点来指导我们实现诸如建模,配准,分区等操作,仅仅五个特征点是不能满足需求的。因此,更加精确的人脸特征点定位算法需要被引入。这里,我门介绍一个经典的,容易配置的人脸特征点定位算法,能够满足大部分特征点定位的应用需求,即DEST(Deformable Shape Tracking)

1. DEST编译

关联Paper:One Millisecond Face Alignment with an Ensemble of Regression Trees

Github:GitHub - cheind/dest: One Millisecond Deformable Shape Tracking Library (DEST)

项目链接:Face Alignment

DEST是一个比较老的方法,我之所以选择DEST做我项目中的人脸特征点提取模块,主要是因为其配置比较简单,且性能不错。接下来我们介绍DEST编译的具体步骤。

首先从github上下载DEST项目,之后使用cmake进行初始配置,注意,这里需要提前安装好opencv,我是用的是3.4.6版本。

在configuring done之后,我们能看到一些报警信息。这时,我们需要勾选后两个选项,然后把eigen的路径配置好,如下:

之后点击生成,完成cmake的初始配置。

接下来就是对dest项目进行编译, 打开你在cmake中设定的项目路径,找到deformable-shape-tracking.sln,用VS打开。

build ALL_BUILD,完成编译

将dest/core/路径下的config.h文件拷贝到源文件路径dest-master/inc/dest/core下

这里需要下载一个bin文件(dest_tracker_VJ_ibug.bin),用于存储人脸特征点定位的预训练模型。项目作者已经提供了最新的下载:Releases · cheind/dest · GitHub。我存储在dest-master\etc\cv路径下,和classifier_frontalface_alt2.xml放在一起。这两个文件都是用来载入dest人脸检测模型的。

到这里,前期的准备工作基本就完成了。

2. VS配置

到这一步,就是把之前编译好的dest项目配置在你希望使用其功能的VS项目中即可。你需要提前配置好opencv和eigen。

include路径:

dest-master\inc

dest-master\ext

Lib路径:

Lib路径在你编译好的dest项目中的debug文件夹下,如下图:

E:\project\FacialLandmarksDetection\dest\Debug

 Linker Input:

dest.lib

到这里,VS项目的基本配置就完成了。

3. 程序实例

参考examples的代码,我给出一个具体的实现:

pathFaceDetector 用于载入xml。

pathTracker 用于载入在之前我们已经下载的bin文件。

pathImage 载入我们需要探查的图片路径。

#include <dest/dest.h>
#include <dest/face/face_detector.h>
#include <dest/util/draw.h>
#include <dest/util/convert.h>
#include <dest/util/glob.h>
#include <random>
#include <opencv2/opencv.hpp>
#include <tclap/CmdLine.h>
#include <string>int main(int argc, char** argv)
{    std::string pathFaceDetector = "../dest-master/etc/cv/classifier_frontalface_alt2.xml";std::string pathTracker = "../dest-master/etc/cv/dest_tracker_VJ_ibug.bin";std::string pathImage = "../Figure/instance.jpg";dest::face::FaceDetector fd;if (!fd.loadClassifiers(pathFaceDetector)) {std::cout << "Failed to load classifiers." << std::endl;return 0;}dest::core::Tracker t;if (!t.load(pathTracker)) {std::cout << "Failed to load tracker." << std::endl;return 0;}cv::Mat imgCV = cv::imread(pathImage, cv::IMREAD_GRAYSCALE);cv::Mat imgCV_show = cv::imread(pathImage);if (imgCV.empty()) {std::cout << "Failed to load image " << pathImage << std::endl; return 0;}dest::core::Image img;dest::util::toDest(imgCV, img);dest::core::Rect r;if (!fd.detectSingleFace(img, r)) {std::cout << "Failed to detect face" << std::endl;return 0;}// Default inverse shape normalization. Needs to be equivalent to training.dest::core::ShapeTransform shapeToImage = dest::core::estimateSimilarityTransform(dest::core::unitRectangle(), r);std::vector<dest::core::Shape> steps;dest::core::Shape s = t.predict(img, shapeToImage, &steps);cv::Scalar color = cv::Scalar(0, 255, 0);for (dest::core::Shape::Index i = 0; i < s.cols(); ++i) {cv::circle(imgCV_show, cv::Point2f(s(0, i), s(1, i)), 2.f, color, -1, CV_AA);}cv::imshow("prediction", imgCV_show);int key = cv::waitKey();    return 0;
}

结果:

如果你看到这里的话,希望能给点个赞,万分感谢。

人脸特征点定位方法DEST, 基于VS2019+OpenCV3.4.6相关推荐

  1. 深度学习(十七)基于改进Coarse-to-fine CNN网络的人脸特征点定位

    基于改进Coarse-to-fine CNN网络的人脸特征点定位 原文地址:http://blog.csdn.net/hjimce/article/details/50099115 作者:hjimce ...

  2. 深度学习(十五)基于级联卷积神经网络的人脸特征点定位

    基于级联卷积神经网络的人脸特征点定位 原文地址:http://blog.csdn.net/hjimce/article/details/49955149 作者:hjimce 一.相关理论 本篇博文主要 ...

  3. 人脸特征点定位之Explicit Shape Regression

     人脸特征点定位之Explicit Shape Regression 人脸关键点定位是在人脸检测基础上,进一步定位人脸的眼睛眉毛鼻子嘴巴轮廓等.主要思想就利用关键点附近的信息以及各个关键点之间的相 ...

  4. 深度学习人脸特征点自动定位综述

    来源:专知 本文为论文,建议阅读5分钟本文对基于深度学习的人脸特征点自动定位进行综述. 人脸特征点定位是根据输入的人脸数据自动定位出预先按人脸生理特征定义的眼角.鼻尖.嘴角和脸部轮廓等面部关键特征点, ...

  5. 多传感器融合定位十四-基于图优化的定位方法

    多传感器融合定位十四-基于图优化的定位方法 1. 基于图优化的定位简介 1.1 核心思路 1.2 定位流程 2. 边缘化原理及应用 2.1 边缘化原理 2.2 从滤波角度理解边缘化 3. 基于kitt ...

  6. matlab人眼虹膜定位,基于Hough变换的人眼虹膜定位方法

    基于Hough变换的人眼虹膜定位方法 matlab 2021-2-12 下载地址 https://www.codedown123.com/64459.html 图像处理源代码,基于Hough变换的人眼 ...

  7. 基础知识(十三)dlib python人脸检测 特征点定位

    import cv2 import dlib import numpy as np #根据人脸框bbox,从一张完整图片裁剪出人脸 def getface():bgrImg = cv2.imread( ...

  8. python人脸关键点识别,基础知识(十三)dlib python人脸检测 特征点定位

    import cv2 import dlib import numpy as np #根据人脸框bbox,从一张完整图片裁剪出人脸 def getface(): bgrImg = cv2.imread ...

  9. 人脸特征点检测:SDM

    <Supervised Descent Method and its Applications to Face Alignment>论文解读 这篇文章发表于CVPR2013,来自于CMU. ...

  10. 人脸特征点检测(一)

    人脸特征点检测(Facial landmark detection),即人脸特征点定位.人脸对齐(Face Alignment),是在人脸检测的基础上进行的,对人脸上的特征点例如嘴角.眼角等进行定位. ...

最新文章

  1. 【libevent】libevent库学习总结(二)——编程步骤
  2. 今日宇宙最热科技:人工智能可预测死亡时间,马斯克拿下美空军1.3亿合同!...
  3. 2018年聊天机器人状态报告
  4. 这款Web SSH工具超牛逼!
  5. tar打包和解压命令
  6. 盘点 8 种最坑的 SQL 错误用法
  7. 由内而外 多项国产自主先进设计
  8. 稳妥方法论:如何完整地设计出游戏关卡及场景
  9. 魔窗mLink发布2019收费标准,20W年费是物有所值?还是重度收费?
  10. 辨别DVI接口连接线三种类型五种规格
  11. zcmu-5066: 黑暗长廊
  12. 大数据入门看哪些书比较好
  13. 震惊!用盗版CorelDRAW竟然会这样!
  14. 通过拼多多根据ID获取商品详情数据简易操作
  15. 交易猫跳转APP+后台管理
  16. pyqt5 和 pySinde2 动态加载 QT Designer
  17. selenium操作各种浏览器
  18. jitter单位_抖动(jitter)测量
  19. 90 后董事长的国内首个元宇宙婚礼!网友:不由得想起了 QQ 炫舞和飞车......
  20. linux输入rz命令后出现receive.**B0100000023be50,没有文件弹出框

热门文章

  1. MATLAB 2016b--神经网络工具箱中图形用户界面的使用
  2. 【本周最新】qlv转mp4格式转换器 工具 软件
  3. 谷歌gmail注册入口_Gmail,日历和其他Google Apps即将出现的外观如下
  4. Xshell “所选的用户密钥未在远程主机上注册,请再试一次”SSH 登录远程linux服务器(良心整理)
  5. PIL (Python Imaging Library) 教程
  6. java制作名片applet程序_【小程序 提取码:krua】壹佰智能名片小程序版本V1.1.45 – 持续更新 无后门...
  7. jmeter.results.shanhe.me.xsl
  8. 面试官,不要再问我三次握手和四次挥手
  9. GO语言开源项目TOP 100
  10. CSDN 创始人蒋涛:开源吞噬世界,得开发者得天下