首頁  >  文章  >  後端開發  >  都是第一次玩DeepFakes

都是第一次玩DeepFakes

coldplay.xixi
coldplay.xixi轉載
2020-11-13 16:55:244204瀏覽

python影片教學專欄介紹DeepFakes。 都是第一次玩DeepFakes

目標

之前沒碰過DeepFakes,突然想發B站影片玩。試了試還蠻麻煩的,這裡記錄一下自己踩的坑。

本文的目標就是將The Singing Trump的影片換成我們的川建國同志。

最後效果:

影片連結:https://www.bilibili.com/video/BV12p4y1k7E8/

環境說明

本文嘗試的環境為linux伺服器的環境,因為跑得比較快吧。

Python環境:Anoconda python3.7版本

GPU:K80, 12G顯存

DeepFake版本:2.0

其他工具:ffmpeg

##DeepFake版本:2.0

其他工具:ffmpeg

#素材準備

首先需要準備一個或多個

The Singing Trump

的視頻,以及川建國同志的視頻。用作換臉素材。

影片切分

先透過ffmpeg將影片素材切分成多個圖片。

mkdir output
ffmpeg -i 你的视频.mp4 -r 2 output/video-frame-t-%d.png复制代码
這裡視頻不一定要mp4,其他格式也行,然後-r 2

表示是2幀,也就是每秒鐘採集兩張圖片,各位可以按照自己的視頻嘗試。最後是輸出到output資料夾裡面,前綴隨便定義就好了,名字也不是關鍵。

這裡最好多找幾個視頻,因為deepfake會提示要保證人臉個數大於200張才會比較好,我這裡分別準備了3個視頻,一共6個視頻。

ffmpeg -i sing_trump1.mp4 -r 2 sing_trump_output/st1-%d.png
ffmpeg -i sing_trump2.flv -r 2 sing_trump_output/st2-%d.png
ffmpeg -i sing_trump3.mp4 -r 2 sing_trump_output/st3-%d.png复制代码
ffmpeg -i trump1.webm -r 2 trump_output/t1-%d.png
ffmpeg -i trump2.mp4 -r 2 trump_output/t2-%d.png
ffmpeg -i trump3.mp4 -r 2 trump_output/t3-%d.png复制代码

弄完了還挺大,亂七八糟加​​起來3.7個G。

clone程式碼 組裝依賴

這裡沒啥可說的,從github上下程式碼。

git clone https://github.com/deepfakes/faceswap.git复制代码
然後根據自己的實際情況裝環境,我這裡是現在PC上裝cpu這個,然後在伺服器上裝nvidia。

抽出臉部

接下來將所有的臉部抽出來。

python3 faceswap.py extract -i trump_output -o trump_output_face
python3 faceswap.py extract -i sing_trump_output -o sing_trump_output_face复制代码

這裡抽完了臉就是這樣了。

篩選臉部

接下來需要

手工把我們不需要的臉都刪掉。

修改alignment

當我們呼叫extract產生臉部時,會自動產生一個校對文件,用於在原圖上保存臉部的資料。

刪除臉部之後,需要將臉部和原始圖片進行對齊。

這裡可以開啟gui工具

python3 faceswap.py gui复制代码

然後選擇Tools下的Alignments。 接下來選擇

Remove-Faces

,然後輸入對準檔案路徑,臉的路徑,以及原圖的路徑。

然後點擊綠色按鈕開始,運行即可。

然後將

sing_trump_out

也執行同樣的操作。

開始訓練

接下來就可以開始訓練了,###-m###參數為保存模型的位置。 ###
python3 ./faceswap.py train -A sing_trump_output_face -ala sing_trump_output/alignments.fsa -B trump_output_face -alb trump_output/alignments.fsa  -m model复制代码

小问题

这里如果用gpu的话,我发现tensorflow2.2开始要用cuda10.1以上,但我这边儿没法装,所以需要用tensorflow1.14或者tensorflow1.15,这就需要deepfake的1.0版本才能用。

github.com/deepfakes/f…

训练截图

我发现faceswap1.0和master分支的操作是一样的,没太大变化。

我这里的速度大概是2分钟100个step。

转换视频

准备视频帧

首先要准备我们要转换的视频,然后把视频切分,这里就不是按照之前的帧数了。

ffmpeg –i sing_trump2.flv input_frames/video-frame-%d.png 
复制代码

这里我的视频是1分41秒。

转换完了大概有3050张图片,也就是差不多30帧的,然后一共7.1G(mac就256G真的有点儿遭不住)

再次对齐一遍

接下来,需要对我们要转换的视频图片再来一遍人脸对齐,首先抽脸。

python3 faceswap.py extract -i input_frames -o input_frames_face复制代码

然后再把多余的脸删掉,像前面的步骤一样的操作用gui工具选择Remove-Faces,然后进行对齐。

对每一帧进行AI换脸

通过convert命令进行转换

python3 faceswap.py convert -i input_frames/ -o output_frames -m model/复制代码

我这里的速度大概是每秒1张图片,不过真正的脸只有600多张,如果脸比较密集的话我估计可能没有那么快,所有的图片转换完大概是5分多钟(这个gpu当时有别的程序在跑真实可能会更快一点儿)。

效果

训练20分钟后

在训练了1200step之后,大概是这个样子,效果看着还不是很好哈,不过已经有点儿意思了。

训练一个小时后

训练一天以后

把图片合成视频

最后通过ffmpeg把图片合成一个视频。

ffmpeg -i output_frames/video-frame-%d.png -vcodec libx264 -r 30  out.mp4复制代码

这里合并完了我发现是2分钟,不过影响也不大,毕竟后面还要进行剪辑,用PR等软件再编辑一下就好了。

总结

看视频可以发现当脸比较小的时候,faceswap并没有识别出来脸,所以也就没有做替换,还是有点儿遗憾。

个人感觉整个deepfake的最费时间的流程其实就是在删掉多余的脸上面。

相关免费学习推荐:python视频教程

以上是都是第一次玩DeepFakes的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:juejin.im。如有侵權,請聯絡admin@php.cn刪除