FakeApp | 輕鬆把影片換主角(以寶博士為例)

聲明

  1. 本教學照片經過寶博士同意使用
  2. 以下教學請大家用研究的角度來觀看

—————————————————————————————————

一、軟硬體需求

  1. 你必須有一張支援CUDA的顯示卡
    支援清單 : https://developer.nvidia.com/cuda-gpus
  2. 安裝CUDA 8.0 (一定要8.0)
    https://developer.nvidia.com/cuda-80-ga2-download-archive
  3. FakeApp (最好載1.1)
    https://www.reddit.com/r/fakeapp/comments/7q5o7o/latest_version_download/?st=jcdmagwk&sh=9d4af47f
  4. FFmepg (拆跟合併序列圖用)
    https://ffmpeg.zeranoe.com/builds/

二、使用前準備

1. 照下面的清單開新資料夾
┌fakes(父)
│─data_A
│─data_B
│─model

2. 開新資料夾取名叫"Sequence"並將 FFmpeg/bin/ffmpeg.exe 複製過去

3. 準備你影片主角的照片並放入data_B資料夾
a. 格式必須為png
b. 大小不能超過1200 * 700 (可用格式工廠之類的快速轉檔)
c. 最好有不同角度不同表情
d. 越多越好,個人覺得至少100張,合照最好把其他人的臉裁掉(我沒裁)

4. 準備你想替換主角的影片
a. 與你的主角越像越好
b. 10~15秒即可,越長算越久
c. 解析度不超過720p
d. 確認影片的FPS (用AE看之類的,右鍵內容寫的不準)

5. 將影片拆成序列圖 (FFmpeg,用別的軟體拆也可以)
a. 到Sequence資料夾按住Shift + 滑鼠右鍵, 點選"在此處開啟命令視窗"
b. 複製指令並修改參數 ffmpeg -i [檔名].mp4 -vf fps=[FPS] "out%d.png"
c. 右鍵貼上至CMD並按Enter,完成後,資料夾就會出現序列圖

d. 將這些序列圖複製到data_A資料夾
e. 開"NoFace"新資料夾,將沒有清楚出現臉的圖片移動過去

6. 最後你的data_A要有主角的照片,格式為png並不超過1200 * 700
data_B要有被替換主角影片的序列圖,每張都有清楚的臉
NoFace有影片不清楚臉的圖片

三、開始使用FakeApp

1. 開啟"fakeapp.bat",你會看到Extract / Train / Covert三個選項

2. "Extract",從你的圖片中抓取所有的臉
a. "Paths"的"Data",貼上Data_A的路徑將"\"換成"/",然後按下"Start"
b. 完成後你會看到Data_A裡多了"alignments.json"以及" aligned"資料夾,
裡面都是被抓取出來的臉

c. 同a、b步驟,接下來對data_B也做一次,到data_B的aligned,把其他人的臉刪除

3. "Train",讓軟體開始比較兩張臉
a. 貼上對應"Paths"下三個資料夾的路徑,記得"\"換成"/",並按下"Start"
b. Training 至少要6小時以上,建議放著跑一個晚上,直到合成的臉清楚
c. 滿意之後可按下q停止,"model" 下就會多出 "decoder_A.h5"、"decoder_B.h5"、"encoder.h5"這三個檔案

4. " Covert",替換data_A的臉
a. "Paths"的"Data"貼上data_A路徑,按"Start"
b. 完成後,data_A下會出現"merged"資料夾,裡面即是完成替換的序列圖

四、將完成替換的序列圖合併成影片

1. 整理完成的序列圖
a. 把Sequence資料夾原來的序列圖刪除,或是你要留著
b. 完成的序列圖複製到Sequence資料夾
c. 把前面移走的不清楚臉圖片移動回來
d. 檢查一下數字正不正常,一定要連號

2. 開始合併序列圖
a. 按住Shift + 滑鼠右鍵, 點選”在此處開啟命令視窗”
b. 修改指令參數貼上按Enter,ffmpeg -f image2 -i out%d.png -vcodec libx264 -crf [FPS] -pix_fmt yuv420p [檔名].mp4
c. 如果結果影片怪怪的,用AE合併會比較好
d. 大功告成

我最後的成果XD
https://youtu.be/VhHKYcfyen4

如果覺得這篇文章不錯,請幫我多按幾次鼓掌哦~

Source: Deep Learning on Medium