そこそこ高性能なPCとカメラがあれば誰でもオリジナルのVtuberになれる時代が来ました!今回はAIを用いて画像を生成して、その画像をAIでアニメーションさせてみます。
AIを使えば絵が描けなくても大丈夫です!
Talking Head Anime from a Single Image
Talking Head Anime from a Single ImageはGoogleのエンジニアのPramook Khungurn氏によって開発されたディープラーニングを用いて一枚の画像からアニメーションを作成する技術です。以下のURLを御覧ください。
Githubはこちら
Talking Head Anime from a Single Image
これにAIで二次元画像を生成するWaifu Labsを組み合わせることで、AIで画像を生成してAIで画像をアニメーションさせることができます。Webカメラを用いて顔のトラッキングもでき、Vtuberのように自分の顔の動きに合わせてアニメーションさせることが可能です。
詳しい中身が知りたい方はGithubを見てみてください。
環境構築
環境構築するために機械学習向けのPythonパッケージを提供するAnacondaを使います。Anacondaを使わずにpipでも環境構築できるのですが難しくなるので今回は割愛します。
Anacondaをインストール
それではAnacondaをインストールしましょう。すでにPythonがインストールされている場合は競合することがあるみたいなのでアンインストールするのが無難です。Anacondaをインストールに関しては下記の記事を参考にしてください。
Anacondaがインストールできたらconda cliを起動してローカルにTalking Head Anime from a Single Imageをクローンしましょう。
git clone https://github.com/pkhungurn/talking-head-anime-demo.git
cd talking-head-anime-demo
Anacondaのパッケージ管理システムを使って環境構築しましょう。enviroment.ymlを使って必要なパッケージをインストールします。少し時間がかかるかもしれません。
conda env create -f environment.yml
これで必要なパッケージがダウンロードできました!仮想環境に入ります。
conda activate talking-head-anime
このリンクからmodels.zipをダウンロードして解凍します。解凍した中にある
combiner.pt、face_morpher.pt、two_algo_face_rotator.ptこの3つのファイルをdataディレクトリにコピーします。これらはCreative Commons Attribution 4.0 International Licenseでリリースされています。
delibのここの右下のDownloadからshape_predictor_68_face_landmarks.dat.bz2をダウンロードして解凍します。中身のshape_predictor_68_face_landmarks.datをdataディレクトリにコピーします。
最終的にdataディレクトリの中はこのような構成になります。
動かしてみる
では実際に動かしてみましょう!2種類の実行方法があります。手動で動かすか、Webカメラで顔のトラッキングをして動かすかです。
手動で動かす
conda cliで以下のコマンド実行しましょう。
python app/manual_poser.py
Load Image ...からサンプルの画像をロードできます。スライダーを動かして画像が動いたら成功です。ではWaifu Labsを使ってオリジナルの画像を動かしてみましょう。waifu labsで生成した画像をダウンロードして画像処理ソフトで編集します。使用する画像は以下である必要があります。
- pngであること
- 画像解像度が256 x 256であること
- キャラクターの頭が中心の128 x 128のボックスの中に収まること
- 4チャンネルあること(RGBA)
- 背景が透過であること
つまり画像の解像度を256 x 256にしてサンプルのキャラと位置を合わせて背景を透明にすれば大丈夫です。pngにするのを忘れずに。ではWaifu Labsで作った画像を動かしてみます。
結構きれいに動いてます。すごい!
顔をトラッキングして動かす
Webカメラで顔をトラッキングして動かすには以下のコマンドを実行してください。パソコンにWebカメラが接続されている必要があります。
python app/puppeteer.py
これはPCによっては結構重いです。。私のPCではCPUで計算していると思うんですがカクつきながらも動きました。
顎が少しおかしいですが、顔のまばたきや口の開閉に合わせてキャラクターが動いているのがわかります。
番外編 Webカメラの代わりにアンドロイドを使う
私の環境ではWebカメラがなかったのでアンドロイドを代用することにしました。そのときに使ったアプリがDroidCamです。以下の記事を参考にしました。
アンドロイドをWebカメラとして認証させるためにはUSBを接続しないとうまくいかなかったので開発者モードでUSBを接続してます。そしてtalking-head-anime-demo\app\puppeteer.pyコードを一部書き換える必要があります。OpenCVを使用しているcv2.VideoCapture(0)
の行です。
# video_capture = cv2.VideoCapture(0)
video_capture = cv2.VideoCapture('http://192.168.2.175:4747/video')
cv2.VideoCapture()にIPアドレスとポート番号に置き換えます。アンドロイドとパソコンがUSBで接続されている状態でpython app/puppeteer.py
でアンドロイドのカメラが使えるようになります。
おわり
今回はディープラーニングを使って画像を動かす方法を解説しました。Googleのエンジニアの方なのにライブラリはGoogleが開発しているTensorFlowではなく、FacebookのPytorchを使われているんですね。ディープラーニングのライブラリはTensorFlowとPytorchの2強みたいです。
AIの進化は凄まじいですね。近い将来もっと精度が上がって高性能パソコンも安価になれば手軽に色々なことができるようになるかもしれません。 楽しみです。