1.はじめに
SfMのパブリックドメインのソフトウェアとしてBundlerというものがあることを「写真測量とリモートセンシング」学会誌で読んだので、Windows上で動かせないか試行錯誤してみた。結果的にはダメであったが、何をしたかのメモとして残しておく。
(3月30日追記:ブログを書いた後、やはりBundlerの結果がどうなるのか知りたくなって、cygwin環境でも試みた。思ったよりスムーズに結果がえられたので、後日談として4.に記す。)
2.BundlerをWindowsで動かすには
Bundlerのwebsサイトを訪問すると、Bundlerは、Linuxかwindow上のcygwin環境で動くことが分かった。cygwinで動かすにはVisual Studioも必要とのことであり、今更という思いがある一方、調べてみるとWindow10上ではWSLというLinux環境が構築できることを知った。
Linux(Ubuntu)でのBundlerのインストールには、大阪大学の方のInstruction of "Bundler"(以下「記事A」という)というよい記事があった。また、WSL環境でのBundlerのインストールにも良い記事 SfMのOSS:Bundlerを動かしてみる in Windows 10 (動きませんでした)(以下、「記事B」という)があった。
その結果、WSL上でUbuntu を導入し、Bundlerが動かせないか試してみることとした。なお、今回の試行錯誤では上記2つの記事、特に記事Bを参考にさせていただいた。というかほぼそれらにそって試してみただけである。
なお、Bundlerは、2010年にリリースされたversion0.4が最新であり、現在では他のオープンソースのSfMソフトウェアが利用できるようであるので、あえてBundlerにこだわる必要はないかもしれない。
3.Bundlerのインストールとうまくいかなかった実行まで
(1)WSLのインストール
詳細は忘れてしまったが、WSLのインストールの記事にしたがってインストールを行った。
そうすると WslRegistrationDistributionfailed with Error:0x80370102 というエラーがでるので、修正:Windows11 / 10でのWSLレジスタ配布エラー0x80370102の問題にそって
- 修正1-ハードウェアベースの仮想化機能を有効にする
- 修正2–HyperVが有効になっていることを確認する(これは仮想マシンプラットフォームの有効化で対応したと思う)
を実施した。
それとの前後関係は忘れてしまったが、コントロールパネルからWindowsの機能の有効化または無効化を選択し、Linux用Windowsサブシステム(名称はWindowsにより少し異なる)を有効にした。
この修正の後、power shell もしくは コマンドプロンプト から
- wsl –unstall –d Ubuntu
とする。そうすると 0x80370110 というエラーが表示される。
ネットで WslResisterDistribution failed with error: 0x80370110 という記事をみつけ、それに従って、一旦上のUbuntuを削除した後
- wsl –unstall –d Ubuntu-20.04
とすると、うまくインストールが行われた。ユーザーネームを要求されたので、 コラム - WSLで始めるUbuntuにしたがって、ユーザーネーム、パスワードを設定した。これでらの準備の後
- powershellを起動させる
- wsl –t Ubuntu-20.04
- WindowsキーからUbuntu 20.04 on Windowsをクリックする
ことによりWSL環境でUbuntuが動くようになった。
(2)Bundlerのインストール
記事A、Bに沿って、bundler-v0.4や特徴点抽出処理プログラムsiftや関連ライブラリをダウンロードした。ここでmakeすると、gccがないといわれた。
そこで、Ubuntu20.04 gccをインスールして実行する手順 を参考にgccをインストールした。
Bundlerのユーザ―マニュアル や記事Bをみると、ImageMagickをインストールする必要があることが分かったので、How To Install "imagemagick-6.q16" Package on Ubuntu のStep1と2を実施した。
このあと、記事Bに沿ってmakeすると BundlerApp.h の620行目がおかしいとの エラーが出た。そこで BundlerApp::BundlerApp() となっているところを BundlerApp() としたらコンパイルできた。
(3)Bundlerの実行
ベースとするディレクトリを記事AをまねてBUNDLER_PATHとし、その下にimageディレトリを作成しkermitの画像を格納した。
その後、記事Bにそって、 imageディレクトリで、../RunBundler.sh を走らせると、 ../binにjheadがないというエラーがでる。
そのフォルダーを見るとjheadがあったが、本来のjheadは usr/binにあったようで、そこのjheadを../binにコピーすると、写真を撮影したカメラの焦点距離や画像のサイズ等が表示されるようになった。
ただし、その後の処理で ../bin/sift がないとのエラーがでる。これについてjheadと同じ処理をしたが、解決することはなかった。いろいろ試行錯誤しても全く変化はなく、記事Bでもsiftの特徴点抽出のところに問題があるとのことだったので、ここまでで断念することにした。
4.後日談:cygwin環境でのBundlerの実行
cygwin環境でのBundlerの比較的最近の実施報告として、windows10でbundlerおよびPMVSを動かしてみた(以下、「記事C」とする。)があったので、これに沿ってBundlerをインストールし、実行した。以下はそのメモである。ほぼ、記事Cを踏襲しただけである。
(1)準備
最初に、cygwinのインストールを行った。インストールにあたっては、Cygwinのインストール方法をご紹介!【日本語化/おすすめパッケージ】に従った。なお、最後の日本語化については、viエディタにどうもなじめないのでパスした。
次に、Visual Studioをインストールと思いダウンロードのページにいったが、あまりにたくさんの機能があり、どれが必要なのか分からなかったことと、記事CにVisual Studioについて言及がなかったので、とりあえずインストールしないことにした。
(2)Bundlerとpmvsのインストール
記事に沿ってBundlerとpmvsの実行ファイル等をダウンロードした。記事Cにあるリンクをたどるとgithubに行きつき、いろいろなファイルをダウンロードしなければならないのかと思ったが、記事Cにこのファイルがあれば大丈夫という記載があったので、それだけダウンロードした。
ダウンロードボタンがなく、テキストが示されているファイルについては、コピー・ペーストで秀丸を用いてファイルを作成した。その際にコードをutf-8、改行をLFで保存した。
また、cygwinを実行したときの最初のディレクトリの下にBUNDLER_PATHというディレクトリを作成し、さらにその下のbinディレクトリにBundlerとpmvs関連ファイルをまとめることとした。
なお、Bundlerの最初のリンクはフランスのサイトでオリジナルのコーネル大学のサイトにLinksの一つとあげられている。
(3)Bundlerの実行
BUNDLER_PATHにおいた RunBundler.sh を実行すると、mogrifyというコマンドがないというエラーが出た。ネットで調べると、これはImageMagickに関連するもののようだったので、cygwinのインストールプログラムをもう一度実行し、ImageMagickのパッケージを追加した。
再度、RunBundler.sh を実行すると /usr/bin/perl: 誤ったインタプリタです: No such file or directory というエラーが出る。これはperlがインストールされていないためだろうと想像できたので、上と同様にperlのパッケージを追加した。
みたびRunBundler.sh を実行すると、今度は最後まで問題なく動作し、.plyファイルが4つ作成された。その中のファイルサイズが最も大きなものをMeshLabで表示したものが下図である。非常に疎な画像で何が写っているかよくわからない。
(4)pmvsの実行
引き続き記事Cに沿って、pmvsを実行するための準備を行ったあと、pmvsを実施した。得られた結果をMeshLabで表示したものが下図である。
cygwin環境では、考えていたよりスムーズに最後までBundlerを実行できたので少し驚いた。WSL:Ubuntuでの経験がベースにあったことが良かったのかもしれない。結局、Visual Studio なしでできてしまったように思うが、少し不思議である。
※コメント投稿者のブログIDはブログ作成者のみに通知されます