画像を3Dにする技術が話題となっております。
この技術を使えば、写真やイラストなど、2Dのものが、簡単に3Dになってしまいます。
今回はその技術の使い方を紹介していこうと思います。
3D Photo Inpaintingについて
まず、3D Photo Inpaintingを使うとどのようなものができるのでしょうか。
以前に描いたイラストで試してみました。
こちらのイラストも動かしてみました。
英語ページですが、詳しくはこちらをご確認ください。
3D Photography using Context-aware Layered Depth Inpainting
3D Photo Inpaintingで3Dに変換するには、大きく分けて、ブラウザ上で行う方法と、ローカルで行う方法があります。
ブラウザで行う場合は簡単な手順で3Dに変換することができ、操作も分かりやすいです。
ローカルで行う場合はちょっとだけ難しいかもしれません。
ブラウザ上で作る。3D Photo Inpaintingの使い方
では、まずは2D画像を、ブラウザ上で3Dに変換する方法を紹介します。
まずは3D-Photo-Inpainting.ipynbにアクセスしましょう。
Googleドライブに「3D-Photo-Inpainting.ipynb」のコピーを保存してから変換する方法にしようと思うので、Googleにログインする必要があります。
右上の「ログイン」から、ログインします。
では、ドライブにコピーしてみましょう。
「ファイル」 → 「ドライブにコピーを保存」 をクリックします。
すると新しいタブが開かれるので、そこで作業を行なっていきます。
では、「Prepare environment」の項目から始めていきましょう。
「Prepare environment」の下にある、▶︎ボタンをクリックします。
もしも▶︎ではなく、[]になっていたら、項目部分全体をクリックすると、▶︎に切り替わります。
続いて、 「Download script and pretrained mobel」の項目の下にある、▶︎ボタンをクリックします。
再び、しばらく待ち、完了してから次へいきましょう。
次は、「Switch off off-screen rendering」の項目の下にある、▶︎ボタンをクリックします。
こちらはすぐに完了するようです。
次にいきましょう。
「Please upload .jpg files to /content/3d-photo-inpainting-master/image/」の項目の下にある、▶︎ボタンをクリックします。
すると画像がアップロードできるようになるので、3D化したい画像を選択します。
▶︎ボタンをクリックしたあと、すぐに画像を選択してください。
最後に、「Execute the 3D Photo Inpainting」の項目の下にある、▶︎ボタンをクリックします。
画面左のメニューのフォルダマークをクリックし、「video」の中を見ると、4つのファイルが作られています。
もしもない場合は、「更新」をクリックします。
作成したファイルは、右クリックからダウンロードすることできます。
実際に作ってみたのがこちらです。
こちらも私が以前描いたイラストです。
ローカルで作る。3D Photo Inpaintingの使い方(Mac)
2D画像を、ローカルで3D画像に変換する方法です。
今回はMacを使用した方法を紹介します。
Anacondaのインストール
Anacondaを使いますので、インストールしていない方はしていきしましょう。
ただ、Anacondaをインストールすると、Macの環境が変わってしまうので注意です。
(私の場合ですが、Anacondaをアンインストールして、.bash_profileに自動的に書き込まれたものを削除すれば、元に戻りました。これは人によって違うかもしれません)
上のサイトの右上の「Download」をクリックし、インストーラーをダウンロードし、インストールします。
途中、インストール先を選択しますが、私は「自分専用にインストール」を選びました。
この方法だと、Anacondaは、ホームディレクトリのoptにインストールされるようです。
パスを通す
次は、パスを通していきます。
私は普段、fish shellを使っているので、ターミナルに以下のコマンドを打ち込みました。
> set -U fish_user_paths $HOME/opt/anaconda3/bin $fish_user_paths
以下のコマンドを入力して、バージョンが表示されれば成功です。
> conda -V conda 4.8.3
Pythonのインストール
続いて、Pythonをインストールしていきます。
PythonはHomebrewを使ってインストールします。
Homebrewをインストールしていない場合は、こちら(Homebrewの使い方。よく使うコマンド一覧と詳しい解説まとめ)の記事をご覧ください。
> brew install python
以下のコマンドを入力して、Pythonのバージョンが表示されれば、インストール完了です。
> python -V > Python 3.7.7
3D Photo Inpaintingを使う
では、3D Photo Inpaintingを使っていきますので、適当な名前のディレクトリを作り、cdコマンドでそのディレクトリに移動しておいてください。
> mkdir 3dtest > cd 3dtest/
続いて、3d-photo-inpaintingをGitHubからcloneします。
もし、gitを使ったことがない場合は、こちら(【Gitの使い方 – その2】GitをMacにインストールする方法!)の記事を見てインストールしましょう。
> git clone https://github.com/vt-vl-lab/3d-photo-inpainting Cloning into '3d-photo-inpainting'... remote: Enumerating objects: 21, done. remote: Counting objects: 100% (21/21), done. remote: Compressing objects: 100% (19/19), done. remote: Total 224 (delta 6), reused 10 (delta 2), pack-reused 203 Receiving objects: 100% (224/224), 110.86 MiB | 3.99 MiB/s, done. Resolving deltas: 100% (116/116), done. Checking out files: 100% (21/21), done.
完了したら、3d-photo-inpaintingに移動します。
> cd 3d-photo-inpainting/
以下のコマンドをターミナルに入力していきます。
> conda create -n 3DP python=3.7 anaconda Proceed ([y]/n)? y 〜 省略 〜
> conda activate 3DP
> pip install -r requirements.txt Collecting opencv-python==4.2.0.32 Using cached opencv_python-4.2.0.32-cp37-cp37m-macosx_10_9_x86_64.whl (47.9 MB) 〜 省略 〜
> conda install pytorch torchvision cudatoolkit -c pytorch Collecting package metadata (current_repodata.json): done Solving environment: failed with initial frozen solve. Retrying with flexible solve. 〜 省略 〜 Proceed ([y]/n)? y 〜 省略 〜
続いて、download.shを実行していきたいのですが、download.shにはwgetコマンドが書かれています。
wgetを入れていない場合はHomebrewで入れておきましょう。
もしもwgetが入っていない場合、以下のコマンドを入力します。
> brew install wget
wgetが入っている状態で、以下のコマンドを入力します。
> chmod +x download.sh > ./download.sh --xxxx-xx-xx xx:xx:xx-- https://filebox.ece.vt.edu/~jbhuang/project/3DPhoto/model/color-model.pth 〜 省略 〜
ここで、変換したい画像ファイルを3d-photo-inpainting/の、image/に入れました。
3d-photo-inpainting/ image/ 変換したい画像ファイル.jpg
以下のコマンドを入力しますが、もしかすると次のようなエラーが出てしまうかもしれません。
> python main.py --config argument.yml 〜 省略 〜 RuntimeError: Attempting to deserialize object on a CUDA device but torch.cuda.is_available() is False. If you are running on a CPU-only machine, please use torch.load with map_location=torch.device('cpu') to map your storages to the CPU.
そんなときは、argument.ymlの21行目を編集します。
編集するのはgpu_idsの値です。0となっている部分を消してしまいます。
argument.yml
〜 省略 〜 #gpu_idsの0を削除 #gpu_ids: 0 gpu_ids: 〜 省略 〜
これでもう一度以下のコマンドを実行してみましょう。
> python main.py --config argument.yml 0%| Current Source ==> snipe initialize device: cpu start processing processing image/snipe.jpg (1/1) torch.Size([1, 3, 384, 288]) finished Start Running 3D_Photo ... 〜 省略 〜
私の環境では、かなり時間がかかり、止まったのではないかと思うほどでしたが、気長に待っていれば進みました。
そして完成したのが、こちらになります。
まとめ
3D Photo Inpaintingを使うことで、写真やイラストを簡単に3Dにすることができます。
変換に時間がかかるのですが、待っている間は、画像がどのように動くんだろう、と楽しみになります。