• 基于Python实现的换脸软件


    使用Python编写的换脸软件

    这是一个使用Python编写的换脸软件,所提供的换脸功能包含以下两个场景:

    • 将图像B上的人脸换成图像A上的人脸,生成换脸图片。
    • 将视频B上的人脸换成图像A上的人脸,生成换脸视频。

    整体上,程序由两个过程组成:人脸检测和提取、人脸转换,分别实现于文件detect.pyconvert.py,两个阶段分别提供可选选项:包括图像变换的方法(2D变换和3D变换)和是否进行色彩调和。

    在图形界面上(实现文件:gui.py),提供生成的图片、视频预览功能,生成的图像视频会自动保存到out文件夹。

    使用指南

    准备

    1. 安装 Ananconda 或 Pycharm 以编译运行文件。

      推荐 Python版本:3.8.3

    2. 检查是否安装如下库,以及版本是否满足要求:

      推荐版本
      numpy>= 1.20.3
      scipy>= 1.6.2
      opencv-python>= 4.5.1.48
      dlib>= 19.22.0

      你可以通过 pip 或者 conda 进行安装或更新,例如在 Anaconda Prompt 界面下输入:

      pip install numpy==1.20.3
      pip install scipy==1.6.2
      pip install opencv-python==4.5.1.48
      pip install dlib==19.22.0
      
      • 1
      • 2
      • 3
      • 4

    运行

    • 在 Anaconda Prompt 进入对应文件夹后,输入

      python main.py
      
      • 1

      即可开启界面,也可以直接在 Pycharm 中右键运行,开启后界面如下:

    在这里插入图片描述

    运行效果

    相对而言,3D Warp面部变化的效果由于2D Warp, 2D在边缘区域处理得不是很好;使用肤色调和(Color Correction)的效果也往往优于不使用肤色调和。

    1. 不同选项的换脸效果 - I (3D Warp + Color Correction)

      Result Image
      在这里插入图片描述

    | 在这里插入图片描述
    |

    1. 不同选项的换脸效果 - I (3D Warp + Without Color Correction)

    在这里插入图片描述

    2D Warp + Without Color Correct2D Warp + Color Correct
    在这里插入图片描述
    在这里插入图片描述
    3D Warp + Without Color Correct3D Warp + Color Correct
    在这里插入图片描述
    在这里插入图片描述
    1. 不同选项的换脸效果 - II (2D Warp + Color Correction)

    在这里插入图片描述

    下面可以明显看出2D Warp和3D Warp的不同效果:

    2D Warp2D Warp + Color Correction3D Warp3D Warp + Color Correction
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    1. 视频换脸效果:视频换脸是按帧一一处理的,比较耗时。

    在这里插入图片描述

    关键算法

    • 人脸检测与提取
      • keypoints_detection - 通过人脸五官68个关键点识别人脸集合,基于dlib.shape_predictor函数和数据集shape_predictor_68_face_landmarks.dat
      • face_selection - 选取指定人脸
    • 人脸变换
      • face_swap - 人脸变换核心函数,步骤为:
        • 仿射变换(2D/3D)
        • 生成掩膜
        • 颜色校正(选)
        • 无缝接合
      • image_warping_2d - 2D仿射变换,通过调用cv2的warpAffine函数计算脸部映射后的人脸图像
        • points_transformation - 生成两份人脸关键点集的三角仿射变换矩阵M,作为2D Warping的关键参数。
      • image_warping_3d - 3D仿射变换,通过将图像变换为三角性构成的集合(借助spatial.Delaunay),对每个三角形区域进行运算和插值最后得到脸部映射后的人脸图像
        • grid_coordination - 获取点集对应的背景网格
        • bilinear_interpolation - 对人脸关键点坐标进行双线性插值处理,通过这个函数可以实现在改变图像大小的同时尽可能保证清晰度,用于人脸部分的缩放。
        • triangular_affine_matrices - 生成源点集到目标点集的三角仿射矩阵
      • mask_generation - 生成掩膜:借助cv2.fillConvexPoly填充凸多边形遮挡
      • color_correction - 通过高斯滤波进行人脸肤色调和
  • 相关阅读:
    用5000字讲清楚压敏电阻
    MyBatis-Plus生成sql语句时怎么知道表名和表的字段名,表的主键名的
    Windows 程序安装与更新方案: Clowd.Squirrel
    逆波兰表达式 (利用stl
    15. Java反射和注解
    C语言:选择+编程(每日一练)
    【python】获取URL_IP
    快速文本分类(FastText)
    unity游戏开发中的随机算法
    【数据结构与算法】如何衡量一个算法的好坏?
  • 原文地址:https://blog.csdn.net/newlw/article/details/126784159