cedro-blog

BigGAN TF Hub を使って色々な動画を作ってみる

今回は、BigGANデモを使って、OpenCVで色々と動画を作ってみます。

こんにちは cedro です。

先回のブログ、BigGANを使ってモーフィング動画を自動で作ってみるOpenCVを使うと実に簡単に動画が作れることが分かりました。

あの静止画を一端作ってからGIF動画を作るプロセスは、一体なんだったのかと思えるほど簡単で、こうなって来ると、色々動画が作ってみたくなるわけです。

ということで、今回は、BigGANデモを使って、OpenCVで色々と動画を作ってみます。

 

コードを動かす準備をします

BigGAN TF Hub Demo   に行き、Google account  でログインします。

 

先回同様、[ 1 ] から [ 5 ] までのボタンを順にクリックして、コードを実行して下さい。

 

そして、ページ上部にある、赤丸+コードをクリックします。

 

すると、コードを入力するセルが表示されます。ここに、後述のコードコピペします。後は、ボタンを押せば、コードが実行されます。

 

 

モーフィング動画を多チャンネルで作る!

先回、ランダムに選んだ画像から画像への連続モーフィング動画を作ってみましたが、もっと迫力を出すために多チャンネルにしたい。今回は、2行×3列=6chで、3分間の動画を作ってみます。

例によってコードの説明は後にして、まず動かしてみましょう。

 

このコードセルにコピペして、ボタンを押せばコードが実行され、ボタンがクルクル回り始めます。

動画作成の進捗状況をチェックするために、0から数字が順次カウントアップ表示されます。約20分くらいで、ボタンクルクルが止まり、動画の完成です。

 

ボタンクルクルが止まったら、左側の目次があるところで、ファイルのタブを選択し、赤丸の更新ボタンを押します。

 

すると、BigGAN_video.mp4 というファイルが現れますので、右クリックダウンロードを選択すればダウンロードを開始します。動画の内容が気に入らなければ、再度ボタンを押せば、別の動画が作成されます。

 

これは、作成した動画(108MB)をそのままYoutube にアップロードした例です。フルスクリーンで表示させれば、結構迫力があり見ごたえがあります。

 

コードの説明をします

ポイント部分のみ説明します。

3-14行目で画像間補完時の6ch分カテゴリーAの番号ノイズシードAの番号ランダムに設定しています。これは、画像間補完初回のみ使用します。

17行目から、関数 mov(c,n) を定義しています。引数cカテゴリーAの番号引数nノイズシードAの番号です。戻り値は、画像間補完結果カテゴリーBの番号ノイズシードBの番号の3つです。

 

3-10行目各チャンネル画像間保管結果を取得します。引数については、初回カテゴリーAの番号ノイズシードAの番号は先ほどランダムに設定したものを使い、2回目以降カテゴリーAの番号前回のカテゴリーBの番号を使いノイズシードAの番号前回のノイズシードBの番号を使います。こうすることで、各chとも常に連続した画像間補完が出来ます。

13-20行目6ch画像間補完結果を連結してビデオに書き込んでいます。cv2.vconcat ( [ image1, image2 ] )縦方向の連結cv2.hconcat ( [ image1, image2 ] )横方向の連結が出来ます(image1, image2 はnumpy 配列)。

 

 

1000カテゴリーの画像を効率良く見れる動画を作る!

短時間1000カテゴリーの画像を効率良く見れる動画を作ってみます。先ほどと同じく 2行×3列=6chで、1chナンバー表示に使い、残り5ch画像にあて、13分ちょっと1000カテゴリー全部見れるようにしてみます。

これも、コードの説明は後にして、まず動かしてみましょう。

このコードセルにコピペして、ボタンを押せばコードが実行され、ボタンがクルクル回り始めます。

動画作成の進捗状況をチェックするために、0から数字が順次カウントアップ表示されます。約76分くらいでボタンクルクルが止まり、動画の完成です。

後は、先ほどと同じように、できた動画をダウンロードします。

 

これは、作成した動画(295MB)をそのままYoutube にアップロードした例です。左上にカテゴリー番号が表示されています。また、各カテゴリーの動画は、ランダムに選んだ2つのノイズシードを使って画像間補完しているので、微妙に連続的に変化して良い感じです。

 

コードの説明をします

ポイントのみ説明します。

コード冒頭にある、カテゴリー番号を表示する、ナンバー画像を作成する部分です。1000枚を5枚づつ見るので、1000÷5=200枚の画像が必要です。一々手作業で作っていては大変なので、自動作成して pic フォルダーに格納します。

3-5行目pic フォルダーを作成し、8-10行目で下地となる黒画像を作成します。13-15行目フォントスタイルサイズの指定。18行目から黒画像白色文字で書き込みます。

28-30行目で文字を書き込む draw.text ()引数は、draw.text ( (書き込む先頭のx,y座標), 書き込む文字列, fill = (文字色のR, G, B値指定), font = フォントファイルの指定)です。

このコードを実行すると、pic フォルダーの中に 200枚のナンバー画像が格納されます。

補足<フォントファイルが何処にあるか調べる方法>

セルに、このコードを貼り付けて実行すれば、Google Colabインストール済みのフォントファイル一覧が表示されます。

 

関数定義の部分です。3-15行目で、引数カテゴリーAの番号で、画像間補完結果を返す設定にしています。先程と比べればシンプルです。内部では、ノイズシードAの番号ノイズシードBの番号ランダムに選んで画像間補完する設定にしています。

18-27行目で、ナンバー画像5枚の画像間補完結果を読み込みます。この後は、先程同様、これらを連結してビデオに書きむだけです。

 

いやー、それにしても、画像の連結とか文字入れが自動で出来ると、簡単に動画の表現力が上がって楽しいですねー。

では、また。