Fuji Film 3D camera & Poser

名残惜しいFuji Film finePix read 3D(以降 F3Dといいます)、これを使ってMPOファイルから左右別々の画像を抽出する。FR.jpg, FL.JPGとしよう。このサイズはそれぞれ3441×2016である。さてこの画像とPoser & Octaneで生成される3D画像を重ねてVRで3Dに見せられる画像を作ってみたい。

1)まずこの現画像2つを圧縮し、1280 x 750 2枚にする。

2)Poserにて作られた画像をOctaneで3D化する。このとき、Octaneで作成する画像のサイズも1280 x 750の左右2枚とする。Off-Axisで生成する。視差は0.065ぐらいでいいだろう。PoserのFocalはまだ調整が必要だが、35mm-25mmの間ぐらいがよさそう。
->いろいろ試したが、35mmと50mmの間、42.5mmぐらいが妥当そうだ。

3) 1), 2)をPhotoshop上で合成してpngもしくはjpgで出力する。サイズが同じなので問題なくできるはず

4) Stereo Photo Makerでこの2枚を順に読み込み、MPOにする。

5)Oculesで視聴する VR Photo Player はMPOが見られる

追記:VR Photo Playerで見るとかなり画面が大きい。Poserで作成したフィギュアは比較的画面の下に収め、かつ背景の上部は大きく空があるほうがよさそうである。


Oculus riftで.mpoファイル閲覧

Oculus riftで.mpo閲覧したいと思ったが、なかなか見つからなかった。LiveViewRiftで見れるとあったが、どうもステレオ画面になってくれない。他の候補をあたってみるにSteam上のVR Photo Viewerがあった。これは動作が鈍いので、選択に時間がかかるが、コントローラで右のBボタンを押せばファイル選択ならびにSBS, MPOなどの設定が出る。これで何とか.MPOファイルが見れるようになった。ただしデフォルトが横に延伸したビューなので、そうでない普通のビューがデフォルトになってほしい。


Octane for Poser on RTX3080

RTX3080のマシンを導入しOctane for Poserを入れようとしたら、動かない。GPU settingでcapability (8.6) not foundと言われている。OctaneのForumよく調べてみたら、通常のDownloadサイトではないところに2020_1_5_104があるのでダウンロードせよ、と言われた。やってみたら動いた。備忘まで

https://render.otoy.com/customerdownloads/plugins/a6/b4/9a/90/OctaneRender_for_Poser_2020_1_5_104_STUDIO.exe


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のレンダリング時に用いる。。あらかじめ鏡になったボールを配置すると、このような画面が映ることになり、ちゃんと背景の光がターゲットに届いていることがわかる。