偶然看到的,感觉写的很好,随手大概内容翻译转过来,如有侵权请告知删除。
原文链接:https://www.learnopencv.com/facial-landmark-detection/
目前在计算机视觉领域,人脸方向的研究非常之多。人脸分析最常见的应用是人脸识别,但是如果我们想要验证图像中一个人的身份,需要先知道这个图像中人脸的位置。因此,人脸检测(在图像中定位人脸,并返回一个包含人脸的矩形或圆形框)是一个非常热门的领域。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 landmarks 可以用来对齐人脸图像到平均面部形状,因此,使得在进行对齐之后,所有图像的facial landmarks的位置大概都是相同的。直观地说,这使得人脸识别算法在对齐后的图像上训练的结果会更好,这种直觉已经被业界很多论文所证实。
一旦你知道一些landmark的点之后,你也可以估计头的姿态。换句话说,你可以知道头在空间中的位置,或者这个人在看向何方。例如,上图中CLM-framework也返回了头的姿态。
Facial landmarks可以被用来对齐人脸,然后可以变形以产生中间图像。如下图中的例子。
点击这里可以看到后续关于Face Morphing的内容。
在作者的公司(TAAZ.com),编写了自己的facial landmark检测器。这些检测到的landmarks被用来计算口腔、眼睛的轮廓,可以虚拟化妆。如下图所示。
如果你已经有两张脸的脸部特征估计点,你可以将一个脸向另一个脸对齐,然后将一个脸克隆岛另一个脸上面。你可以做一些这样的事:
https://auduno.github.io/clmtrackr/examples/facesubstitution.html
点击这里查看更多关于Face Swap的内容。
在之前的文章中,展示了如果使用脸部特征来预测脸部吸引力。
显然,检测图像视频中人脸特征的能力打开了很多有趣应用的可能性,然后现在介绍可以让我们这样做的一些工具。
在过去5年里,该领域也出现了一些活动。这些活动的一部分原因是大量标注数据集的可用性,如LFPW和Helen。作者在下面的部分中列出了大量论文,但是并不推荐从头开始实现这些论文,这是因为现在我们已经有了这些论文的高质量开源实现的工具。
在下面的视频中,你可以看到两个库:DLib和CLM-Framework的结果。
视频是个YouTube视频,加载不出来。
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,也被认为是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
对facial landmark detection最好的实现是face++。他们获得了300 Faces In-the-Wild Landmark Detection Challenge, 2013的冠军。他们提供了一个易于使用的API。问题是,你上传一张图像到他呢的服务器,会引起很多隐私问题。但是如果隐私不是问题,face++是一个不错的选择。你可以查看demo:http://www.faceplusplus.com/demo-landmark/
很多不同的方法都用来解决这个额问题,但是这很难在一篇文章中进行总结。对于想要有更多研究的人来说,作者这里简单选择了一些重要的论文(偏向于一些最近的工作)。
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]