アーカイブ

2011 年 6 月 のアーカイブ

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でもそうだった)。

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