OpenCV ベースで実装されている AR ライブラリがあるらしい。
とりあえず、Windowsで動かせるか試してみた。OpenCV 2.1 以上が要求されている。以前ビルドした OpenCV 2.2 と VS2008 でやってみた。CMakeがあるけど、エラーが出まくるので自前でやってみた。
まず、ライブラリを作る。aruco.lib というのを作ることにする。必要なファイルは以下のもの。
- aruco.h
- board.h
- boarddetector.h
- cameraparameters.h
- cvdrawingutils.h
- marker.h
- markerdetector.h
- board.cpp
- boarddetector.cpp
- cameraparameters.cpp
- cvdrawingutils.cpp
- marker.cpp
- markerdetector.cpp
新規プロジェクトを作成して、上記のファイルを追加する。ビルド時に引っかかったのは二箇所。markerdetector.cpp の 89行目の sqrt 関数のタイプが特定できないということだった。受ける変数が float だったので、sqrt の中身の式を float で cast することで解決した。もうひとつは、M_PIがないということだったので、_USE_MATH_DEFINES を立てる。
次に、マーカ検出を行う aruco_test.cpp を試してみた。追加したファイルは、
- aruco_test.cpp
- aruco.h
- board.h
- boarddetector.h
- cameraparameters.h
- cvdrawingutils.h
- getopt.h
- marker.h
- markerdetector.h
すると、getopt.h がないといわれる。Windows にはないらしい。ライセンス的に問題なければ、どこかから getopt.c, getopt1.c, getopt.h を取ってきてプロジェクトに追加。include を適宜修正する。リンクに必要なものは以下のlib。
実行に必要な DLL は適宜配置する。
ソースと同じところで配布されているデータを使ってみたところ、ちゃんとマーカを検出できたようです。
GLまわりもちゃんと動くか後で試してみる。