PIFuHDとは2022年に公開された「1枚の写真から高精度な3Dモデルを合成する」技術です。1枚の人物写真から3次元形状を推定して3Dモデルを合成できます。
平たくいえば「1枚の写真からフィギュアを作る技術」です。
ふつう1枚の写真から立体的なデータを作ることはできません。
奥行きがわかりませんし、正面から見て裏側になる部分は写真では見えないので当然です。
しかし、PIFuHDではディープニューラルネットワークと呼ばれるAI技術を使うことによって、見えない部分を推定し、立体的な形状を作ることができます。
この記事では、PIFuHDを使って1枚の写真から人の3Dモデルを作る方法を紹介します。
PIFuHDのインストール
PIFuHDはオープンソースソフトウェアとしてソースコードが公開されています。
これを使えば手元のパソコンでもPIFuHDを試すことができます。
ここではWindowsのパソコンにPIFuHDのソースコードをダウンロードして試す方法を紹介します。
1. GitHubリポジトリをclone
まずはGitHubからPIFuHDのソースコードをcloneします。
コマンドプロンプトを起動して、任意のフォルダで以下のコマンドを実行します。
git clone https://github.com/facebookresearch/pifuhd.git
2. Anacondaで仮想環境を作る
gitコマンドを実行したフォルダにpifuhdフォルダが作成されます。
コマンドプロンプトでcdコマンドを使って移動します。
cd pifuhd
続いてanacondaで仮想環境を作成します。
仮想環境を作成するのは、これからPIFuHDのためにいろいろなライブラリをインストールするので、それによって既存の環境が汚染されるのを防ぐためです。
ここではpifuhdという名称の仮想環境を作ります。
以下のコマンドで仮想環境を作成し、環境を有効化します。
conda create -n pifuhd
conda activate pifuhd
3. ライブラリをインストールする
続いて必要なライブラリを仮想環境にインストールします。
pipコマンドを使うため次のコマンドを実行し、仮想環境にpipをインストールします。
conda install pip
続いて以下のpipコマンドを実行します。
pip install -r requirements.txt
必要なライブラリはPIFuHDのリポジトリのrequirements.txtに書かれていますが、一部不足があったり、バージョンを指定しないと後ほど実行時にエラーが出る場合があります。
そこで以下を実行しました。
pip install matplotlib
pip install -U numpy==1.23.0
※この記事を読んでいるタイミングや環境によって、上記の対応では十分でない可能性があります。エラーで困ったらツイッターアカウント(@sti320a)にメンションしてご質問ください。
PIFuHDのモデルのダウンロード
次にPIFuHDで写真から3D形状を推定するためのモデルをダウンロードします。
ダウンロードする場所としてpifuhdフォルダの直下にcheckpointsフォルダを作成します。
次に、以下のURLからモデルをダウンロードしてcheckpointsフォルダに移動します。
以上でPIFuHDのセットアップは完了です。
写真から3Dモデルを作る(サンプル)
それでは画像から3Dモデルを作ってみましょう。
コマンドプロンプトを開いてpifuhdフォルダに移動し、以下のコマンドを実行しましょう。
conda activate pifuhd
python -m apps.simple_test
これでサンプル画像から3Dモデルが作られます。
作られた3Dモデルはpifuhdフォルダのresults/pifuhd_final/recon
に入っています。
pngファイル(画像ファイル)とobjファイル(3Dモデル)の2つができています。
ここでobjファイルが3Dモデルです。
objファイルはMeshLabなどのフリーソフトで開けます。
以下のリンクからWindows用のMeshLab(メッシュラボ)をダウンロードしてインストールしましょう。
MeshLabのインストールは簡単なので説明は割愛します。
インストールできたらMeshLabを開きます。
ヘッダーのツールバーから「File>ImportMesh」と進み、ファイルファイアログが開いたら、先ほどの3Dモデル(objファイル)を選択します。
すると、以下のように写真の男性が3Dモデルになって表示されます。
マウスでぐるぐる回してみましょう。
きれいな3Dモデルになっていますね。
写真から3Dモデルを作る(自分で用意した画像)
次に、自分で用意した写真から3Dモデルを作ってみましょう。
ここではStable Diffusionを使って以下の女性の画像を作成しました。
この写真をpifuhdフォルダにある「sample_images」フォルダに追加します。
それからファイル名を「test.png」に変更します。
このときファイル名をそのまま書き換えると、もとからあるサンプル画像と名前が重複してしまいます。もとのサンプル画像のファイル名を事前に変更しておきましょう(ここではtest_.pngにしました)。
それからもう一度、コマンドプロンプトで以下のコマンドを実行します。
python -m apps.simple_test
3Dモデルの生成が始まります。
しばらくして3Dモデルの作成が完了すると、先ほどと同様にpifuhd/results/pifuhd_final/recon
のフォルダにobjファイルとpngファイルができます。
先ほどと同じように、objファイルをMeshLabで開いてみましょう。
objファイルはMeshLabにドラッグアンドドロップしてImportすることもできます。
Importすると、若干、粗さが気になりますがちゃんとした3Dモデルになっています。
作られるモデルは使用した写真や設定によって異なります。
ぜひ、いろいろな写真で試してみてください。
まとめ
今回はPIFuHDを使って1枚の人物写真から3Dモデルを作る方法を紹介しました。
Stable Diffusionのような生成AIを使って作った画像でも3Dモデルを作れることがわかりました。
PIFuHDの実行時の設定や、人物のポーズや服装などによって精度が変わってくるので、いろいろなパターンで試してみてください。
作ったモデルを3Dプリンターで印刷してフィギュアにしたり、3Dゲームに取り入れても面白いかもしれません(ただし商用利用はできないのでご注意ください)。
記事の内容にわからないことがある方は以下のアカウントに気軽にDMしてください!
また、最新の技術の活用方法など役に立つツイートを心がけているので、ぜひフォローしてもらえると嬉しいです!