「写真から3Dモデルを作成する」
こんなことが、個人でもできる時代なんですね。
PIFuHDを利用すれば、無料で可能となります。
この記事では、PIFuHDをWindowsにインストールする方法を解説しています。
手元のWindowsマシンであれば、好き放題にPIFuHDを動かせます。
本記事の内容
- PIFuHDとは?
- PIFuHDのシステム要件
- PIFuHDのインストール
- PIFuHDの動作確認
それでは、上記に沿って解説していきます。
PIFuHDとは?
PIFuHDとは、写真から3Dモデルを作成するプログラムです。
ツールと表現した方がいいのかもしれません。
PIFuHD
https://shunsukesaito.github.io/PIFuHD/
詳細に興味のある方は、上記ページで確認してください。
PIFuHDは、GitHub上にソースが公開されています。
そのソースや説明を見る限り、PIFuHDはLinuxで動かすことが前提となっています。
もしくは、 Google Colabで動かすことですね。
しかし、個人的にはWindowsでPIFuHDを動かすことを希望しています。
対象外と明示されていない以上は、Windowsでも可能なはずです。
この記事では、そのための方法を解説しています。
以上、PIFuHDについての説明でした。
次は、PIFuHDのシステム要件を確認します。
PIFuHDのシステム要件
PIFuHDは、随時開発しているようではありません。
その意味では、完成形と考えてもいいのかもしれませんね。
ただ、GitHub上ではちょこちょこと更新はあるようです。
不具合修正というような更新だと思われます。
現時点(2021年7月末)での、最終更新は2020年12月14日です。
やはり、PIFuHDは完成していると考えるべきなのでしょう。
肝心のシステム要件ですが、情報が不足しています。
公式では、次の内容が記載されています。
そのため、以下のポイントから説明を追加で行います。
- OS
- Python
- PyTorch
- PyOpenGL(freeglut含む)
- ffmpeg
それぞれを下記で説明します。
OS
サポートOSに関しては、以下を含むクロスプラットフォーム対応のはずです。
- Windows
- macOS
- Linux
公式では、Linux(Ubuntu)ベースでインストール手順が書かれています。
そのため、macOSであれば難なく動くのだろうと推測されます。
結論を言うと、Windowsに関しては実際に動作確認済みです。
そのため、サポート(正確には動作可能)OSにWindowsを含めています。
そして、この記事はWindows向けの記事となっています。
Python
Python 3と記載されています。
今回、私は次のバージョンのPythonを利用して検証しました。
>python -V Python 3.9.6
言えることは、新しいバージョンを利用しましょうということです。
Python 3.9.6で動作確認済みであるため、そのようにおススメします。
Pythonのアップグレードは、次の記事で説明しています。
PyTorch
PyTorchは、最新バージョンを使っても問題ありません。
現時点(2021年7月末)であれば、PyTorch 1.9.0となります。
GPU対応マシンであれば、GPU版を利用しましょう。
そちらの方が、処理は圧倒的に速いです。
PyTorchのインストール方法は、次の記事でまとめています。
GPU版を利用するなら、事前にPyTorchをインストールしておきましょう。
そうしないと、自動的にCPU版がインストールされてしまいます。
PyOpenGL(freeglut含む)
PythonからOpenGLを操作する際に、PyOpenGLが必要となります。
PyOpenGLについては、次の記事で詳しく解説しています。
freeglutに関しても、上記記事の中で説明しています。
PyOpenGLは、PIFuHDのインストールの際に自動的にインストールされます。
そのため、PyOpenGLを事前にインストールする必要はありません。
ただし、freeglutは自動的にインストールされません。
したがって、freeglutは事前にインストールする必要があるのです。
ffmpeg
インストールがまだなら、ffmpegのインストールが必要です。
次の記事内の「FFmpegのダウンロード・インストール」が参考となります。
まとめ
いろいろインストールする必要があります。
でも、手順通りに行えば、そんなに難しいことではありません。
あと、gitコマンドが使えれば、インストールがより簡単になります。
必須ではありませんが、gitコマンドは他でも役に立つケースがあります。
Windowsでgitコマンドを使う場合は、以下を参考にしてください。
以上、PIFuHDのシステム要件を説明しました。
次は、PIFuHDをインストールしていきます。
PIFuHDのインストール
PIFuHDのインストールは、次の処理に分けて説明します。
- PIFuHDのダウンロード
- 学習済みモデルのダウンロード
- PIFuHDのインストール
PIFuHDのダウンロード
最初に、プロジェクト丸ごとをダウンロードします。
git clone https://github.com/facebookresearch/pifuhd.git
この場合に、gitコマンドが便利です。
gitコマンドが使えない場合は、下記URLから手動でダウンロードします。
https://github.com/facebookresearch/pifuhd
「Download ZIP」をクリックですね。
とにかく、手元に以下のファイル・フォルダを用意します。
gitで取得した場合は、「pifuhd」フォルダの下にファイルなどが保存されています。
(※以下では、このフォルダを「pifuhd」で表記)
PIFuHDのダウンロードは、以上となります。
学習済みモデルのダウンロード
「pifuhd」に「checkpoints」フォルダを作成します。
そして、「checkpoints」フォルダに移動。
ここで、次のコマンドを実行します。
wget "https://dl.fbaipublicfiles.com/pifuhd/checkpoints/pifuhd.pt" -O pifuhd.pt
Windowsでも、PowerShellを使えばwgetを利用できます。
エクスプローラーで「checkpoints」フォルダを開きます。
そこで、エクスプローラーのアドレスバーに「powershell」と入力して、「Enter」をクリック。
そうすると、PowerShellが起動します。
そのまま移動せずに、上記のwgetコマンドを実行。
そうすると、ダウンロードが開始されます。
学習済みモデルは、約1.44GBの容量があるファイルです。
そのため、環境によってはなかなかダウンロードが終わらないでしょう。
PIFuHDのインストール
まずは、現状のインストール済みパッケージを確認しておきます。
この時点では、GPU対応版PyTorchをインストールしただけの状態です。
>pip list Package Version ----------------- ------------ numpy 1.21.1 Pillow 8.3.1 pip 21.1.3 setuptools 57.4.0 torch 1.9.0+cu111 torchaudio 0.9.0 torchvision 0.10.0+cu111 typing-extensions 3.10.0.0
次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。
python -m pip install --upgrade pip setuptools
では、PIFuHDのインストールです。
コマンドを実行する前に、「pifuhd」に移動しておきます。
PIFuHDのインストールは、以下のコマンドとなります。
pip install -r requirements.txt
インストールは、結構時間がかかります。
PyTorchが未インストールなら、さらにもっと時間がかかるでしょう。
では、どんなパッケージがインストールされたのかを確認します。
>pip list Package Version ----------------- ------------ colorama 0.4.4 cycler 0.10.0 decorator 4.4.2 ffmpeg 1.4 imageio 2.9.0 kiwisolver 1.3.1 matplotlib 3.4.2 networkx 2.5.1 numpy 1.21.1 opencv-python 4.5.3.56 Pillow 8.3.1 pip 21.2.1 PyOpenGL 3.1.5 pyparsing 2.4.7 python-dateutil 2.8.2 PyWavelets 1.1.1 scikit-image 0.18.2 scipy 1.7.0 setuptools 57.4.0 six 1.16.0 tifffile 2021.7.2 torch 1.9.0+cu111 torchaudio 0.9.0 torchvision 0.10.0+cu111 tqdm 4.61.2 trimesh 3.9.24 typing-extensions 3.10.0.0
依存関係のあるパッケージが、多くインストールされました。
これだけ多いと、PIFuHDはPythonの仮想環境にインストールすべきでしょうね。
Pythonで仮想環境を利用することについては、次の記事で解説しています。
以上、PIFuHDのインストールについての説明でした。
最後に、PIFuHDの動作確認を行います。
PIFuHDの動作確認
デモ用のスクリプトが、用意されています。
demo.sh(pifuhd/scipts/demo.sh)が、そのデモ用のファイルです。
demo.sh
# Copyright (c) Facebook, Inc. and its affiliates. All rights reserved. python -m apps.simple_test # python apps/clean_mesh.py -f ./results/pifuhd_final/recon python -m apps.render_turntable -f ./results/pifuhd_final/recon -ww 512 -hh 512
Windowsの場合は、これを個別に実行していきます。
まず、「pifuhd」に移動。
そこで、次のコマンドを実行します。
python -m apps.simple_test
処理が終わると、次の場所にファイルが作成されます。
pifuhd/results/pifuhd_final/recon
objファイルが、3Dモデルになります。
ただ、このままで簡単に確認ができません。
簡単に確認するために、3Dモデルの確認動画を作成します。
それが、次のコマンドとなります。
python -m apps.render_turntable -f ./results/pifuhd_final/recon -ww 512 -hh 512
おそらく、エラーが出るはずです。
それらエラーの対応方法は、下記で説明します。
とりあえず、コマンドが成功したとします。
その場合は、先ほど確認したフォルダにmp4形式のファイルが追加されます。
result_test_512.mp4
PIFuHDの動作確認は、ここまでできればOKでしょう。
下記で、エラーの対応方法を記載しておきます。
OpenGL.error
OpenGL.error.NullFunctionError: Attempt to call an undefined function glutInit, check for bool(glutInit) before calling
上記のエラーは、glutInit関数が認識されていない場合に起こります。
対応方法は、次の記事の「PyOpenGLの動作確認」に記載されています。
ctypes.ArgumentError
ctypes.ArgumentError: argument 1: <class 'TypeError'>: wrong type
下記ファイルの45行目でエラーが出ています。
pifuhd/lib/render/gl/render.py
次のように変更します。
これにより、該当エラーは出なくなります。
ここでは、根本的な原因をかなり簡略化して説明します。
freeglutはC言語で開発されています。
そのdllに値を渡す際の型が違うということです。
バイナリデータとして渡すべきところを、単なる文字列で渡していました。
それに「b」を付けることで、バイナリデータとして渡せるようになります。