cedro-blog

White box Cartoonization で、実写動画をアニメ動画に変換する

1.はじめに

 今回は、実写をアニメ画に変換できる White box Cartoonization を使って、実写動画をアニメ動画に変換してみたいと思います。

2.White box Cartoonizationとは?

 White box Cartoonizations は、GANのフレームワークを使って実写をアニメ画像に変換するGeneratorを作る技術です。以下に、アーキテクチャーを示します。

 Generator が静止画(Input)からアニメ画(Output)を生成した後に、Structure表現に関する損失Texture表現に関する損失Surface表現に関する損失を抽出します。生成した画像とこれら3つの損失を分類器へ入力し、損失の合計を小さくするように学習を行います。3つの表現について、詳しく見てみましょう。

 1つ目の Surface 表現は、Guided filter を使ってエッジ情報を残しつつ平滑化処理を行い抽出します。これによって、アニメののっぺりとした平滑面を表現しています。

 2つ目の Structure 表現は、superpixel アルゴリズムを使って距離・色が近い画素をひとまとめにし、Selective Search を使って領域ごとの類似性に基づきグルーピングしています。

 3つ目の Texture 表現は、Random color shift アルゴリズムを使ってRGB画像から変換したグレースケール画像に対してランダムな割合でRGB値を加えています。これによって、色や輝度の情報をあえて落としています。

 それでは、具体的にやってみましょう。

3.コード

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

 まず、セットアップを行います。まず、cuda10.0とライブラリをインストールします。

 ライブラリーのインストールが完了したら、必ず「ランタイム/ランタイムの再起動」をクリックして下さい(そうしないとnumpyのバージョンが切り替わらないため)。その後、次を実行します。

 それでは、サンプル動画を確認してみましょう。

https://cedro3.com/wp-content/uploads/2021/02/sakura-1.mp4

 満開の桜の中で和服の女性が歩いてゆく動画です。

 最初に、cv2を使って元動画を静止画にバラし test_imagesフォルダーに保存します。既に test_images フォルダーがある場合は、削除してから実行します。

 ご自分の動画をアニメ画に変換したい場合は、# ビデオの指定のところを変更して下さい。

 次に、バラした静止画をアニメ画に変換し、cartoonized_images フォルダーに保存します。既に cartoonized_images フォルダーがある場合は、削除してから実行します。

 最後に、ffmpeg を使ってcartoonized_images フォルダーに保存されているアニメ画からmp4動画(output.mp4)を作成します。既に output.mp4 ファイルがある場合は、削除してから実行します。

https://cedro3.com/wp-content/uploads/2021/02/sakura_result.mp4

 アニメ動画の完成です!

 では、また。

顔専用の軽量版 : https://github.com/cedro3/others2/blob/main/FacialCartoonization.ipynb

オリジナルgithub : https://github.com/SystemErrorWang/White-box-Cartoonization

(Twitterへの投稿)