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

沢尻エリカ

どうやら
大河ドラマの代役がキマったようですね!!!

キマった言うても
代役の方ですよーーー

代役は
川口春奈さん

と言うことで
沢尻エリカさんと川口春奈さんの写真を用いて
濃姫役を川口春奈さんがやった場合の
イメージがどうなるかを検証してみましょう!!


解説動画はこちら





まず画像の加工などは
opencvを用いて行なっています。

opencvを用いて
画像を油絵ぽくすることが出来ます。

ソースはこれ

import cv2
import numpy as np

img1 = cv2.imread('ファイルパス')

oil_filter = np.array([[-1,-1,-1,-1,-1,-1,-1],[-1, 0, 0, 0, 0, 0,-1],[-1, 0, 0, 0, 0, 0,-1],[-1, 0, 0,26, 0, 0,-1],
                       [-1, 0, 0, 0, 0, 0,-1],[-1, 0, 0, 0, 0, 0,-1],[-1,-1,-1,-1,-1,-1,-1]], np.float32) / 2.0

oilpaint = cv2.filter2D(cv2.medianBlur(img, 39), -13, oil_filter)

plt.figure(figsize=(16,10))
plt.imshow(cv2.cvtColor(oilpaint, cv2.COLOR_BGR2RGB))
plt.tick_params(labelbottom=False,labelleft=False,labelright=False,labeltop=False)
plt.tick_params(bottom=False,left=False,right=False,top=False)
plt.show()

もし画像をお持ちでしたら
試しにやってみてください。

写真を油絵っぽくするには
まずブラーをかけています。

ブラーは「ぼかし」ですね。

次にフィルターをかけています。
フィルターは行列の数値の計算をしている感じです。
numpyを用いていますので
数値を変えることで色々な加工が出来ます。

あとは
顔を入れ替えるのは
前回の動画でもやっている
フェイススワッピングアプリで
行なっています。

出来上がりの結果は・・・
download

こわっっ!!!!!

どうやら
春菜違いで
合成に使う写真を間違っちゃったようですねーーー

近藤春菜さんを
合成してしまいました!!

とまあ
かなり無理やりですが
合成できてしまうのが
プログラムの悪い所

右京さんもびっくりです。

川口春奈さんを
濃姫に合成した結果は
動画の方をご覧くださいませ。


それでは

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

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

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

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

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

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

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

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

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

それでは


このページのトップヘ