前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >deepfakes怎么用_deepfakes-FaceSwap使用笔记

deepfakes怎么用_deepfakes-FaceSwap使用笔记

作者头像
全栈程序员站长
发布2022-08-24 19:39:39
1.5K0
发布2022-08-24 19:39:39
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

安装过程

需要魔法上网,有些包国内下载太慢了

conda环境

在Anaconda Prompt里,查看所有环境,两个命令都行

conda env list

conda info –envs

dbff4bc9ee45440a682ab53c31c0d655.png
dbff4bc9ee45440a682ab53c31c0d655.png

查看安装的包

conda list

fe60df655605eb6f71855b7ec515b841.png
fe60df655605eb6f71855b7ec515b841.png

更换环境,前面的conda不写好像也行

conda activate faceswap

f5bcfbacc6c063aa8768952cdfcf7dfc.png
f5bcfbacc6c063aa8768952cdfcf7dfc.png

提示no module named cv2

进入相应的环境,安装缺少的包

conda install opencv

提取人脸

9d957ce449e8e435ac6ed22ad159ab33.png
9d957ce449e8e435ac6ed22ad159ab33.png

Input Dir可以是视频或者图片文件夹

Output Dir是输出的截取好的人脸图片文件夹

Alignments是对齐文件,用于标注人脸的位置信息,不填的话会默认生成在Input Dir。如果要自定义,需要新建一个.fsa后缀的空文件

下面的Extract Every N是每N张图片截取一张人脸,对视频就是每N帧截取一张人脸。官方建议视频是每半秒或一秒截取一张。比如,60帧的视频,半秒就填30

提取两个人脸的图片。

删除无关图片

提取的人脸图片有的可能不是要进行操作的那个人,比如视频里出现多个人,或者多个人的合照,其他人也会被提取。应该删除无关信息

为了便于操作,可以先进行分类,Data框里的三项都应填入

41980531358546debe53a879797a6e93.png
41980531358546debe53a879797a6e93.png

分类之后,将无关的图片文件删除。然后在Tools – Alignments – Job里选择 Remove-Faces,Data框里的Frames Folder不用填,另外两项需要填。完成后,alignments文件也就是.fsa文件会更新,同时会在同目录生成一个备份文件

3543406ab0078d5d12fab8bafdc3e4a9.png
3543406ab0078d5d12fab8bafdc3e4a9.png

合并多个alignments

Job选择Merge。Data框里,alignments文件放入一个文件夹,并在Alignments File选择时按Shift或Ctrl选择多个alignments文件。

将所有人脸图片放入一个文件夹,Faces Folder选择该文件夹。Frames Folder不填。合并后会生成一个新的alignments

15473baefdee05bfbf20c90d3e9ae314.png
15473baefdee05bfbf20c90d3e9ae314.png

训练模型

填入Input A/B,以及相应的alignmens文件(在Extract里生成的),然后新建一个模型目录并选择,模型将会存在该目录。显卡比较垃圾的话跑一会就会报错,在Trainer里选择Lightweight。根据预览的图片选择何时停止。我用GTX 1050 2G,训练了一个晚上,loss值看起来已经降不下去了,可能跟我的图片数量太少有关(A:100+张,B:1400+张),生成的视频也还凑合,有时清楚有时模糊。

训练可以随时停止,指向相同的文件夹可以继续接着之前的训练。

ac5ae978c840cd27e5b5982466c596c1.png
ac5ae978c840cd27e5b5982466c596c1.png

生成视频

602a3dafe017f87b6cbbfc42ed0f42a3.png
602a3dafe017f87b6cbbfc42ed0f42a3.png

注意这里的alignmens可能和之前Extract出来的不一样。

可以通过ffmpeg将视频每一帧都抽出来,然后对生成的所有图片进行换脸,然后再将帧合成为视频,再将原来的音频合并。

抽取视频的每一帧

ffmpeg -i /path/to/my/video.mp4 /path/to/output/video-frame-%d.png

将帧合并为视频

ffmpeg -r 60 -f image2 -s 1920×1080 -i video-frame-%0d.png -vcodec libx264 -crf 25 -pix_fmt yuv420p test.mp4

%04d 表示用零来填充直到长度为4,i.e 0001…0020…0030…2000 and so on. 如果没有填充,需要相应更改,如 pic%d.png or %d.png

-r 帧率(fps)

-f image2 图像合成视频默认设置

-crf 画质,数值小意味着画质高,通常设置为15-25

-s 分辨率(1920×1080)

-pix_fmt yuv420p 像素格式

test.mp4 输出在当前文件夹,输出结果为test.mp4

video-frame-%0d.png,这里的%0d是对齐长度。

如果使用这种自行抽帧的方法,需要对抽出的所有图片进行Extract,并且Extract Every N设置为1,这里生成的alignments文件可以用于Convert

或者直接在Input Dir里输入视频文件,并对视频文件进行Extract,且Extract Every N设置为1,生成的alignments文件可以用于Convert。当Input Dir里输入视频文件时,Output Dir里生成的还是图片,是已经换过脸的每一帧的图片,仍然需要用ffmpeg进行合并。

说的好像有点乱,总之就是每一帧都应该有一个有alignment,需要先有这个alignments文件才能Convert。

conda env备份

1、进入虚拟环境后,输入以下命令进行备份:

conda env export > environment.yaml

该虚拟环境的信息便被保存在了 environment.yaml 文件中

2、重装该环境

conda env create -f environment.yaml

离线备份:

直接在conda的envs目录下找到要备份的环境目录,复制一份目录保存下来。用conda env list查看环境目录

离线恢复安装

conda create –name env_name –clone env_path –offline

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/141274.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月9,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档