具体过程分为以下四步
面部标志提取
dlib提供了实现面部特征提取的接口:
get_landmarks
用于检测面部
关键特征点的坐标
普式分析法(Procrustes Analysis)计算人脸对齐映射矩阵
仿射变换
向量的平移
放缩及旋转变换
图像的平移
放缩及旋转都是
原始图像的坐标进行计算。
怎么找到映射矩阵M
便是普式分析法
输出是矩阵M
transformation_from_points()
利用opencv及计算得到的映射矩阵对图像进行映射
接受三个参数
需要变换的原始图像
映射矩阵M 以及变换的图像大小
4 颜色(肤色、光线)校正
这里使用了颜色平衡
但不是直接使用全图的常数比例因子
而是采用每个像素的局部比例因子
mask提取
蒙版会画出两个白色的凸多边形
帮助消除剩下的不连续部分
最后的图像叠加
combined_mask
相加
从为得到最后的换脸结果图
好了,下面来看案例实战操作
程序思路
用 decect 接口
获取人脸关键点
return_landmark 参数
不能为 0 不然不会返回人脸关键点
用 mergeface 接口,合成脸部图像
注意图片文件大小不超过 2 MB
示例运行代码
封装一个多张照片的合成函数
注意边界特殊情况
图片1:
图片2:
效果: