とある女優さんが
やらかしましたが

これからの時代は
代役に顔を差し替えて放送できる時代が
やって来るんではないかと思います。

沢尻エリカさんを
山本舞香さんに変えてみました。

これなら
来年の大河ドラマも放送できるよーwww

解説動画はこちら


はい
と言うことで

やり方を簡単に説明します。

まずは動画を静止画に切り出します。

opencvを使えば
動画から静止画に
変換できます。

切り出し方は
次のようなコードで行うことができます。

import os
import cv2

def get_frame_img(video_path, dir_path, basename, ext='jpg'):
    cap = cv2.VideoCapture(video_path)
    if not cap.isOpened():
        return

    os.makedirs(dir_path, exist_ok=True)
    base_path = os.path.join(dir_path, basename)
    digit = len(str(int(cap.get(cv2.CAP_PROP_FRAME_COUNT))))

    n = 0
    while True:
        ret, frame = cap.read()
        if ret:
            cv2.imwrite('{}_{}.{}'.format(base_path, str(n).zfill(digit), ext), frame)
            n += 1
        else:
            return

get_frame_img('IMG/sawaziri.mp4', 'IMG/sawaziri', 'sawaziri')

これでmp4ファイルを
jpgファイルに切り出します。

次にこのファイルたちの顔を入れ替えます。
入れ替える所は自作で作りましょうwww

入れ替えたらそれを動画に連結します。


下記のようなコードで
行うことができます。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

fig =plt.figure(figsize=(16,9))
ims = []
for a in range(9,18):
    img = face_swapping2('IMG/yamamotomaika3.jpg','IMG/sawaziri/sawaziri_{:02}.jpg'.format(a))
    line = plt.imshow(img)
    ims.append([line])

ani = animation.ArtistAnimation(fig, ims)
b = ani.save('anim.mp4', writer="ffmpeg")

さて出来上がったmp4を表示するのは
from IPython.display import HTML
HTML(ani.to_html5_video())

このようなコードになります。
これでjupyter notebook上でみることができます。

素材をきちんと撮れば
違和感のない形で
スワッピングできるのではないかと
思いますね。

今後は
ドラマなどで撮り終えてしまったものも
こういった技術が発達すれば
代役にすぐに差し替えて
放映することができるように
なるんじゃないかと思いますね。

自分のプログラムは
まだまだ発展途上ですが

普通に差し替えできる
未来が待っていることでしょう。

皆さんも
自作して
ぜひ試してみてください。

それでは