KureiSersen site

5_deepface

· Edwin.Liang

最近接到一个小需求,用于将真实摄像头中拍摄的人脸替换成其他人脸并在会议软件中展示,想了两天然后一天完成,下面简单记录一下整体实现过程

人脸的替换&展示

经过前两天的简单调研,很容易就会在开源软件和公众项目中找到方向,现在直播带货或者各大网红博主大部份都使用一款叫做deepfacelive的软件实现摄像头实时换脸功能,在这里挂一下该开源项目的链接

该项目最早可以追溯到2019年(linux版本),所以整体AI框架使用的当时较为流行的$TensorFlow$,目前官方比较推荐的系统平台是$WIN$,针对用户来说,整体软件打包的比较完整,但是上传到了mega云盘中,在国内下载需要使用魔法.

实现原理:

  1. 将视频按帧切成图片
  2. 将每一帧的图片送到Yolo5中框选出人脸
  3. 将框选出的人脸输入到人脸模型中产生对应表情的目标人脸(该人脸模型是换脸的关键)
  4. 识别人脸基准点,该动作是为了使目标人脸与源人脸更加贴合,以适应下一步对齐操作(该步骤使用的是 Delaunay 三角剖分算法)
  5. 源人脸基准点与目标人脸基准点对其,勇目标人脸覆盖源人脸
  6. 将目标人脸扣除背景,并且羽化、模糊边缘,调整目标人脸肤色,使得整体覆盖效果更加平滑

个性化人脸模型的训练

根据上面提到的人脸替换的实现原理,可以了解到实现这个小需求的关键就是如何训练出个性化的人脸模型,下面就着重讲解一下这一部分的内容.

训练人脸模型使用的是同源项目deepfacelab,该项目成立的初衷是为了将已有视频中的人脸替换为目标人脸,替换人脸的前提就是要优先收集目标人脸的视频,并且基于这些视频训练出人脸模型,而后用于现有源视频的替换.这里挂一下该开源项目的链接

该项目出现的要比deepfacelive更早一些,因此依然使用$TensorFlow$模型,目前官方推荐的系统平台有三个,分别是$$WIN、Linux(apt)、CentOS\enspace Linux$$到笔者写这篇文章为止, $Centos$已经确定停止后续安全支持,$Linux(apt)$项目应为违反$github$社区规则遭到封禁,当然该项目在$github$上仍然有较老版本,在这里放一下链接,所以主流系统只剩下$WIN$,在该系统下的整体软件安装包依然被作者上传到mega云盘中.

该项目安装之后,会在安装目录中生成$.bat$批处理文件,该软件就是通过点击这些批处理文件实现使用的,下面基于deepfacelab的工作流讲解一下人脸模型训练的实现原理.

实现原理及步骤:

目标人脸视频逐帧拆分

裁切人脸并绘制遮照

应用遮照处理人脸

加载百万训练模型训练

删除结构性文件二次训练

关闭扭曲训练