前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Python案例】基于OpenCV换脸效果

【Python案例】基于OpenCV换脸效果

原创
作者头像
superhua
发布2022-05-22 20:22:46
2.5K04
代码可运行
发布2022-05-22 20:22:46
举报
文章被收录于专栏:CNN
运行总次数:4
代码可运行

欢迎关注本文首发公众号:Python学习实战。公众号主要发布Python相关技术文章,分享Python实用案例、面试问答题、Python基础巩固等内容。

0 前言

当前基于深度学习的人工智能的换脸技术比较多,但实际上,对于一些相同角度、相似肤色换脸场景其实无须通过深度学习模型即可达到比较好的效果。本文基于OpenCV针对相同脸部角度、相似肤色场景实现完美换脸。最终效果如下所示(下图为动态图,读者可以仔细观察脸部变化过程)

相互换脸效果
相互换脸效果

1 原理

原理如下:

查找脸部关键点 获取关键点凸包,并对凸包点计算delanauy三角形。 每个对应的delanauy三角形做仿射变换 人脸融合

2 查找脸部关键点

脸部关键点可以通过dlib库获取:

代码语言:python
代码运行次数:0
复制
pip install dlib

如果安装失败,可以尝试一下将Python版本降到3.6

dlib可以检测人脸68个关键点,如下所示:

68个关键点
68个关键点

3 delanauy三角形

得到68个关键点后无法直接贴脸,因为每个人的脸型大小不一致。为了适配不同大小的脸型,我们将人脸区域划分为多个delanauy三角形,每个三角形区域单独做仿射变换。

首先获取人脸关键点凸包,即得到处于外围的关键点,直接调用opencv函数cv2.convexHull即可。得到如下所示:

凸包区域
凸包区域

对凸包点计算delanauy三角形,每个三角形区域单独仿射变换。如下所示:

`delanauy`三角形
`delanauy`三角形

仿射变换实现如下:

代码语言:python
代码运行次数:3
复制
def apply_affine_transform(src, src_tri, dst_tri, size):
    ''' 应用仿射变换
    src: 输入图像
    src_tri: 输入图像中的三个点
    dst_tri: 输入图像三个点对应输出图像中三个点
    size: 输出图像大小
    return: 返回输入图像按照两个三角形对应点的仿射变换得到的图像
    '''
    # 得到仿射矩阵
    warp_mat = cv2.getAffineTransform(np.float32(src_tri), np.float32(dst_tri))

    # Apply the Affine Transform just found to the src image
    dst = cv2.warpAffine(src,
                         warp_mat, (size[0], size[1]),
                         None,
                         flags=cv2.INTER_LINEAR,
                         borderMode=cv2.BORDER_REFLECT_101)

    return dst

篇幅原因,这里不贴出其他实现代码。需要代码的直接拉到文章最后,免费获取源码。

4 人脸融合

人脸融合使用泊松融合比较适合:

代码语言:python
代码运行次数:1
复制
...
cv2.seamlessClone(dst, to_img, p_mask, center, cv2.NORMAL_CLONE)
...

完整代码的直接拉到文章最后,免费获取源码。

5 源码获取

  1. 关注公众号:Python学习实战
  2. 公众号聊天界面回复:dlib获取人脸68个关键点调用源码。
  3. 公众号聊天界面回复:换脸 获取完整源码。

如果您觉得本文有帮助,辛苦您点个不需花钱的赞,您的举手之劳将对我提供了无限的写作动力! 也欢迎关注我的公众号:Python学习实战, 第一时间获取最新文章。

关注【Python学习实战】
关注【Python学习实战】

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0 前言
  • 1 原理
  • 2 查找脸部关键点
  • 3 delanauy三角形
  • 4 人脸融合
  • 5 源码获取
相关产品与服务
人脸融合
人脸融合(Face Fusion)可将一张人脸图像对应的人脸特征融合到模板图像中的特定人物上,生成的图片既兼具指定图像和模板图像中的人脸特征,也保持了模板图像中人物的姿态、表情、动作等属性,支持单脸、多脸、选脸融合。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档