2015年07月05日

Visual SFM で遊ぶ - Ubuntuに導入編


こんばんわ。

Structure from Motion (SfM) ってご存知でしょうか。

対象物を様々な方向から撮影して対象物の3次元形状を復元したり、
撮影したカメラの位置を導出したりできる技術です。

その実装として Visual SFM と呼ばれるソフトウェアがあります。

非常のお気軽に SfM ができるということで、
使ってみることにしました。

Windows の方は下記サイトから Windows 用の zip をダウンロードして解凍すれば実行できるそうです。
VisualSFM 公式ページ

でも、 Ubuntu だとちょっとお気軽じゃなかったので、
それについて書きます。

参考サイト: Building Visual SFM on Ubuntu 12.04 (Precise Pangolin) Desktop 64-bit

環境:
CPU : Intel Core i7 - 870 @ 2.93GHz
Memory : 8GB
GPU : GeForce GTS 450
OS : Ubuntu 15.04 MATE
CUDA v7.0 導入済み

1. 必要なパッケージ

VisualSFM より VisualSFM_Linux_64bit.zipをダウンロード

SiftGPU より SiftGPU-V400.zip をダウンロード

Multicore Bundle Adjustment より pba_v1.0.5.zip をダウンロード

CMVS-PMVS より、ソースをダウンロードするため、
$ git clone https://github.com/pmoulon/CMVS-PMVS.git
を実行

・依存しているパッケージをインストール
$ sudo apt-get install libgtk2.0-dev libglew1.6-dev libglew1.6 libdevil-dev libboost-all-dev libatlas-cpp-0.6-dev libatlas-dev imagemagick libatlas3gf-base libcminpack-dev libgfortran3 libmetis-edf-dev libparmetis-dev freeglut3-dev libgsl0-dev

2. VisualSFM をビルド

VisualSFM を解凍して make します。
$ unzip VisualSFM_linux_64bit.zip
$ cd vsfm
$ make

3. SiftGPU をビルド

CUDA が無い場合
SiftGPU を解凍してそのまま make します。

$ unzip SiftGPU-V400.zip
$ cd SiftGPU
$ make

make したら、 bin/libsiftgpu.so を、
VisualSFM の bin ディレクトリ( vsfm/bin )にコピーします。

CUDA が有る場合
SiftGPU を解凍して、まずはSiftGPU/makefileを書き換えます。

$ unzip SiftGPU-V400.zip
$ cd SiftGPU

12行目にある
siftgpu_enable_cuda = 0
となっている部分を、

siftgpu_enable_cuda = 1

にします。
また、17行目の
CUDA_INSTALL_PATH が、 CUDA をインストールしたパスになっているか確認します。

最後に、20行目の
#siftgpu_cuda_options = -arch sm_13
を、先頭の文字のコメントアウトを外して、使用しているグラボの Compute Capability に合った
引数に書き換えます。

私の環境である GTS 450 は Compute Capability が 2.1 なので、
siftgpu_cuda_options = -arch sm_21
とします。
Compute Capability は NVIDIA のページから確認できます。

書き換えたら
$ make
で make します。

make したら、 bin/libsiftgpu.so を、
VisualSFM の bin ディレクトリ( vsfm/bin )にコピーします。

4. Multicore Bundle Adjustment をビルド

SfMのコアとなる Bundle Adjustment のビルドを行います。

CUDA が無い場合

$ unzip pba_v1.0.5.zip
$ cd pba
$ make -f makefile_no_gpu

make したら、 bin/libpba.so を、
VisualSFM の bin ディレクトリ( vsfm/bin )にコピーします。

CUDA が有る場合

$ unzip pba_v1.0.5.zip
$ cd pba
$ make

make したら、 bin/libpba.so を、
VisualSFM の bin ディレクトリ( vsfm/bin )にコピーします。

5. CMVS - PMVS のビルド
密な SfM をしてくれる CMVS - PMVS をビルドします。
先ほど git clone した CMVS - PMVS に移動して、cmake して make します。
(cmake がない人は $ sudo apt-get install cmake してください)

$ cd CMVS-PMVS/program
$ cmake .
$ make

CMVS-PMVS/program/main の中にある実行ファイル
cmvs と genOption と pmvs2 をすべて
VisualSFM の bin ディレクトリ( vsfm/bin )にコピーします。

6. Visual SFM が起動するはず

vsfm/bin の中に実行ファイルとして
・VisualSFM
・cmvs
・pmvs2
・genOption
が入っており、ライブラリとして
・libpba.so
・libsiftgpu.so
が入っています。

ここにパスを通してから VisualSFMを起動します。

$ export PATH=$PATH: < path-to-vsfm > /vsfm/bin
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH: < path-to-vsfm > /vsfm/bin
$ ./VisualSFM

VisualSFM起動画面

これで起動できました。
Windows だったら解凍しておしまいのところ、
Ubuntu だとちょこっと大変ですね。

次回はVisual SFMで実際に遊んでみます。



同じカテゴリー(Linux)の記事画像
Visual SFM で遊ぶ - 大気像編
Ubuntu 15.04 MATE に CUDA Toolkit v7.0 を導入
同じカテゴリー(Linux)の記事
 Linux で Windows 向けフリーゲームを遊ぶ (2015-09-21 21:38)
 FFmpeg を使って動画から連続画像を作る (2015-07-12 19:54)
 Visual SFM で遊ぶ - 大気像編 (2015-07-06 01:12)
 Ubuntu で swap 領域を USBメモリに確保する (2015-07-04 20:40)
 Ubuntu 15.04 MATE に CUDA Toolkit v7.0 を導入 (2015-07-01 23:16)
 Ubuntu MATE を使っています。 (2015-06-30 10:04)
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。