0前言当前基于深度学习的人工智能的换脸技术比较多 , 但实际上 , 对于一些相同角度、相似肤色换脸场景其实无须通过深度学习模型即可达到比较好的效果 。本文基于OpenCV针对相同脸部角度、相似肤色场景实现完美换脸 。最终效果如下所示(下图为动态图 , 读者可以仔细
0 前言当前基于深度学习的人工智能的换脸技术比较多 , 但实际上 , 对于一些相同角度、相似肤色换脸场景其实无须通过深度学习模型即可达到比较好的效果 。本文基于OpenCV
针对相同脸部角度、相似肤色场景实现完美换脸 。最终效果如下所示(下图为动态图 , 读者可以仔细观察脸部变化过程):
文章插图
1 原理原理如下:
2 查找脸部关键点脸部关键点可以通过
- 查找脸部关键点
- 获取关键点凸包 , 并对凸包点计算
delanauy
三角形 。- 每个对应的
delanauy
三角形做仿射变换- 人脸融合
dlib
库获取:pip install dlib
如果安装失败 , 可以尝试一下将Python
版本降到3.6
。dlib
可以检测人脸68
个关键点 , 如下所示:文章插图
68个关键点
3 delanauy三角形得到
68
个关键点后无法直接贴脸 , 因为每个人的脸型大小不一致 。为了适配不同大小的脸型 , 我们将人脸区域划分为多个delanauy
三角形 , 每个三角形区域单独做仿射变换 。首先获取人脸关键点凸包 , 即得到处于外围的关键点 , 直接调用
opencv
函数cv2.convexHull
即可 。得到如下所示:文章插图
对凸包点计算
delanauy
三角形 , 每个三角形区域单独仿射变换 。如下所示:【pythonopencv做界面 python基于opencv的人脸识别】
文章插图
仿射变换实现如下:
def apply_affine_transform(src, src_tri, dst_tri, size):
\\\'\\\'\\\' 应用仿射变换
src: 输入图像
src_tri: 输入图像中的三个点
dst_tri: 输入图像三个点对应输出图像中三个点
size: 输出图像大小
return: 返回输入图像按照两个三角形对应点的仿射变换得到的图像
\\\'\\\'\\\'
# 得到仿射矩阵
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 隔夜燕麦可以用生燕麦做吗
- 炸薯条怎么做才不会软,炸薯条怎么做才不会软呢
- 怀孕超声检查是什么意思「怀孕做超声是什么意思」
- 梦到桥断了是什么意思「做梦梦见桥断了是什么意思」
- 做梦梦到在刷墙 梦到刷墙是什么意思
- 祭灶糖是什么做的
- 牛肉和红薯怎么炒好吃又营养,青椒炒牛肉丸怎么做好吃,青椒炒牛肉丸的家?
- 农村小微贷款如何开展,银行小微贷款怎么做
- 盆栽换盆技巧 盆景翻盆换土怎么做
- 晒干的烟熏腊鸭怎么做好吃,丹州板鸭怎么做好吃?