FakeApp2.2.0

FakeApp2.2.0をいれてみた。ほとんどは

ならびにYouTube

FakeApp 2.2.0 Tutorial – Installation and Usage (How to put Nicholas Cage’s Face on Various people) – YouTube

を参考にしたが、加えて自分がやったことの注意点を記しておく

1.CUDAのバージョンを必ず9.0にそろえる。筆者の場合9.1も混在していたのでこれを削除 念のためNVIDIAから再度9.0を取ってきて再インストール

2. FakeAppのインストールはsetupをクリックするだけではない。同梱のcore内のファイル群を %user\AppData\Local\FakeApp\app-2.2.0\resources\apiの中にコピーする(デフォルトではffmpegしか入っていなかった)。またこれをコピーした後にさらにsetupを起動するとどうもこれが消えてしまうようだ。

3.1. 2.ができると、FakeAppの起動画面から注意書きが消えて動き出すようになる。TF1.5が必要と書いてあったが、これは明示的にやらなくてもよかった(すでにはいっていたのかもしれない)。最初Anacondaから入れようとしていたが結局全部削除した。

4. まずデータセットを入手する。Get DatasetでA側に顔を入れ替える側(体を使う側)の動画ファイルを入れる。FPSはファイルの詳細プロパティから読み取る。「dateset-XX」フォルダの中に動画の画像がpngで出力され、さらにその中の「extracted-XX」フォルダの中に顔画像が抽出されたjpgファイルが書きだされる。

注意:実は元は動画ではなく、Photoでも利用できる。しかしその際にはファイル形式がjpgではなくpngであることが必要。ここに注意。でないとextracted中になにも抽出されずプログラムがエラー吐いて終わる。jpgからpngへの変換には例えばXnConvertなどを利用するとよい。

5.次にB側に入れ替えたい顔が入っている動画ファイルを入れる。やりかたは4.と同様

6.動画ははじめは短めの方がよい。せいぜい2Mぐらいから10Mぐらいのを準備する。筆者はmp4の動画を準備した。顔を置き換える前の動画と置き換える対象の動画はそれぞれ構図の似た顔がそろっている方が望ましい。でないと学習さえしてくれない時があった。

7.UIはよくなく、ファイル名はパスも含め全部手打ちとなる。このためファイルはC:ドライブの直下とかに置いた方がよい。もちろん日本語名は避ける。

8.Aフォルダ->画像抽出、Bフォルダ->画像抽出が終わったらあとは学習(Training).Data A,Bには先ほど抽出したextractedフォルダを指定する。数時間から場合によっては1週間ぐらいかかるらしい。指標が0.02以下になれば良いようだ。コンテンツによっては、もうこれ以上改善しないとなると勝手に止まるようだ。ここでMODELというのは学習結果を入れるフォルダなので、自分で空フォルダを指定する。

9.最後にCREATEタブで入れ替え動画を作成する。Modelには先ほど指定したフォルダを、Videoで体の方の元動画とフレームレートを入れる(デフォルトが逆になっているので注意)。ここでWorkdir-xxxの下にmergedというフォルダがあり、ここにコマのFakeApp画像ができている。これをつなぐことでAフォルダ配下にswap-xxx.mp4が出来上がる。しかしながら、しばしば出力動画作成に失敗することがある。実は2,3度繰り返すとできることがあった。

10. もし9.でmergedフォルダにコマ画像ができていて、かつmp4画像作成に失敗するようであれば、ここまできたらffmpegコマンドでやってしまう手がある。https://ffmpeg.zeranoe.com/ からWindows binaryを持ってきて適当にインストールする(例えばc:\\Program Filesの下など). それでcygwinなどから、そこまで行って、

ffmpeg -i “c:\FakeApp\out%05d.jpg” -vcodec mjpeg -sameq out.avi
というコマンドを実行。

最初の-i “c:\FakeApp\out%05d.jpg”は入力画像ファイルを指定。%05dという部分は5桁で数字は調整されているという意味。1から開始させる必要がある。FlexRenamerなどを使ってうまく番号を調節する。

-vcodec mjpegは、Motion JPEGという映像コーデックを使うという意味。素材がJPEG画像の場合、mjpegを使うと変換速度が速くなる。-sameq は素材と同じ画質という意味。これでエラーがでることがあるので、その際はこのオプションを省く。
そして最後のout.aviが保存先(この項はhttp://opensourceaki.blogspot.com/2007/10/ffmpeg_19.htmlを参照した)

10.できた動画はやはり顔のみぼかしっぽく見えてしまう。例えばAbobe Premiereなどを用いて動画にBlur(Gauss)の効果を与えて全体をぼかした方が良いかもしれない。このとき併せてもとの音声も加えて編集すると良いだろう。

11.補足
PNGの画像からTrainを終わって最後にmergeしようとして何度か失敗した。これをGPU使用からCPU使用に変えたところうまくいった。理由は不明だがメモしておく。


サイトネットワーク管理

新しくサブディレクトリの参加サイトを作ったつもりが、管理画面の参加サイトに掲示されなかった。よく調べると管理者のアドレスが異なっていると表示されないのだった。これでよさそうだ


Fuji FinePix w3写真に3D画像を重ねる

昔Fuji FinePixという3D画像や動画が取れるカメラがあった。これを使って3D画像をOculus riftで読もうとした。FinePixの画像はMPOフォーマットになっている。サイズは左右それぞれで3584 x 2016だ。もしこちらで何か3D画像を作ろうとしたら、このサイズか、あるいはそれに比例するサイズで作成する必要がある。半分でちょうど1792 x 1008になる。これで作ったらよさそうだ。あるいは1280 x 720で作成すると比率としては丁度だ


MPOファイルをOculus riftで閲覧

MPOファイルをOculus riftで見るのは簡単ではない。そこでいっそのことmp4ファイルに変換してしまえばよい、という考えで以下の変更をした。

  • ステレオフォトメーカを使ってMPOを読みこむ
  • ステレオ画像として保存、このときファイルの種類をJPG, 正確なサイズを選択して最大のJPSを作成する。+常にSBS形式で保存、をチェックする。
  • これでSBSなJPGファイルができたので、これを静止画からmp4に変換する。Adobe Premierで動画として編集すれば音もキャプションも入れられる。
  • 先に書いたGizmoVRで読み込めば3D動画として閲覧ができる。


Oculus riftで従前のside by sideコンテンツを視聴する

Oculus riftで従前のside by side コンテンツは両方が並列に並べられて見えたりしてうまく3Dとして見えない。この視聴は、Oculus riftのライブラリにあるGizmoVRを利用するとよい。mp4で作成されたファイルであれば、自動的にファイルを変換してくれるようで、これで問題なく同コンテンツは3Dで見ることができる。その際、各コンテンツごとに設定をして、3Dモード、また画面モード、ループの有無などを設定すること。これで楽しめる。また自分でStereoMovieMakerで作成したAVI 3DファイルもHandbrakeなどでmp4化するとOculusで視聴を楽しむことができる。


HDRIもどきの画像を作ってOctaneのレンダリングに使う

そこまでまじめなやり方ではないと思うが、なんちゃってHDRI的な画像を以下のようにして作成した。HDRshop v.1が必要
(1)スマートホンのカメラにぱちっとつけて魚眼レンズ風の写真を撮れるおもちゃを入手。自分はTaotronicsのTT-SH014を1000円ほどで購入した。
こんな写真が撮れる。残念ながらまん丸にはならず両端が切れる。
(2)Photoshopで読み取って、方向を直し、周辺の黒い部分を消去する。
このとき、左右または上下に空白ができるが、この部分が入っていない画像を作る。ぎりぎり絵のある部分のみを選択してコピー、->クリップボードからの画像で新規生成するとよい
このような画像ができる。
(3)HDRshopを起動。(2)の画像を読み込む。
Camera response curveを入れろとでる。とりあえずデフォルトでOKとする
(4)Image->Panorama->Panoramic Transformation を選択
Source ImageはMirror Ballとし、
Destination ImageはNew image, FormatをLatitude/Longtitudeとする。
他はデフォルト
こうするとこのような展開された絵が出来るので、適当なフォーマットでセーブする。
(5)これをOctaneのレンダリング時に用いる。。あらかじめ鏡になったボールを配置すると、このような画面が映ることになり、ちゃんと背景の光がターゲットに届いていることがわかる。


Samenを描いてみる

Photoshopを用いて描くやり方はいろいろと出ているが、これを参考にしてみた。コツは

  • 3レイヤぐらいで描く。一番外は#efefef 不透明30%
  • このうち垂れていそうな部分はブラシで不透明15%で描き加える(別レイヤでいいかと思う)
  • 真ん中の第3レイヤは別レイヤを作り、#f7f8f8.不透明20% 4回ほど塗る
  • 新規にレイヤを作成し、焼きこみカラー属性にする。これで一番外側の周辺をなぞる
  • 主レイヤをぼかす

  • Danae

    Danaeのテクスチャは美しいが、既存の作品に適用しようとすると手足が変形することがある。調べてみるとInverse Kinematicsがonであったときに起こるようだ。これを切ってから適用してOKとなった。