乙Py先生のプログラミング教室
初学者のためのプログラミング学習サイト

ディープフェイク

美人は何しても美人だろうということを
検証してみたいと思いました。

解説動画はこちら



対象者のお互いの顔を入れ替えてみました。

opencvを用いると
顔のパーツごとに判定して切り分け
お互いの顔のパーツを入れ替えることができます。

入れ替え可能なパーツは



です。

このうち
鼻や口はあまり顔の印象に
大きな影響を及ぼさないようです。

一番顔の印象を決定づけるのは



そしてやはり
顔の輪郭が大事だな
ということが分かると思います。

詳しくは
動画をご覧くださいませwww


それでは。


新年あけましておめでとうございます。

今年が良い年になりますように
と言うことで

昨年末に大きなニュースがありました。
あのお方と似ている人の顔を入れ替えて
遊んでみました。


解説動画はこちら



まあ詳しくは動画の方をご覧くださいませ。

出来上がったものの中から
いくつかを置いておきますねwww
gonebean1

gonebean2

カルロス・ビーンさんと
Mr ゴーンさんですね。

ってか
Mr ゴーンだと
変わってねーーーー


最後にこちらは誰と
入れ替えたでしょうか?!?!
goneyoshi


と言うことで
今年も色々
プログラミングを用いて
面白おかしい講座をやっていきたいと思います。

今年度もよろしくお願いいたします。
それでは
 

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

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

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

これなら
来年の大河ドラマも放送できるよー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上でみることができます。

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

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

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

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

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

それでは


このページのトップヘ