SfMのOSS:Bundlerを動かしてみる in Windows 10 (動きませんでした)

画像処理

最初に結論を述べておくと、Windows 10でBundlerは動きませんでした。ごめんなさい。

動かないまま力尽きたものの、結構頑張って動かそうとしたので、その軌跡をまとめました。


 

SfMのOSSであるBundlerは、Linuxで動かすことを前提としています。
なので、Windowsで動かすには昔はCygwin等が必要だったのですが、Windows 10のBash on Windows(BoW)を使えば簡単に動かせるんじゃないかと思ったので、挑戦してみます。
(一応Visual Studio用のプロジェクトファイルもあるのですが、VS上で動かすのは果てしなく手間がかかりそうなので、今回は見送ります)

最新バージョンのv0.4でさえ2010年4月にリリースされたものなので今更感は否めませんが、大規模なSfMの礎となった偉大なOSSなので、動かしてみる価値はあるでしょう。

Bundlerの入手

何はともあれ、まずはBundlerのソースコードを持ってきます。
せっかくなので、公式サイトのv0.4ではなくGitHubから最新のコードを持ってきましょう。

これからの処理は全部Bash on Windows上で行っています。

Bundlerには特徴点検出器は含まれていないので、検出器のOSSもダウンロードします。
今回はREADMEにしたがって、このサイトのSIFT検出器を使います。

Demo Software: SIFT Keypoint Detector

ちなみに、このSIFT検出器の出力フォーマットに合わせて特徴点を記述してやれば、SIFT検出器以外も使えるみたいです。

Bundlerのビルド

このままでは色々と足りなくてビルドできないので、必要なパッケージをインストールしてやります。

JPEG画像のメタ情報、EXIFを扱うために、jheadというコマンドもインストールします。Bundlerでは焦点距離をEXIFからとってきたりしているので、そのために使用するツールです。
またプログラム内から画像の操作をするためにImageMagicもインストールします。

最後に、makeするときに必要な実行ファイルを見つけられるように、パスを通してやります。

これでREADMEに書いてある準備は一通り行ったはずなのですが、実はこれではビルドに失敗してしてしまします。
BoWはデフォルトでインストールされてるパッケージが少ないせいですかね。。。
なので、その他必要な諸々をインストールしてやります。

これで準備が整ったので、ビルドしてやりましょう!

Errorが出なければ、ビルド成功です!!(warningはたくさん出ますが無視してください。)

Bundlerの実行

ビルドが成功したら、Bundlerを実行してみましょう!!
今回はリポジトリ内にあるサンプル画像を使って動かしてみます。

まずは、画像のあるディレクトリに移動してやります。

あとは、スクリプトを起動するだけ!!なはずなのですが・・・

怒られました。。。
jheadはさっきインストールしましたが、どうやらbin以下に置かないといけないみたいなので、シンボリックを貼ってやります。

そして、再度実行

うーむ、今度は画像は読み込めてるけど特徴点検出に失敗しまくってます。。。
はい、ここで挫折してBundlerを実行することはできませんでした。

結論

Syntax error: “(” unexpected というエラーメッセージ的に、どうにもSIFT検出器のバイナリが32bitしか対応していないっぽいです。
今回使用したこのSIFT検出器は、2005年が最終更新でソースコードもすべては公開されておらず自分の環境用にビルドできないため、64bit環境で動かないのはもうどうしようもありません。

Demo Software: SIFT Keypoint Detector

この辺を見る限りBoWも64bitしかサポートしてないないようなので、違う特徴点検出器を使うしかないみたいですね。OpenCVとかを使えばできないことはないんでしょうけど、今回はここで力尽きたので見送りたいと思います。

Please enable WSL to run 32 bit ELF binaries
It seems that executing 32bit ELF binaries results in "Exec format error" - guessing the kernel doesn't have 32 bit emulation support (compilation is fine, but ...

 

コメント

%d人のブロガーが「いいね」をつけました。