本記事はNCC Advent Calendar 2015*1の10日目の記事です.昨日は @Magic_Gancelot の,RubyでTweetをChatworkに流す - めもりすずこ でした。
私の通っている大学ではコンピュータビジョンという授業がありまして,簡単に言うとOpenCVなどその周辺技術で画像処理技術を学びましょうというものなのですが,今日はOpenGLとARToolkitにチャレンジというものでした.
OpenGLやGLUTそのものはMac OSXがデフォルトでサポート*2しているのでなんてことないのですが,ARToolkitはビルドしないとなりません.ARToolKit2系となるとかなり古いプロジェクトですから,色々と時代が移り変わり,ビルドするだけでもSDKが無いだの調整しなければならないことも増えてきます.今回はそうしたあれこれをなんとかしてみたよ,さらにHomebrewで使えるようにしたよという記事です.(長い前置き)
追記: と,頑張ってみたものの,Buildはできるが,ソフトウェアが正しく動いてくれない状態.arDetectMarkerあたりでBAD_ACCESSになります.調査中.
追記2(12/10 4:20): id:kougaku-navi 先生から原因を教えてもらいました.ラベリングのためのバッファサイズが十分に大きくないのが原因とのことでした.Homebrew版は修正済み.
【メモ】ARToolKitで大きい解像度でキャプチャすると、画像処理のバッファのサイズを超えてしまいコケる。対応するには、ライブラリのソースのarLabeling.cの中にHARDCODED_BUFFER_WIDTH(およびHEIGHT)という定数の値を大きくする。
— kougaku (@kougaku) 2015, 5月 20
結局何が問題だったの?
Mac OSX SDKのバージョンが古いものを指定したのが原因でした.Base SDKを新しい物にすれば解決します. また,利用する際は適切なFrameworkを指定することが必要です.ARToolkitはQuickTimeの機能や,Mac OS XのGUIのライブラリ群であるCocoaやCarbonの機能を利用しているので,利用する際にはそれらも一緒にBuildする必要があるのは注意事項です. また,追記にも書きましたが,ラベリングのための配列のバッファサイズが十分に大きくないことも「ビルドは出来るのにBAD_ACCESS」の原因でした.
具体的な解決方法(ARToolkit build編)
- 左のサイドバーからプロジェクトファイル
ARToolKit
をクリック. - 画面中央左にある
PROJECT
からARToolKit
を選択. - 上記タブから
Build Settings
をクリック.眺めてみるとBase SDK
がおかしいようです. gyazo.com Base SDK
の値をLatest OSX(10.11)
とします.Architectures
の値を32-bit Intel(i386)
とします.でもこれだけでは10.10で利用することができません.OSX Deployment Target
をOS X 10.10
とします.下の方にあるので,見つからない場合は画面中央右上の検索ボックスで検索.(10.9などを使用している際はそれらに従うと良いです.)- 左のサイドバーを
ARToolKit > lib > SRC > AR
とたどっていきarLabeling.c
をクリック. - 38~39行目あたりの数字を変更する.*3
#define HARDCODED_BUFFER_WIDTH 1080 #define HARDCODED_BUFFER_HEIGHT 1080
↓
#define HARDCODED_BUFFER_WIDTH 1920 #define HARDCODED_BUFFER_HEIGHT 1920
Homebrew!
これらの設定をまとめ,Homebrewでインストール出来るようにFormulaを書きました.授業ではMacPortsですが,Homebrewで設定していた人はこれを利用できます.
$ brew taps mactkg/fmscv
$ brew install artoolkit2
/usr/local/include
にヘッダーファイルが,/usr/local/lib
にライブラリファイルがインストールされますので,適宜指定してください.プロジェクトのターゲットを選択して,Header Search Paths
とLibrary Search Paths
にそれぞれ適当なディレクトリを指定すればよいです.
具体的な解決方法(ARToolkit 使用編)
ちょっとつかれたので手順に分けて書くのはやめにします.ここからは,自作するアプリケーションでどうやってARToolkitを使うかを説明.この部分は配布資料にあるけど「HomebrewでARToolkit」という検索ワードで来た人のために.
Build Phases
にあるLink Binary With Libraries
に,上記で上げた5つのフレームワークを追加します.デフォルトのフレームワークなので,上の検索欄に打ち込めばすぐ出てきますよ.
ARToolkitのライブラリも追加しましょう.これはデフォルトではないので,自分で追加します.ARToolkitを自分でBuildした人は,ARToolkitのプロジェクトと同じディレクトリにあるlib
ディレクトリに入ってます.Homebrewを使った人は,/usr/local/lib
を見に行きます./usr/local
へGUIで行くのは厳しいので,⌘+Shift+G
を押して直接ディレクトリを指定しましょう.必要なのはlibAR
で始まるものです.OpenCV同様,全部入れちゃって良いと思います.
あとは適当にソースコード打ち込んでビルドして確認してみると良いと思います.
FMS生向けセクション
配布されたソースコード,Macじゃそのまま動かないです.「Macの人はこっち」というコメントが有るところはそちらに書き換える.また,166行目近辺にあるsetupCamera
関数はgultCreateWindow
の前に持ってこないと動かないようです.
最終チェック
これで大体使えるようになりました.ポイントは
- ARToolkit本体のビルド時はSDKを最新のものにする
- ARToolkit本体のビルド時はArchitectureを32bit(i386)にする
- ARToolkit本体のビルド時はOSX Deployment Targetを利用中のOSに指定する
- ARToolkitを使うときは必要なFrameworkを一緒に取り込む
- ARToolkitを使うときはARToolkitのライブラリも一緒に取り込む
という感じでしょうか.実はxcconfig
ファイルをうまく使って,これらの設定をファイル1つ読み込ませるだけでうまいことやっちゃう方法も試行錯誤中なのですが,まだ配布出来る状態ではないので次回予告ということで.これがうまくいくとProject Generatorとか作れるのかな?