OpenMVGの環境構築手順について~静止画ファイル群から3DCGを作ろう!~
◆目次
- ◆目次
- 前書き
- ◆環境構築手順
- ◆自分で用意した静止画ファイルを使って3DCGを作成する場合
前書き
本記事はOpenMVGというオープンソースライブラリのサンプルコードを実行するための環境手順です。
静止画群から以下のような3DCG(厳密にはメッシュ+テクスチャ)を作るチュートリアルの環境構築についての記事です。
◆OpenMVGとは
Structure From Motion (SfM) の手法を使用したライブラリです。
複数の位置から撮影した静止画像群から、物体を3次元空間で推定します。
簡単にいうと複数の静止画から3Dのメッシュ(あるいはテクスチャ尽きメッシュ≒3DCG)をアウトプットしてくれるライブラリです。
◆Structure From Motion (SfM)とは
一連の 2 次元イメージから 3 次元シーンの構造を推定する技術です。
3 次元スキャンや拡張現実(AR)などで使用されています。
参考)
structure from motion - MATLAB & Simulink - MathWorks 日本
◆この環境構築の前提環境
以下環境での作業となります。
・OS:Windows 10
・python : 3.6.x
・Visual Studio >= 2015 (recommended)
・GCC >= 4.8.1
・Clang >= 3.3
・メモリ:8GB以上(16GB以上が望ましい)
・git インストール済み
◆参考資料
本記事は以下資料をもとに、不足部分や変更部分を加工したものとなります。
詳しい技術的な話は以下記事を参考にしてください
OpenMVSのサンプルを動かしてみる | NegativeMindException
◆環境構築手順
1.OpenMVGのソースをrecursive付きでCloneする。
コマンド:
git clone --recursive https://github.com/openMVG/openMVG.git
注意:
※recursiveがないと、cmakeでエラーになる
※recursiveはモジュールもクローンするオプション
2.Visual Studioのインストール
Visual Studio 2019 Communityをインストール(2015以降であれば可能)
ダウンロード | IDE、Code、Team Foundation Server | Visual Studio
インストール時の選択項目であるワークロードはとりあえず以下としたが、特に意図があるわけじゃないので、各自の状況にあわせて選択してください。
・python開発
・.NETデスクトップ開発
・C++によるデスクトップ開発
※インストールが終わったらPC再起動
※インストールが終わったらVisual Studioを起動してみる
3.Cmakeのインストール
CMake:機種依存やOS依存などを解決してくれるためのツール
インストール方法参考:
WindowsでCMakeを使い、Visual Studio用のプロジェクト/ソリューションを生成する。 | FRONTL1NE
※インストール時の選択項目
コマンドラインから使う可能性があるなら、以下のどちらかにチェックする。
「Add CMake to the system PATH for all users」
「Add CMake to the system PATH for the current user」
4.cmake-guiを起動する
4-1.「source code」に1で取得したソースコードのsrcフォルダパスを指定
4-2.「build the binaries」に出力するフォルダパスを指定
4-3.「Generate」ボタンを押す
4-4.「Spencify the generator for the project」をVisual Studioに設定
※2015以降
4-5 「Finish」ボタンを押す
4-6.処理が終わるまで待つ
以下エラーが出た場合はOpenMVGのclone時に「recursive」をつけていない可能性がある。(つまりやり直してみてください)
Error in configuration process
project files may be invalid
「Configuring done」と表示されれば終了
4-7.「Generate」ボタンを押す。
以下が表示されれば終了
「Configuring done」
「Generating done」
5.VisualStudioでビルドする
5-1.4で出力したフォルダにある「openMVG.sln」を開く
5-2.出力をRelaseモードにする
5-3.ビルド→ソリューションのリビルドでビルドする
※数分~10分以上かかります。
6.サンプルコードのセットアップ
6-1.クローンする
git clone https://github.com/cdcseacave/openMVS_sample
6-2.MvgMvs_Pipeline.pyを書き換える。
修正箇所
# python 2.x系時代のライブラリ、今は使われていないのでコメントアウト # import commands # 5でビルドしたファイルに出力パスを指定
# 私の環境だと、以下のようなパス
OPENMVG_BIN = "{4で出力したフォルダパス}/Windows-AMD64-Release/Release/" # openMVSのパス # 6-1でクローンしたフォルダのbinフォルダで代用可能 OPENMVS_BIN = "{6-1でクローンしたフォルダパス}/bin/" # sensor_width_camera_database.txtの保存先のパスを指定する CAMERA_SENSOR_WIDTH_DIRECTORY = "{1でクローンしたOpenMVGのパス}/src/openMVG/exif/sensor_width_database/"
あとはprint文が旧仕様になっているので修正
あとタブが違ってる行があるので修正※230行目付近
7.サンプルの画像をダウンロード
※Sceaux Castleの画像セット
git clone https://github.com/openMVG/ImageDataset_SceauxCastle
8.サンプルコードの実行
python MvgMvs_Pipeline.py {7でダウンロードしたデータのimagesフォルダパス} {出力フォルダパス}
出力フォルダにmvsフォルダが作成され、「*.ply」ファイルができていることを確認する。
できてなければ何かしらエラーが出ている。
9.MeshLabをインストールする。
静止画から出力した3Dメッシュを表示するためのソフト
10.MeshLabを起動する。
File→Import Mesh で8で出力した「*.ply」ファイルを選択する
例:scene_dense_mesh_refine_texture.ply
◆自分で用意した静止画ファイルを使って3DCGを作成する場合
1. sensor_width_camera_database.txtファイルに撮影したカメラの情報を追記する。
最後の行に以下フォーマットで追記を行う
{撮影したカメラの名前};{センサーの横幅}
詳細:
以下サイトの方が詳しく載っています。
センサーの横幅については以下を参考にするとよいかと思います。
◆センサーの横幅例:
・1型 :13.3
・1/2.3型 :6.2
2.静止画ファイル群を1つのフォルダにまとめる
3.サンプルコード実行
python MvgMvs_Pipeline.py {静止画のフォルダパス} {出力フォルダパス}
注意)画像枚数が多いほど、メモリ容量が必要です。
今回は24枚で試しましたが、メモリ8GBギリギリ使用していました。
枚数64枚で試したときはメモリ不足なせいか、途中でエラーになりました。
4.実行結果例
OpenMVGで再現した幸子のメッシュ&テクスチャがこちら!
— もっぱー (@mopper27af) November 24, 2019
撮影角度が一定だったせいで、真下と上から見ると結構崩れちゃうけど、それでもかなり再現できていると思う。#OpenMVG pic.twitter.com/O9Y42yoheE