安裝過程
安裝指南網址:https://github.com/deepfakes/faceswap/blob/master/INSTALL.md
需要魔法上網,有些包國內下載太慢了
conda環境
在Anaconda Prompt里,查看所有環境,兩個命令都行
conda env list
conda info --envs
查看安裝的包
conda list
更換環境,前面的conda不寫好像也行
conda activate faceswap
提示no module named cv2
進入相應的環境,安裝缺少的包
conda install opencv
提取人臉
Input Dir可以是視頻或者圖片文件夾
Output Dir是輸出的截取好的人臉圖片文件夾
Alignments是對齊文件,用於標注人臉的位置信息,不填的話會默認生成在Input Dir。如果要自定義,需要新建一個.fsa后綴的空文件
下面的Extract Every N是每N張圖片截取一張人臉,對視頻就是每N幀截取一張人臉。官方建議視頻是每半秒或一秒截取一張。比如,60幀的視頻,半秒就填30
提取兩個人臉的圖片。
刪除無關圖片
提取的人臉圖片有的可能不是要進行操作的那個人,比如視頻里出現多個人,或者多個人的合照,其他人也會被提取。應該刪除無關信息
為了便於操作,可以先進行分類,Data框里的三項都應填入
分類之后,將無關的圖片文件刪除。然后在Tools - Alignments - Job里選擇 Remove-Faces,Data框里的Frames Folder不用填,另外兩項需要填。完成后,alignments文件也就是.fsa文件會更新,同時會在同目錄生成一個備份文件
合並多個alignments
Job選擇Merge。Data框里,alignments文件放入一個文件夾,並在Alignments File選擇時按Shift或Ctrl選擇多個alignments文件。
將所有人臉圖片放入一個文件夾,Faces Folder選擇該文件夾。Frames Folder不填。合並后會生成一個新的alignments
訓練模型
填入Input A/B,以及相應的alignmens文件(在Extract里生成的),然后新建一個模型目錄並選擇,模型將會存在該目錄。顯卡比較垃圾的話跑一會就會報錯,在Trainer里選擇Lightweight。根據預覽的圖片選擇何時停止。我用GTX 1050 2G,訓練了一個晚上,loss值看起來已經降不下去了,可能跟我的圖片數量太少有關(A:100+張,B:1400+張),生成的視頻也還湊合,有時清楚有時模糊。
訓練可以隨時停止,指向相同的文件夾可以繼續接着之前的訓練。
注意A是原始的臉,B是要換的臉,不要訓練反了。
生成視頻
注意這里的alignmens可能和之前Extract出來的不一樣。
可以通過ffmpeg將視頻每一幀都抽出來,然后對生成的所有圖片進行換臉,然后再將幀合成為視頻,再將原來的音頻合並。
抽取視頻的每一幀
ffmpeg -i /path/to/my/video.mp4 /path/to/output/video-frame-%d.png
將幀合並為視頻
ffmpeg -r 60 -f image2 -s 1920x1080 -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 分辨率(1920x1080)
-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。
【2021-06-28】實際上是這樣,原始的圖片被Extract后會生成只有頭像的圖片以及alignments文件,在Convert時要輸入原始圖片而不是Extract的頭像圖片。
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
參考鏈接
官方USAGE(簡略):https://github.com/deepfakes/faceswap/blob/master/USAGE.md
Extract詳細解釋:https://forum.faceswap.dev/viewtopic.php?f=5&t=27
其他教程:https://forum.faceswap.dev/app.php/tag/Guide
ffmpeg文檔:https://ffmpeg.org/ffmpeg.html