アーカイブ

‘orfeotoolbox’ タグのついている投稿

Orfeo-Wrapping-1.4.0をArchlinuxにインストール

2011 年 6 月 12 日 コメントはありません

前回の記事に書いたようにOrferoToolbox (OTB)をインストールすることに成功し、早速利用しようと用意していたところ、どうやらGDALのようなコマンドラインのアプリケーションはまだ作られていないらしく、自分で必要に応じてプログラミングする必要があるようだった。しかし、C++なんて煩わしいもんはやりたくない。

そんなヒトの声に応えるソフトウェアがOrfeo-Wrappingで、OTBのモジュールをJavaやPythonで使うことができるようになるそうだ。さて、インストールしてみるか、ということで試行錯誤を経た結果をまとめる。

CableSwigをインストール

ITKのラッピングに必要らしいCableSwigをインストールする。

sudo pacman -Sy swig cvs
cvs -d :pserver:anonymous@public.kitware.com:/cvsroot/CableSwig co CableSwig
mkdir CableSwig-Binary
cd CableSwig-Binary
cmake ../CableSwig
# ccmakeでオプション設定できる。たぶんデフォルトで問題ない
make
sudo make install

Orfeo-Wrappingをインストール

これがとんでもなく骨が折れた。何が問題かって、ArchLinuxのコンパイラがどういうわけかstd名前空間が省略されたものを認識してくれない(Debianでは無問題だった)。これに気付くまでにずいぶん回り道したもんだ。

まず、OTBのインストールで得られる下記のファイルを少し書き換える。

/usr/local/include/otb/Utilities/ITK/IO/itkImageIORegion.h
typedef ptrdiff_t -> typedef std::ptrdiff_t

/usr/include/OpenThreads/Thread
/usr/local/include/otb/Utilities/ITK/Utilities/itksys/SystemTools.hxx
/usr/local/include/otb/IO/otbCurlHelper.h
/usr/local/include/otb/IO/otbKMLVectorDataIO.txx
/usr/local/include/otb/Utilities/ITK/IO/itkImageIORegion.h
/usr/local/include/otb/Utilities/ITK/IO/itkImageIOBase.h
sitze_t -> std::size_t

こんぐらい認識してくれよって感じ。たぶん、OTBのインストールで少しいじるとこの手間は省けると思う。

そして下記を実行。cmakeで出力されたmakefileをsedでガリガリ書き換えているのがポイント。Pointer::SmartPointerの問題についてはここを参照。

mkdir Orfeo-Wrapping-Binary
cd Orfeo-Wrapping-Binary
cmake -DCMAKE_CXX_COMPILER=/usr/bin/g++ -DCMAKE_C_COMPILER=/usr/bin/gcc -DWRAP_ITK_PYTHON:BOOL=ON ../Orfeo-Wrapping-1.4.0 #必要に応じて-DWRAP_ITK_JAVA:BOOL=ONなども入れておく。
find -name "*build.make" | xargs sed -i.bak 's/\(\/usr\/bin\/g++ .* -c \)\(.*\.cpp\)/sed -i.bak "s\/#include \\/#include \\\n#include \\/" \2 \&\& \1 \2/g;s/\(\/usr\/bin\/g++ .* -c \)\(.*\.cpp\)/sed -i.bak "s\/#define SWIG_PYTHON_DIRECTOR_NO_VTABLE\/#define SWIG_PYTHON_DIRECTOR_NO_VTABLE\\n#define SWIGPY_SLICE_ARG(obj) ((PyObject*) (obj))\\n#define SWIGPY_SLICE_ARG(obj) ((PySliceObject*) (obj))\/" \2 \&\& \1 \2/g'
find -name "*.includes" | xargs sed -i.bak 's/Pointer::SmartPointer/Pointer/g'
make
sudo make install
export PYTHONPATH=/usr/local/lib/otb-wrapping/Python:$PYTHONPATH >> ~/.bashrc

何回もmakeするとそのたびに警告メッセージが増える。たぶん、sedで書き換えている当たりでdefineやらincludeやらが重複しちゃっているんだろうな。再検討の余地有り。

これでうまくインストールされたら、Hello Worldしてみる。

cd ../Orfeo-Wrapping-1.4.0/Languages/Python
python2 HelloWorld.py

大量の警告メッセージが出てくるけど最後にOTB Hello World !が出てくれば多分OK(Debianでもそうだった)。

やっと準備が整ったので、いよいよこれでプログラミング始めるよ!

OrfeoToolBox3.8.0をArchLinux & GCC4.6.0でビルド→結局、GCC4.3.4を使った

2011 年 5 月 28 日 コメントはありません

GRASSよりも高度な画像処理が実装されているOrfeoToolbox(以下、OTB)をインストールしようと思ったら、それを構成するInsight ToolkitがGCC4.6.0に対応していないことが原因でビルドがうまくいかない。それじゃInsight Toolkit (以下、ITK)のビルドからやり直してみようってことで以下、手順の覚え書き。

Insight ToolkitをAURからインストール

※だたし、この手順は後ほど誤りであることに気付く。参考にしてインストールする方は注意してください。

ここからTarballをダウンロード、展開してmakepkgする。cmakeが必要だが、下記の実行で自動にインストールされる。

wget https://aur.archlinux.org/packages/insight-toolkit/insight-toolkit.tar.gz
tar xaf insight-toolkit.tar.gz
cd insight-toolkit
makepkg -s
#しばらく待つ
sudo pacman -U insight-toolkit-3.20.0-2-x86_64.pkg.tar.xz

OrfeoToolboxをビルド

OTBに必要なパッケージをインストールした後、OrfeoToolboxのソースをダウンロードして展開、cmake→make。OTB_USE_EXTERNAL_ITK=ONにするのがポイント。

sudo pacman -Sy fltk gdal mesa openthreads freeglut
wget http://jaist.dl.sourceforge.net/project/orfeo-toolbox/orfeo-toolbox/OTB-3.8/OrfeoToolbox-3.8.0.tgz
tar xaf OrfeoToolbox-3.8.0.tgz
mkdir OTB-Binary
ccmake ../OrfeoToolbox-3.8.0 -DOTB_USE_EXTERNAL_ITK=ON #その他のオプションも適宜設定する。
# 1-2分待つ
make
sudo make install

その後の奮闘

ウマーで終わると思ったら今度はCode/IO/CMakeFiles/OTBIO.dir/otbGDALImageIO.cxxに問題があってコンパイルが止まる。なんなんだよもう。というわけで、ソースコードを探ってみた。

原因はビルドしたITKのitkImageIOBase.hにはIOComponentType::CFLOAT、IOComponentType::CDOUBLE(複素数のデータ型と思われる)がなぜか入っていなくて、これを参照しようとして止まってしまったらしい。otbGDALImageIO.cxxのうち、該当する部分をコメントアウトするとコンパイルが通った。複素数型なんて滅多に使わないし、ま、いいでしょ。

しかし、それでもなおうまくいかない。次のエラーはitkPixelBuilder.hが無いよというエラー。ITKのソースディレクトリをくまなく探してもそんなファイルは見つからない。実は、OTBで使っているITKのパッケージはかなり昔のバージョンなのだ。最新版は2010年6月にリリースされた3.20であるのに対し、OTBで使っているのは2003年にリリースされた1.2.0。メジャー番号が2も違えばファイル構成も変わりますわな。

よしそれじゃ1.2.0をビルドしちゃうぞーって張り切ったら、またエラーで止まってしまう。そもそも、これが原因で一筋縄ではビルドができなかったのだ。つまり、やっとのことでスタート地点に着いたわけだ。なお、この辺の問題はなかのひとも取り組んでいるようで、新しいITKに対応するためのプロジェクトのページがこちら

試行錯誤の末、試したのがGCC4.3.4をAURでビルドして、そのコンパイラを使ってOrfen Toolbox(というよりITK1.2.0)をコンパイルするという手順。DebianのGCC4.3.2のコンパイルが通ったので、4.3.4ならいけるんじゃないかという期待。

そうした試行錯誤を重ねた結果、下記の手順でやっとのことビルドできた。いちばんやっかいなのは、GCC4.6.0でコンパイルされたであろう公式パッケージ版のproj、geos、Openthreadsを入れていたら、OTBのコンパイルの際にglibcの参照にエラーが生じたこと。詳しくはわからんが、都合悪くバイナリの互換性が通らなかったのだろう。

  1. AURのGCC4.3.4をmakepkgでコンパイル、pacmanでインストール
  2. geosproj, Openthreadsをmakepkgでコンパイル。この際、PKGBUILDのconfigureの前に下記を追記しておく。また、projのパッケージに含まれる投影まわりのファイル名が合っていないので適宜修正する
  3. export CC=/opt/gcc-4.3/gcc
    export CXX=/opt/gcc-4.3/gcc
    
  4. OTB3.8.0のコンパイル、インストール。コンパイラの設定に注意。cmakeの設定エディタならtを押すと拡張項目が表示される。
  5. wget http://jaist.dl.sourceforge.net/project/orfeo-toolbox/orfeo-toolbox/OTB-3.8/OrfeoToolbox-3.8.0.tgz
    tar xaf OrfeoToolbox-3.8.0.tgz
    mkdir OTB-Binary
    cmake -DCMAKE_CXX_COMPILER=/opt/gcc-4.3/g++ -DCMAKE_C_COMPILER=/opt/gcc-4.3/gcc -DOTB_USE_EXTERNAL_ITK=OFF ../OrfeoToolbox-3.8.0 #その他のオプションも適宜設定する。
    # 1-2分待つ
    make
    sudo make install
    

さて、これで心置きなく衛生画像のセグメンテーションができるようになった。ふぅ。

カテゴリー: GIS/RS, linux タグ: ,