样例

如何实现一个最简单的人脸渐变效果?这时候 GAN,Diffusin 还没有呢,可以用人脸检测 结合 OpenCV 实现一个。流程也很简单,分为一下三步:

Find point correspondence using face landmark detector

首先,使用人脸关键点检测算法分别对原图和目标图进行人脸检测,这样可以找到两张人脸的 位置对应关系。人脸检测和人脸关键点检测算法使用了 dlib 库。

Delaunay Triangulation

有了关键点之后,可以根据关键点的位置将图像进行三角划分,目的是将人脸切分成不同的区分, 针对不同的区域计算变换矩阵,从而将不同三角形内容融合。这里使用了 Delaunay 三角分割算法; 值得一说的是 Delaunay Triangulation 与 Voroni digram 是对偶的。

Notes: The triangulation algorithm starts its job considering triangles posted at 'infinity'. It is necessary to remove points outsize the rectangle.

Warp image and alpha blending

如何 warp 图像?上部分提到得到两张图像对应三角形的坐标,能计算得到两个平面的仿射 变换矩阵,从而将两个三角形内容进行融合。

Implementation

具体的实现已开源到小项目,该实现还基于 proxygen 和 folly 搭建了一个简易的 Web 服务,后续再单独介绍两个库。

References

  1. http://www.learnopencv.com/facial-landmark-detection/
  2. http://www.learnopencv.com/delaunay-triangulation-and-voronoi-diagram-using-opencv-c-python/
  3. http://www.learnopencv.com/face-morph-using-opencv-cpp-python/