cedro-blog

MakeitTalkで、1枚の顔画像を音声から動かす

1.はじめに

 以前、1枚の顔画像を動画の様に動かす、First-Order-Motion-Model という技術をご紹介しましたが、今回は1枚の顔画像を音声から動かす、MakeitTalkという技術をご紹介します。

2.MakeitTalkとは?

 以下に、MakeitTalkのパイプラインを示します。

 音声情報と1枚の顔画像から得た顔のランドマーク情報を、唇付近を制御するブロック(Speech Content Animation)と、顔全体を制御するブロック(Speaker -Aware Animation)に入力します。

 それぞれのブロックでLSTMなどを使ってランドマークの動きを予測し、その結果を合成して音声に同期した顔のランドマークの予測を行います。

 最後に、顔のランドマークの予測を元に、Face Warp あるいは Image2Image Translation で、顔画像を生成します。

3.コード

 コードはGoogle Colabで動かす形にしてGithubに上げてありますので、それに沿って説明して行きます。自分で動かしてみたい方は、この「リンク」をクリックし表示されたノートブックの先頭にある「Colab on Web」ボタンをクリックすると動かせます。

 まず、セットアップを行います。

 次に、学習済みの重みをダウンロードします。

 処理する静止画の指定とパラメータの設定を行います。静止画は examples フォルダーの中にある jpg の中から拡張子なしのファイル名で指定します。

 パラメータは、瞬きをするか、動画の初期状態で口を開けるか、そして口の縦横の動きや頭の動きをどの程度にするかを設定します。

 それでは、音声に連動して静止画が動くmp4動画を作成します。このとき音声は、examples フォルダーの中にある ***.wav を使います。

 作成したmp4動画を再生します。

https://cedro3.com/wp-content/uploads/2021/01/05.mp4

 処理する静止画の指定のところで、default_head_name = ‘anime01’ に変更して順次実行すると

https://cedro3.com/wp-content/uploads/2021/01/anime01.mp4

 デフォルトされ過ぎていたり鼻がハッキリ描いてないとダメですが、そうでなければこんなアニメ顔も動かせます。

 処理する静止画の指定のところで、default_head_name = ‘mask01’ に変更して順次実行すると

https://cedro3.com/wp-content/uploads/2021/01/mask01.mp4

 顔のランドマークが検出できれば、こんな風にお面でも動かせます。

 では、また。

(オリジナルgithub)https://github.com/yzhou359/MakeItTalk