🥕 Google Colab을 활용해서 가상 인플루언서 얼굴을 활용한 딥페이크 영상 만들어 보겠습니다!
2019년 11월에 NeuroIPS에서 발표된 First Order Motion Model for Image Animation 페이퍼에서 발표된 기술&코드를 포함
!pip install scikit-video
!git clone https://github.com/drminix/first-order-model
%cd /content/first-order-model
https://drive.google.com/drive/folders/1TIjufuJdPgkzvCQ3G1mICQZVCxWbCOFX?usp=sharing
from google.colab import drive
drive.mount('/content/gdrive')
target_folder = "/content/gdrive/My Drive/deepfake"
def display(source, driving, generated=None):
fig = plt.figure(figsize=(8 + 4 * (generated is not None), 6))
ims = []
for i in range(len(driving)):
cols = [source]
cols.append(driving[i])
if generated is not None:
cols.append(generated[i])
im = plt.imshow(np.concatenate(cols, axis=1), animated=True)
plt.axis('off')
ims.append([im])
ani = animation.ArtistAnimation(fig, ims, interval=50, repeat_delay=1000)
plt.close()
return ani
🌱 초기 세팅
import imageio
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from skimage.transform import resize
from IPython.display import HTML
import warnings
import os
import skvideo.io
warnings.filterwarnings("ignore")
from demo import make_animation
from skimage import img_as_ubyte
#생성자 선언
from demo import load_checkpoints
import os
generator, kp_detector = load_checkpoints(config_path='config/vox-256.yaml',
checkpoint_path=os.path.join(target_folder,'vox-cpk.pth.tar'))
🌱 사진/영상 소스설정 : 경로는 자신의 구글드라이브 경로로 설정
#얼굴 소스
source_image = imageio.imread('/content/gdrive/MyDrive/Colab Notebooks/deepfake_src/000.PNG')
source_image = resize(source_image, (256, 256))[..., :3]
#입력영상
# driving_video = skvideo.io.vread('/content/gdrive/MyDrive/Colab Notebooks/deepfake_src/data_dst_3.mp4')
driving_video = skvideo.io.vread('/content/gdrive/My Drive/deepfake/04.mp4')
# driving_video = skvideo.io.vread('/content/gdrive/MyDrive/Colab Notebooks/deepfake_src/video1.mp4')
driving_video = [resize(frame, (256, 256))[..., :3] for frame in driving_video]
predictions = make_animation(source_image, driving_video, generator, kp_detector, relative=True)
#save resulting video
imageio.mimsave('../generated.mp4', [img_as_ubyte(frame) for frame in predictions])
#video can be downloaded from /content folder
HTML(display(source_image, driving_video, predictions).to_html5_video())
# HTML(display( predictions).to_html5_video())
아래 사진 클릭하면 영상 나옵니다!