本文链接:https://blog.csdn.net/cy1070779077/article/details/85224347
人脸替换(FaceSwap)的一些思考

最一开始,我使用了openCV(一个机器学习视觉库)的一个比较专业的tutorial(之前人脸检测也是使用了这个)中提供的一种人脸替换的方式。主要思路是,假设脸A要替换为脸B,先检测出脸A和脸B的脸部标记(facial landmarks,包括眼睛、鼻子、嘴巴等等诸多特征点的位置),针对脸B所有特征点构造一个凸包,凸包(外边界)上的点两两连接,可以划分出很多小的三角形,然后利用微分的思想将这些每个小三角形替换(仿射等变换)到脸A对应的位置,最后openCV提供了让结果图显得看起来自然一些的处理函数(泊松克隆,Seamless cloning)。

其实以上这种处理方式对图片上的人脸替换应用需求已经比较足够了,比如图output.jpg,它原本是特朗普的脸,替换为了泰德·科鲁兹的脸(虽然乍一看有些不自然,但感觉总体还是不错的)

接下来我使用Premiere自制了一段简单的小视频,本质上就是特朗普图片的缩放和移动。然后我们进行视频中人脸的替换实验,得到输出视频。我们很容易发现存在的问题,就是视频中脸部的抖动问题。

(以上这个方法和我之前在处理的模块化的应用一样,实现步骤比较简易,但是由于预期目标的不同,所以可能给人的满意度会大有不同。像人脸检测的话,我们的bounding box有一定抖动其实影响不大,但是人脸替换则不然。)

关于脸部抖动的原因,我思考了一下,主要应该是因为人脸检测的时候每一帧得到的每个脸部标记点的相对位置变动性导致的。通俗地讲,第1帧的鼻子和嘴巴的标记点之间可能距离20个像素点,但是第2帧的鼻子和嘴巴的标记点之间可能距离25个像素点,因为我们送入到人脸检测模型里的是一帧对应的一整张图片,人脸的大小以及人脸在这整张图片上的位置都会影响最后脸部每个标记点的位置以及标记点之间的相对位置。所以导致了从第1帧到第2帧可能发生的脸部抖动的问题。

所以我也查阅了一下其他的人脸替换方法。

第一个是DeepFakes,它是使用深度神经网络做图像生成。我大致看了一下它的基本思想,通俗地讲,假设要把脸A替换为脸B,那么我们自行将脸B的图片进行各种方式的扭曲化(扭曲方式应该是有讲究的),得到大量扭曲化图片的集合S_B,我们训练一个深度神经网络模型M能将S_B里每张扭曲化的脸还原为脸B,之后我们把脸A送入模型M,这样我们就能较好的实现把脸A替换为脸B。

第二个是DeepFaceLab,也只是大致看了一下,需要使用tensorflow机器学习框架。

这两种方法和一开始第一种方法不同。一开始第一种方法只是在人脸检测的过程中运用了机器学习的思想,用的是pretrained的预测模型,而真正到替换的时候只是简单的做仿射变换而已;但是后两种的话就比较彻底、完整地在使用机器学习方法做人脸替换,效果个人感觉应该会好不少。但是后两种方法如果想要较好地利用起来可能还得花不少时间配置环境、看懂技术细节。
————————————————
版权声明:本文为CSDN博主「RoyChen97」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/cy1070779077/article/details/85224347

人脸替换(FaceSwap)的一些思考的更多相关文章

  1. 【工作代码】复杂 JSON 值替换处理

    总结下最近的工作遇到的点:入参复杂 JSON 层层嵌套,Java 怎么优雅的处理. 一.关于 JSON JSON 是类似 XML 用于存储和交互文本信息.但优于 XML ,其更小,更快,更易懂和解析. ...

  2. 让视障者的网络之路少一些障碍——微软为 Edge 浏览器开发自动图像描述功能并呼吁网页作者补充图片的替换说明

    网页是互联网的组成部分,浏览器是开启互联网大门的钥匙.对于生活在信息时代下的我们而言,每一个人都很难离开网络而生活,其中也包括盲人这一残障群体. 本文的引子是如下一条新闻: IT之家3月18日消息,微 ...

  3. Shell之sed用法 转滴

    通过例子学习sed的用法 1,sed介绍    sed可删除(delete).改变(change).添加(append).插入(insert).合.交换文件中的资料行,或读入其它档的资料到 文> ...

  4. 深入浅出理解iOS经常使用的正則表達式—基础篇[Foundation]

    參考资料:cocoachina的zys475481075的文章 几个单词 Regular ['regjʊlə]adj. 定期的:有规律的 Expression[ɪk'spreʃ(ə)n; ek-] n ...

  5. python 全栈开发,Day67(Django简介)

    昨日内容回顾 1. socket创建服务器 2. http协议: 请求协议 请求首行 请求方式 url?a=1&b=2 协议 请求头 key:value 请求体 a=1&b=2(只有p ...

  6. OpenFaceswap 入门教程(2):软件使用篇!

    安装完OpenFaceswap之后,是不是就迫不及待的想要“见证奇迹”了呢? 都说磨刀不误砍柴工.开始之前请先做一个准备.然后大致了解一下换脸的过程 换脸基本步骤是: 把视频切成很多图片 把图片中的人 ...

  7. DeepFaceLab小白入门(3):软件使用!

    换脸程序执行步骤,大部分程序都是类似.DeepFaceLab 虽然没有可视化界面,但是将整个过程分成了8个步骤,每个步骤只需点击BAT文件即可执行.只要看着序号,一个个点过去就可以了,这样的操作应该不 ...

  8. DeepFaceLab小白入门(2):软件安装!

    严格上来说这个软件本身并不需要安装,他唯一需要的就是对应版本的显卡驱动,CUDA和CuDNN都非必须.下面我说一下如何安装正确的驱动版本.我尽量写得简洁清晰,希望大家都能看懂,但是,如果你连基本的电脑 ...

  9. 【部分原创】python实现视频内的face swap(换脸)

    1.准备工作,按博主的环境为准 Python 3.5 Opencv 3 Tensorflow 1.3.1 Keras 2 cudnn和CUDA,如果你的GPU足够厉害并且支持的话,可以选择安装 那就先 ...

随机推荐

  1. SpringCloud2.0 Turbine 断路器集群监控 基础教程(九)

    1.启动基础工程 1.1.启动[服务中心]集群,工程名称:springcloud-eureka-server 参考 SpringCloud2.0 Eureka Server 服务中心 基础教程(二) ...

  2. Spring WebSocket中403错误解决

    最近测试了一下spring的websocket,遇到了一个比较恶心的问题,在这记录一下. 问题源自之前开发的一个h5项目,这个项目在80端口下一直放着,就顺便在里面随便加了几行代码测试websocke ...

  3. k8s安装之kube-state-metrics.yaml

    概述 已经有了cadvisor.heapster.metric-server,几乎容器运行的所有指标都能拿到,但是下面这种情况却无能为力: 我调度了多少个replicas?现在可用的有几个? 多少个P ...

  4. DFS遍历拷贝所有子文件夹及目录列表 (Java版)

    如题 注意,文件夹是不能拷贝的, 需要mkdir的 文件选择合适的流进行拷贝 main测试方法 /** * 主测试类,默认将D:\\base01 下的复制到D:\\base02 * @param ar ...

  5. JDK5不定参数方法

    jdk5之后出现了调用方法时传递不定参数的情况,如下所示: List<Intrger> list1 = Arrays.asList(new Integer[]{1,2,3}); List& ...

  6. java通过url读取网络图片

    使用java.net读取网络文件 import java.io.BufferedInputStream; import java.io.FileOutputStream; import java.io ...

  7. c语言1博客作业08

    一.本周作业头 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 http://edu.cnblogs.com/campus/zswxy/SE2019-3/homework/9982 我在 ...

  8. HashMap的个别方法

    static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // 16 默认初始容量 16 static final int MAXIMUM_C ...

  9. 《S》读后感

    利用周末时间读完了<S>,有一幅画面在脑袋里挥之不去:一条急湍直下的河,岸边茂密的枝叶延伸到河面上,很多人被河水冲向前方,每个人的眼里都夹杂着凄凉与愤怒,时不时回头,,想同这河水做一次歇斯 ...

  10. Fzu-html1

    Fzu-趣考网-前端1 html 题目: 使用html写出h1~h6六种格式的hello world 使用html的table标签制作一个表格,存储本学期专业课程(参考教务处课表) 使用html的sc ...