OpenMVGの環境構築手順について~静止画ファイル群から3DCGを作ろう!~

◆目次

 

前書き

本記事はOpenMVGというオープンソースライブラリのサンプルコードを実行するための環境手順です。

 

静止画群から以下のような3DCG(厳密にはメッシュ+テクスチャ)を作るチュートリアルの環境構築についての記事です。

 

f:id:mopper27:20191124201949p:plain



 

 

 ◆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 インストール済み

◆参考資料

本記事は以下資料をもとに、不足部分や変更部分を加工したものとなります。

詳しい技術的な話は以下記事を参考にしてください

 

github.com

 

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」に出力するフォルダパスを指定

 

f:id:mopper27:20191124201756p:plain

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モードにする

f:id:mopper27:20191124201901p:plain

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

f:id:mopper27:20191124201936p:plain

8.サンプルコードの実行

    
python MvgMvs_Pipeline.py {7でダウンロードしたデータのimagesフォルダパス} {出力フォルダパス}

出力フォルダにmvsフォルダが作成され、「*.ply」ファイルができていることを確認する。
できてなければ何かしらエラーが出ている。

9.MeshLabをインストールする。

MeshLab

静止画から出力した3Dメッシュを表示するためのソフト

 

10.MeshLabを起動する。

 File→Import Mesh で8で出力した「*.ply」ファイルを選択する

 例:scene_dense_mesh_refine_texture.ply

 

f:id:mopper27:20191124201949p:plain

 

◆自分で用意した静止画ファイルを使って3DCGを作成する場合

1. sensor_width_camera_database.txtファイルに撮影したカメラの情報を追記する。

  最後の行に以下フォーマットで追記を行う

{撮影したカメラの名前};{センサーの横幅}

 

詳細:

以下サイトの方が詳しく載っています。

qiita.com

センサーの横幅については以下を参考にするとよいかと思います。

www.photografan.com

 

◆センサーの横幅例:

・1型   :13.3
・1/2.3型 :6.2

 

2.静止画ファイル群を1つのフォルダにまとめる

f:id:mopper27:20191124203119p:plain

 

3.サンプルコード実行

python MvgMvs_Pipeline.py {静止画のフォルダパス} {出力フォルダパス}

 

注意)画像枚数が多いほど、メモリ容量が必要です。

   今回は24枚で試しましたが、メモリ8GBギリギリ使用していました。

   枚数64枚で試したときはメモリ不足なせいか、途中でエラーになりました。

 

4.実行結果例