(一)获取人脸数据
需要准备图片数据:两个不同的人脸,各种表情,数量越多越好,约1万张以上会有比较好的替换效果。
一般采用的方法是从视频中截取,操作如下:
首先下载视频(本例用风行播放器下载)。
剪切视频片段(本例用爱剪辑)。
因为目的是为了截取人脸部,所以剪切的视频片段很讲究。
视频分辨率要高清(否则截取的人脸像素太低);片段中目的人脸比较大、突出、最好就是只有他自己一个人镜头特写的视频片段。
从视频中截取图片(本例用Ffmpeg软件)。
此时得到有目的人脸的一张张图片。
然后,需要删除不需要的图片(如有非目的人脸的,这就是数据清洗)。
然后写几行代码检测图片中的人脸并截取(利用OpenCV)。
检测并截取的人脸(用于输入到神经网络中训练提取特征)。
人脸替换的效果非常依赖于这些截取到的人脸图片的质量:
如果截取的人脸包含了过多的干扰部分,那么替换效果就很差。
一直重复前面的步骤,直到获取足够多的人脸(两个需要互换的人脸)。
然后再写几行代码修改人脸图片的宽高为统一大小,如256x256;
因为输入到神经网络中训练的图片宽高需要一致。
(二)进行模型训练
接下来,开始进行漫长的训练:
一般需要,一万张图片,训练100万次,才有比较好的替换效果;
我计算了一下时间,普通i7-PC,训练一次约44s,100万次需要运行约1.2万小时,约500天;玩不起(本例训练了1000次)。
深度学习漫长的训练过程;
本例代码是利用深度学习框架keras(backend is TensorFlow)构建CNN;
训练完成之后,得到换脸模型;
(三)进行视频人脸替换
•接下来进行视频人脸替换;
•通俗点说就是通过提取面部的特定结构,如眼睛、鼻子、嘴巴的位置,颧骨、下巴、脸颊的形状;
•然后按照这些特征点做替换;
•前面训练的模型,已经有了两个不同的人脸的特征;
•就目前了解的信息来说,通过深度学习替换人脸这一技术相对于工业使用的人脸表情提取技术,优势是大大降低了使用门槛,但是远远还做不到以假乱真的完美效果;
接下来,仍然使用爱剪辑工具,从一段视频,如电影中截取用于替换人脸的一个视频片段;
截取的视频片段也是需要精心挑选的:需要有利于检测到被替换的人脸。
例如,截取的视频中同时出现在镜头中人脸太多、人脸太小等都不利于检测。
再利用ffmpeg工具,把需要被替换人脸的视频按原帧速截取成每一张图片;
注意:一定要按原帧速截取,否则后面替换人脸后再合成视频会失帧。
接下来,利用神经网络进行人脸替换。
输入数据:上一步截取的每一帧图片;
输出数据:人脸被替换后的每一帧图片;
简单点说,替换原理如下:
1.从原图片中,检测到人脸(用OpenCV),截取人脸部分;
2.把截取的人脸部分(人脸图片)输入到神经网络进行替换,得到一个新的人脸(图片);
3.再把新人脸(图片)替换原图片中的人脸;
4.然后,进行图片“消边”、模糊等图片处理;因为原图人脸和新人脸,虽然尺寸一致,
但毕竟不是同一张图片,新图片(人脸)替换到原图片之后,会有明显的“边”,无法
完全融入到原图中,所以需要处理;这是数字图像处理技术了;
5.如此重复,知道每一张图片的人都替换完成;
从上面的人脸替换原理可以知道,换脸效果受到以下几个因素的影响:
•1、从原图片截取的人脸(图片)不能有过多的干扰像素。最理想的是截取的仅仅只有面部。
•2、训练的模型效果要非常好。这受到训练数据(图片)的质量、数量、尺寸大小(越大越好,但是会变慢)和训练次数(时间)的影响。
•3、要有很好的数字图像处理技术。替换人脸后,新脸(图片)不能很好与原图背景(人物)融合的处理,包括“消边”、模糊、融合等处理。
•4、要有很好的人脸检测技术。因为OpenCV的人脸检测功能准确率并不是100%的,所以存在有某些帧(图片)没有检测到人脸,那么就不会替换人脸。
(四)合成替换了人脸的视频
•最后一步:把替换了人脸的每一张图片(每一帧)按原来视频的帧速合成视频(用ffmpeg工具)。
•这就是整个视频人脸替换的操作和原理。
(五)分析-总结.
•从整个替换人脸过程、原理可以知道,最终的效果极大的受到人脸检测技术、图像处理技术的影响。
•在理想情况下,单从AI替换人脸这个功能来说,有足够多的、高质量的人脸数据,足够多次的训练,基于深度学习的方法替换人脸确实取得了很不错的效果,如下图:
上图:特朗普基于原表情换成凯奇;下图:反之;
•在整个视频替换人脸应用来说,除了通过AI替换人脸之外,还要受到训练数据收集、人脸检测、后期图像处理的极大影响,所以仍无法做到通用、实用。
•但是,也可以知道,如果基于某个非常必要的目的,因为单纯的AI基于原表情换脸的效果还不错,可以花时间、精力并掌握了图像处理技术的话,理论上也是可以特定为某一段视频换脸的。
(六)写在最后
•突然发现,通用的视频换脸项目没有做成,却做了一个“视频打码器”。。。。。。
•在即将写完本文章的时候,因为本人的不放弃精神,发现了“新大陆”,更新的替换技术,很有可能会有更好的替换效果。接下来马上进行研究,如果更好的效果,再写一篇新文章,先定个题目:视频换脸原理(进阶)。
•最后,虽然吐槽不是很好的事情,但是偶尔轻微的吐槽一下就当是记录心情了:
•随着研究这东西越久,越感觉像蚍蜉撼树,大量高质量的数据、强大的算力、枯燥的算法。。。。。。都不好弄啊。
•三年来,电脑不堪压力第一次蓝屏了,太惨了。
•完毕。
网友评论