写真から3Dモデルを作製する (3): VisualSFMのコンパイルの詳細

コンパイルの際に参考にしたサイト、


これを見ればバッチリコンパイルできるのだが、ま、英語だし、折角なので、軽くまとめておく。

はじめる前に

使用するOSは、Ubuntu 64bit。パッケージは無いので、自分でコンパイルしなければならない。ソースコードを編集しなければならない場所もある。コンパイルにHDD容量を2GB程度使うことになる。

下準備

ホームに、vsfmというディレクトリをつくり、全てそこで作業する。作業後もそこから直接実行することになる。

コンパイルに必要なライブラリ、ツールなど

前もってインストールしておく。

$ 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

VisualSFMのコンパイル

こいつのコンパイルは定石どおり。

$ cd ~/vsfm
$ unzip /tmp/VisualSFM_linux_64bit.zip 
$ cd vsfm
$ make

SiftGPUのコンパイル

コンパイルして、~/vsfm/vsfm以下にコピーしておく。

$ cd ~/vsfm
$ unzip /tmp/SiftGPU-V382.zip 
$ cd SiftGPU
$ make
$ cp bin/libsiftgpu.so ../vsfm/bin

Multicore Bundle Adjustment (libpba)のコンパイル

ちょいと面倒くさい。zipファイルを解いて、ソースファイルの先頭に次の一行を追加する。

#include 

編集するファイルは、“SparseBundleCU.h”と“pba.h”。編集したら、GPU無しでコンパイルする。

$ make -f makefile_no_gpu
$ cp bin/libpba_no_gpu.so ../vsfm/bin/libpba.so

PMVS-2のコンパイル、ちょいとワザあり

PMVS-2の64-bit Linux用バイナリがあるにはあるんだが、動かない。多分こんなエラーが出る。

./pmvs2: error while loading shared libraries: libjpeg.so.62: cannot open shared object file: No such file or directory

元々やや古いRed Hat上でコンパイルされたもので、オブジェクトを見つけられないのだ。かと言って、いちからmakeし直すことも出来ない。lapackのライブラリが含まれており、ややこしいのだ。そこで、lapackのライブラリはコンパイルし直さずに、残りをコンパイルする。以下の様に、mylapack.oを取り置きしておいてからmakeし直す。

$ cd ~/vsfm
$ tar xvfz pmvs-2.tar.gz
$ cd pmvs-2/program/main/
$ cp mylapack.o mylapack.o.backup
$ make clean
$ cp mylapack.o.backup mylapack.o
$ make depend
$ make

Graclus 1.2のコンパイル

Makefile.inを編集してmakeする。64-bitシステム用にコンパイルするので、“-DNUMBITS=64″とする。

CMVSのコンパイル、ちょいとワザあり

ややこしいぞ。先ずはCMVSを展開する。そして、そこに先ほどのPMVS-2からmylapack.oを持ってくる。

$ cd ~/vsfm
$ tar xf /tmp/cmvs-fix2.tar.gz
$ cp pmvs-2/program/main/mylapack.o cmvs/program/main/

CMVSのソースファイル“cmvs/program/base/cmvs/bundle.cc”の先頭に次の二行を追加する。

#include 
#include 

“cmvs/program/main/genOption.cc”の先頭に次の行を追加する。

#include 

CMVSのMakefile (cmvs/program/main/Makefile)の10行から17行を次の様に編集する。もちろん、ユーザ名の部分は適宜置き換える。

#Your INCLUDE path (e.g., -I/usr/include)
YOUR_INCLUDE_PATH =

#Your metis directory (contains header files under graclus1.2/metisLib/)
YOUR_INCLUDE_METIS_PATH = -I/home/username/vsfm/graclus1.2/metisLib

#Your LDLIBRARY path (e.g., -L/usr/lib)
YOUR_LDLIB_PATH = -L/home/username/vsfm/graclus1.2

コンパイルして、出来上がったバイナリをVisualSFMのディレクトリへコピーする。

$ cd ~/vsfm/cmvs/program/main
$ make
$ cp cmvs ~/vsfm/vsfm/bin
$ cp pmvs2 ~/vsfm/vsfm/bin
$ cp genOption ~/vsfm/vsfm/bin

パスの設定、起動

最後にパスを設定して起動する。

export PATH=$PATH:/home/username/vsfm/vsfm/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/username/vsfm/vsfm/bin

ターミナルから起動できる。

$ VisualSFM&