本文链接: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. HTML&CSS基础-常用选择器

    HTML&CSS基础-常用选择器 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.html源代码 <!DOCTYPE html> <html> & ...

  2. 2013.5.8 - KDD第二十天

    下午去上刘杨老师的机器学习课,今天讲的"朴素被噎死",他本想当场举个例子,结果读了好半天才吧关系都拼凑上,他说明天给我们带来个精彩的,回去之后夜里把朴素贝叶斯自己又脑补了一下,发现贝叶斯原理(后验)就 ...

  3. Linux硬盘满了,系统速度贼慢,居然是Jenkins.log太大了

    用查找命令找出大于1G的文件 find / -size +1G -print 为什么jenkins.log会产生40+G的文件? 以上在Windows上的时候,运行了几个月,也没有发生这种现象? 而在 ...

  4. APS实现的要点与难点

    在前一篇关于文章中讨论了不同层级.粒度的生产计划,在各行业中受重视程度的差异问题. 承蒙大家热烈讨论.本文则在收集各方高见的基础上,对于供应链上各个环节的运营.生产计划再作稍微深入一点的探讨.本文将列 ...

  5. VMware Linux系统克隆

    系统克隆 网卡设备无法识别 解决克隆虚拟机后网卡设备无法识别启动问题的方法 一.故障问题 从vmware workstation中克隆(clone)了一个CentOS 6的虚拟机,启动之后发现网卡没有 ...

  6. java线程基础巩固---分析Thread的join方法详细介绍,结合一个典型案例

    关于Thread中的join方法貌似在实际多线程编程当中没怎么用过,在当初学j2se的时候倒时去学习过它的用法,不过现在早已经忘得差不多啦,所以对它再复习复习下. 首先先观察下JDK对它的介绍: 其实 ...

  7. 小程序~获取手机号getPhoneNumber提示该appid没有权限

    处理思路 (1)小程序是不是企业主体 (2)有没有进行认证 (3)如果没有 是不可以获取用户手机号码的 .

  8. Tomcat默认连接超时时间

    秒=1小时 2. 在web.xml中通过参数指定: xml 代码 <session-config>         <session-timeout>30</sessio ...

  9. Flask - flask-script | 多app应用 | wtforms

    flask-script 用于实现类似于django中 python3 manage.py runserver ...类似的命令 安装 >: pip3 install flask-script ...

  10. 什么是C/S和B/S架构?

    C/S架构 C/S即:Client与Server ,中文意思:客户端与服务器端架构,这种架构也是从用户层面(也可以是物理层面)来划分的. 这里的客户端一般泛指客户端应用程序EXE,程序需要先安装后,才 ...