Windowsで「Google公開のソフトを使った、2D画像からデプスマップの作成」 を紹介しましたが、PCの要求スペックが高く、実行できる環境を持っていない方も多いようでしたので、今回は、Googleが無償提供している仮想のWEB上で実行できる高性能PC環境「Google Colab」を使って、2D画像からデプスマップの作成をご紹介します。
基本的には、Google Chromeが走るPCとネットワークにつながれば、PCの性能に無関係に動作するはずです。
使うプログラムは、Googleが公開している MannequinChallenge(Github) を少し改造したプログラム(後述)を使用します。
動作イメージは、「Google Colab」で強力なGPU搭載の仮想ノートパソコンを作成し、そこにプログラムを書き込んだ「Google Drive」をマウントし、「Google Drive」上の指定フォルダ(infile)に2D画像を格納(複数可)し、プログラムを走らせると、「Google Drive」上の決められた出力フォルダ(outfile)に2D+デプスマップの横並び画像が出力されます。後は、それをダウンロードし、SPM等で、Facebook 3DやLooking Glass画像として活用します。
なお、 Googleが公開している MannequinChallenge(Github) は、マネキンチャレンジという人物のポーズからデプスをとって、学習させているので、基本的には、人物用とお考え下さい。また約2000の動画データからのディープラーニングなので、出力に対して過度な期待は持たない方が良いと思います。
現状、AIでどの程度のデプスができるのか、色々な画像で試してみる「お試し」レベルとお考え下さい。
1. Googleアカウントの取得
「Google Colab」も「Google Drive」もGoogleアカウントでログインする必要があります。Googleアカウントを持っていない方は、Googleアカウントを取得してください。
2. 下記プログラムをダウンロードし、解凍してできた「2dtodepth」フォルダをフォルダ毎、「Google Drive」にドラッグアンドドロップしてアップロードする
2dtodepth_colab.zip
My Drive/2dtodepth/infileフォルダの中に、処理したい元画像(2D画像)をアップロード(ドラッグアンドドロップ)して下さい。
サンプル画像が一枚入れてありますので、不要であれば、削除してください。
なお、このフォルダにJpeg画像以外のファイルを入れると、そこでエラーして処理を中止しますので、Jpegファイルだけを入れるようにして下さい。
3.「Google Colab」の設定
3-1 「Google Colab」のページを開き、左上のメニューから「ファイル」→「Python 3の新しいノートブック」を選択し、仮想PCを作成する
3-2 必要に応じて仮想PCの名前を判りやすい名前に変更する。メニューから「ファイル」→「名前を変更」を選択(やらなくてもOK)
3-3 メニューから「編集」→「ノートブックの設定」を選択し、表示されるダイアログのハードウェアアクセラレーションを「GPU」にする
3-4 仮想PCに「Google Drive」をマウントする
jこのような画面が表示されるので、指定URLをクリックし、アクセスを許可すると、コードが表示されるので、それをコピーして
上記ダイアログに貼り付けてEnterキーを押してしばらく待つとファイルタグからマウントした「Google Drive」が見られるようになる
3-5 実行プログラムのフォルダに移動し、Pythonプログラムを起動する為に以下のコマンドを入力し、実行ボタンを押す
%cd /content/drive/My Drive/2dtodepth ← フォルダ移動
!python 2dtodepth.py --input=single_view ← Pythonプログラム起動
3-6 実行終了まで待つ
下のように、入力 ---> 出力 が表示されて表示が止まれば終了です。
複数画像を入力した場合は、全て表示されれば終了です。
3-6 出来上がったファイルをMy Drive/2dtodepth/outfileフォルダからダウンロードする
3-6 StereoPhoto Maker等に読み込んでご活用下さい。
Googleが公開している MannequinChallenge(Github) からの改造
Githubにある、オリジナルファイルにいくつか変更を加えています。
- フォルダ内一括デプス作成できるように変更
オリジナルは、ファイルリストを作成するようになっていますが、いちいちリストを作るのが面倒
- 入力画像の解像度/アスペクトを保持するように変更
オリジナルは、入力画像に無関係に512x288ピクセルで作成しているが、
入力画像の解像度のまま出力するように変更
但し、デプスマップは、512ピクセルで作ってあとで入力画像に合わせて拡大
- iPhoneのポートレート写真のように、1ファイルに複数画像があるとエラーする問題を修正
- EXIFの画像の向きを反映するように変更
- デプスマップの向き(白手前/黒手前)を指定できるように変更
等々
4.横並び(2D画像+デプスマップ)から左右ステレオ画像作成
4-1. 2D画像+デプスマップ画像を左右画像としてStereoPhoto Makerで読み込む。
4-2. メニュー→編集→デプスマップ→2D+デプスマップから3Dを作成... を選ぶ
4-3. 下のダイアログが出るので、OKボタンを押すと、左右ステレオ画像が作成される。
視差設定は、標準は30(3.0%)です。大きくするほど、視差がきつくなります。
前後位置ボタンを押すとデプスマップのどの色をウィンドウ面にするか設定できます。
5.My Drive/2dtodepth/outfileフォルダに2D画像とデプスマップ画像を別々に保存する方法
My Drive/2dtodepth/models/pix2pix_model.pyを下記ファイルを解凍したファイルに置き換えて実行してください。
pix2pix_model.zip
デフォルトでは、黒が手前のデプスマップが作成されますが、Facebook 3D写真は、白手前のデプスマップを使います。
上述の起動コマンド
!python 2dtodepth.py --input=single_view
を
!python 2dtodepth.py --input=white
に変更して実行すると白手前のデプスマップが作成されます。