半空洞男女関係

思ったこととかプログラミングしてるときのメモとか色々かいてます。メールはidそのままgmail

HomebrewでARToolkit2を使う #FMSCV

本記事はNCC Advent Calendar 2015*1の10日目の記事です.昨日は @Magic_Gancelot の,RubyでTweetをChatworkに流す - めもりすずこ でした。

私の通っている大学ではコンピュータビジョンという授業がありまして,簡単に言うとOpenCVなどその周辺技術で画像処理技術を学びましょうというものなのですが,今日はOpenGLARToolkitにチャレンジというものでした.

OpenGLGLUTそのものはMac OSXがデフォルトでサポート*2しているのでなんてことないのですが,ARToolkitはビルドしないとなりません.ARToolKit2系となるとかなり古いプロジェクトですから,色々と時代が移り変わり,ビルドするだけでもSDKが無いだの調整しなければならないことも増えてきます.今回はそうしたあれこれをなんとかしてみたよ,さらにHomebrewで使えるようにしたよという記事です.(長い前置き)

追記: と,頑張ってみたものの,Buildはできるが,ソフトウェアが正しく動いてくれない状態.arDetectMarkerあたりでBAD_ACCESSになります.調査中.

追記2(12/10 4:20): id:kougaku-navi 先生から原因を教えてもらいました.ラベリングのためのバッファサイズが十分に大きくないのが原因とのことでした.Homebrew版は修正済み.

結局何が問題だったの?

Mac OSX SDKのバージョンが古いものを指定したのが原因でした.Base SDKを新しい物にすれば解決します. また,利用する際は適切なFrameworkを指定することが必要です.ARToolkitQuickTimeの機能や,Mac OS XGUIのライブラリ群であるCocoaやCarbonの機能を利用しているので,利用する際にはそれらも一緒にBuildする必要があるのは注意事項です. また,追記にも書きましたが,ラベリングのための配列のバッファサイズが十分に大きくないことも「ビルドは出来るのにBAD_ACCESS」の原因でした.

具体的な解決方法(ARToolkit build編)

  1. 左のサイドバーからプロジェクトファイルARToolKitをクリック.
  2. 画面中央左にあるPROJECTから ARToolKit を選択.
  3. 上記タブからBuild Settingsをクリック.眺めてみるとBase SDKがおかしいようです. gyazo.com
  4. Base SDKの値をLatest OSX(10.11) とします.
  5. Architecturesの値を32-bit Intel(i386)とします.でもこれだけでは10.10で利用することができません.
  6. OSX Deployment TargetOS X 10.10とします.下の方にあるので,見つからない場合は画面中央右上の検索ボックスで検索.(10.9などを使用している際はそれらに従うと良いです.)
  7. 左のサイドバーをARToolKit > lib > SRC > AR とたどっていきarLabeling.cをクリック.
  8. 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で設定していた人はこれを利用できます.

github.com

$ brew taps mactkg/fmscv
$ brew install artoolkit2

/usr/local/includeにヘッダーファイルが,/usr/local/libにライブラリファイルがインストールされますので,適宜指定してください.プロジェクトのターゲットを選択して,Header Search PathsLibrary Search Pathsにそれぞれ適当なディレクトリを指定すればよいです.

具体的な解決方法(ARToolkit 使用編)

ちょっとつかれたので手順に分けて書くのはやめにします.ここからは,自作するアプリケーションでどうやってARToolkitを使うかを説明.この部分は配布資料にあるけど「HomebrewでARToolkit」という検索ワードで来た人のために.

Build PhasesにあるLink Binary With Librariesに,上記で上げた5つのフレームワークを追加します.デフォルトのフレームワークなので,上の検索欄に打ち込めばすぐ出てきますよ.

ARToolkitのライブラリも追加しましょう.これはデフォルトではないので,自分で追加します.ARToolkitを自分でBuildした人は,ARToolkitのプロジェクトと同じディレクトリにあるlibディレクトリに入ってます.Homebrewを使った人は,/usr/local/libを見に行きます./usr/localGUIで行くのは厳しいので,⌘+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のライブラリも一緒に取り込む
    • XCodeでBuildしたならARToolkitのディレクトリにあるlibディレクトリの中
    • Homebrewで入れたなら/usr/local/libの中
    • libARで始まるものを使う

という感じでしょうか.実はxcconfigファイルをうまく使って,これらの設定をファイル1つ読み込ませるだけでうまいことやっちゃう方法も試行錯誤中なのですが,まだ配布出来る状態ではないので次回予告ということで.これがうまくいくとProject Generatorとか作れるのかな?

*1:これホストする仕組み結構良く出来てます.ソースコードはここ .https://github.com/3846masa/simpleAdventCalendar

*2:とはいえ10.9でdeprecatedで,あとはGLFWに移行しなさいということです.ARToolkit2系はGLUTに依存しているので近くはないものの遠い将来苦労したりするのでしょうか...

*3:指定する値がちょっとギリギリっぽい気もする