【learnOpenCv】Facial Landmark Detection:人脸特征点检测的一些应用

偶然看到的,感觉写的很好,随手大概内容翻译转过来,如有侵权请告知删除。

原文链接:https://www.learnopencv.com/facial-landmark-detection/


【learnOpenCv】Facial Landmark Detection:人脸特征点检测的一些应用_第1张图片

目前在计算机视觉领域,人脸方向的研究非常之多。人脸分析最常见的应用是人脸识别,但是如果我们想要验证图像中一个人的身份,需要先知道这个图像中人脸的位置。因此,人脸检测(在图像中定位人脸,并返回一个包含人脸的矩形或圆形框)是一个非常热门的领域。2001年,Paul Viola and Michael Jones在他们开创性的论文““Rapid Object Detection using a Boosted Cascade of Simple Features”来解决这个问题。在OpenCV的早期甚至是现在的某种程度上来说,一个OpenCV的一个关键应用是对Viola and Jones人脸检测器的实现。

一旦你得到face的bounding box后,一个明显的研究问题就是,你是否能正确地找到不同人脸特征的定位(如眼睛中心、眉毛、嘴巴、鼻尖等)。人脸特征检测也成为“facial landmark detection”、“facial keypoint detection”和“face alignment”,你可以使用这些关键字在google中找到关于这些话题的额外资料。

下面是几个关于人脸关键点检测中的几个有趣的应用。其中一些被列在下面。

Facial feature detection improves face recognition

Facial landmarks 可以用来对齐人脸图像到平均面部形状,因此,使得在进行对齐之后,所有图像的facial landmarks的位置大概都是相同的。直观地说,这使得人脸识别算法在对齐后的图像上训练的结果会更好,这种直觉已经被业界很多论文所证实。

Head pose estimation

一旦你知道一些landmark的点之后,你也可以估计头的姿态。换句话说,你可以知道头在空间中的位置,或者这个人在看向何方。例如,上图中CLM-framework也返回了头的姿态。

Face Morphing

Facial landmarks可以被用来对齐人脸,然后可以变形以产生中间图像。如下图中的例子。

【learnOpenCv】Facial Landmark Detection:人脸特征点检测的一些应用_第2张图片

点击这里可以看到后续关于Face Morphing的内容。

Virtual Makeover

在作者的公司(TAAZ.com),编写了自己的facial landmark检测器。这些检测到的landmarks被用来计算口腔、眼睛的轮廓,可以虚拟化妆。如下图所示。

【learnOpenCv】Facial Landmark Detection:人脸特征点检测的一些应用_第3张图片

Face Replacement

如果你已经有两张脸的脸部特征估计点,你可以将一个脸向另一个脸对齐,然后将一个脸克隆岛另一个脸上面。你可以做一些这样的事:

https://auduno.github.io/clmtrackr/examples/facesubstitution.html

点击这里查看更多关于Face Swap的内容。

在之前的文章中,展示了如果使用脸部特征来预测脸部吸引力。

显然,检测图像视频中人脸特征的能力打开了很多有趣应用的可能性,然后现在介绍可以让我们这样做的一些工具。

Facial Feature Detection & Tracking Libraries

在过去5年里,该领域也出现了一些活动。这些活动的一部分原因是大量标注数据集的可用性,如LFPW和Helen。作者在下面的部分中列出了大量论文,但是并不推荐从头开始实现这些论文,这是因为现在我们已经有了这些论文的高质量开源实现的工具。

在下面的视频中,你可以看到两个库:DLib和CLM-Framework的结果。

视频是个YouTube视频,加载不出来。

Dlib ( C++ / Python )

Dlib是一个机器学习、计算机视觉、图像处理等算法集成的一个库。这个库中的大部分都可以包含在你的C++中。如果你喜欢python,没问题,它也有python API。

相比其他人脸特征检测、跟踪库,作者个人更喜欢Dlib的原因是它的代码非常简洁,文档好,许可证允许用作商用,库中选择实现的算法都是比较快和准确的,可以很容易在C++工程中集成这个库,只需要包含头文件即可。

如何编译Dlib:

1、首先从github上clone一份:

git clone https://github.com/davisking/dlib.git

2、Build examples ( OSX / Linux )

cd dlib/examples
mkdir build
cd build
cmake .. 
cmake --build . --config Release

这些例子是一个比较好的方式开始使用dlib。可以复制一份例子中的cpp文件,进行修改,修改CMakelists.txt文件,然后重新编译。

3、Compile dlib python module

cd dlib/python_examples 
./compile_dlib_python_module.bat

4、Set PYTHONPATH environment variable


 Put the following line in .bashrc or .profile
export PYTHONPATH=/path/to/dlib/python_examples:$PYTHONPATH

5、Test python module

python -c "import dlib"

如果上述步骤都没有报错,那么已经全部设置好了。如果有任何编译问题,可以去Dlib.net查看额外的介绍。

那么如何运行 Dlib’s facial landmark detector ?

如果你已经built例子后,可以直接运行facial landmark detector

cd examples/build/
#Download the face landmark model 
wget http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2
tar xvjf shape_predictor_68_face_landmarks.dat.bz2
./webcam_face_pose_ex

如果你想运行在单张图像上,你可以

./face_landmark_detection_ex shape_predictor_68_face_landmarks.dat faces/*.jpg

CLM-Framework (C++)

CLM-framework,也被认为是Cambridge Face Tracker,是面向人脸关键点检测和头部姿态估计的C++库。你可以在那个视频中看到它的运行情况。在OSX 编译这个库可能有点困哪,但是并不是特别糟糕。这个库依赖于OpenCV3和X11。

有两个地方Dlib比 CLM-Framework要好。首先,Dlib比 CLM-Framework要快很多。齐次,Dlib库允许你用作商用。如果是我选,我选Dlib,有趣的是, CLM-Framework依赖于dlib。

如何编译CLM-Framework?
How to compile CLM-Framework ?

在OSX上编译 CLM-Framework 有些过分。但是对于windows和Linux,这里有细节介绍。对于在OSX上编译1.3.0版本,作者适用了Linux的介绍,但做了以下改动。

大多数依赖都是使用brew安装的。

在 CMakeLists.txt文件中做以下修改:

find_package( OpenCV 3.0 REQUIRED )替换为

find_package( OpenCV 3.0 REQUIRED HINTS /path/to/opencv ) INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS}) INCLUDE_DIRECTORIES(/opt/X11/include)

在exe/SimpleCLM/SimpleCLM.cpp文件中做以下修改:

将:

writerFace = VideoWriter(tracked_videos_output[f_n], CV_FOURCC(‘D’,’I’,’V’,’X’), 30, captured_image.size(), true);

替换为:

writerFace = VideoWriter(tracked_videos_output[f_n], CV_FOURCC(‘M’,’P’,’4′,’V’), 15, captured_image.size(), true);

如何运行 CLM-Framework的人脸特征检测器呢?

在编译了 CLM-Framework后,可执行文件在bin路径下。在本文中显示的demo,你可以使用:

bin/SimpleCLM

Face++ ( FacePlusPlus ) : Web API

对facial landmark detection最好的实现是face++。他们获得了300 Faces In-the-Wild Landmark Detection Challenge, 2013的冠军。他们提供了一个易于使用的API。问题是,你上传一张图像到他呢的服务器,会引起很多隐私问题。但是如果隐私不是问题,face++是一个不错的选择。你可以查看demo:http://www.faceplusplus.com/demo-landmark/

Facial Feature Detection Research

很多不同的方法都用来解决这个额问题,但是这很难在一篇文章中进行总结。对于想要有更多研究的人来说,作者这里简单选择了一些重要的论文(偏向于一些最近的工作)。

1、Active Appearance Model (AAM) by T. Cootes, G. Edwards and C. J. Taylor. [1998]
2、Face Alignment through Subspace Constrained Mean-Shifts by Jason M. Saragih, Simon Lucey and Jeffrey F. Cohn. [2009]
3、Localizing Parts of Faces Using a Consensus of Exemplars by Peter N. Belhumeur, David W. Jacobs, David J. Kriegman, Neeraj Kumar [ 2011 ]
4、Face Alignment by Explicit Shape Regression by Xudong Cao Yichen Wei Fang Wen Jian Sun [2012]
5、Supervised Descent Method and Its Applications to Face Alignment by Xuehan Xiong and Fernando De la Torre [2013]
6、Constrained Local Neural Fields for robust facial landmark detection in the wild by Tadas Baltrusaitis, Peter Robinson, and Louis-Philippe Morency. [2013]
7、Extensive Facial Landmark Localization with Coarse-to-fine Convolutional Network Cascade by Erjin Zhou, Haoqiang Fan, Zhimin Cao, Yuning Jiang and Qi Yin. [2013]
8、Face alignment at 3000 fps via regressing local binary features by S Ren, X Cao, Y Wei, J Sun. [2014]
9、Facial Landmark Detection by Deep Multi-task Learning by Zhanpeng Zhang, Ping Luo, Chen Change Loy, and Xiaoou Tang. [2014]
10、One Millisecond Face Alignment with an Ensemble of Regression Trees by Vahid Kazemi and Josephine Sullivan. [2014]

你可能感兴趣的:(算法,人脸识别,OpenCV,计算机视觉,图像处理)