Pythonで写真の3D化が可能なPIFuHDをインストール

Pythonで写真の3D化が可能なPIFuHDをインストール プログラミング

「写真から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のデモで作成した3D

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」を付けることで、バイナリデータとして渡せるようになります。

タイトルとURLをコピーしました