今回は乃木坂時々クロちゃんということで
TikTokの動画っぽいアレを作ってみることとしました。

解説動画はこちら





さて
今回はTikTok動画のアレみたいなやつを
作ってみようと思います。

アレとは 人の顔から次の人の顔に移り変わるやつの事で 一般的にはFaceMorphingと言うらしい?!です。

それを可能にするコードが
githubに有りましたので
それを参考にさせていただきます。

参考:face-morphing

このコード類を利用するには
少し沢山のインストールが必要で
特にopencvやdlibなどが必要です。

動かしたい方はgithubのRequirementsを
うまく満たすようにライブラリ群を揃えて下さい。

それではコードの方を見てみましょう。
JupyterNotebookで動かせるように
githubからファイルをダウンロードして
Notebookのディレクトリに配下に置きました。

まずはライブラリ群のインポートから
from morphing.face_landmark_detection import makeCorrespondence
from morphing.delaunay import makeDelaunay
from morphing.faceMorph import makeMorphs
import subprocess
import argparse
import shutil
import os

def doMorphing(thePredictor,theImage1,theImage2,theDuration,theFrameRate,theResult):
        [size,img1,img2,list1,list2,list3]=makeCorrespondence(thePredictor,theImage1,theImage2)
        if(size[0]==0):
                print("Sorry, but I couldn't find a face in the image "+size[1])
                return
        list4=makeDelaunay(size[1],size[0],list3)
        makeMorphs(theDuration,theFrameRate,img1,img2,list1,list2,list4,size,theResult)
これがうまく実行できていたら
動くだろうと思います。

実行部分はこれです。
# ランドマークファイルの場所
dat_path = 'shape_predictor_68_face_landmarks.datファイルのパス'
# 画像の指定
img1 = '画像のパス'
img2 = '画像のパス'
# 1秒あたりの画像枚数 dur = 5 # 動画の枚数 fr = 25 res = 'mp4ファイルの出力パス' doMorphing(dat_path,img1,img2,dur,fr,res)
2枚の画像と出力先を指定します。
1秒あたりの枚数と、全体の枚数も指定します。
多くすればよりスムーズになると思います。

出来上がりの確認は・・・
JupyterNotebook上では
%%HTML
を使うとHTMLを使用することができます。

%%HTML <video width="動画サイズ" height="
動画サイズ"> <source src="xxx.mp4" type="mp4のパス"> </video>

さて出来上がりを見てみましょう。
githubに有ったサンプル画像だとこうなります。

Videotogif (2)

こいつの仕組みとしては
画像と画像の中間画像を作っていって
それを動画化しているようです。

中間画像はこんな感じです。
bentyuukan

なかなか面白いですよね!!!


次に乃木坂46さんでやってみました。

Videotogif

いやー
ほんと素晴らしいですね!!!!!


クロちゃんも混ぜてみたくなったので
混ぜるとこうなります。
Videotogif (1)

うーーん
パンパンですね!!!!!


お口直しに
現在の乃木坂46全員分で
FaceMorphingしてますんで
見てやって下さい。

それでは。