読者です 読者をやめる 読者になる 読者になる

元派遣プログラマの自称技術系ブログです。雑記とか自作のオープンソースプロジェクトの話とか。
Javaとか組込とかできます。お仕事ください。

Alchemy版 FLARToolKit

2週間程前から、AdobeさんのAlchemy(C++とかのコードをAVM上で動かすフレームワーク)を使ってFLARToolKitを高速化できないか研究をしていたわけですが、やっと動いたので公開します。

モノとしては、NyARToolKitCPP(NyARToolKitのC++版)をAlchemyでコンパイルして作ったswcファイルを、ActionScriptからFLARToolKitと同じように使うためのものです。AlchemyとピュアなFlashを行き来するので、若干変なクセがありますが、まあ普通に使えるかな。速度的には予想より1桁早かった。

サンプル実行ファイル

http://nyatla.jp/tmp/aM_flar/SimpleCube.swf

※64bit版XPのFirefoxでカメラを接続しないと、ブラウザが即死する不具合があるようです。AlchemyMasterのバグではないと思うんだけども・・・。

ソースコード(Alchemy版 FLARToolKit)

Spark projectのFLARToolKit/blanches/nyatlaにあります。コンパイル済みのnyratoolkit.swcと、NyARToolKitCPP内にあるActionScript3に必要なコードは全部入ってるので、Alchemy本体をいじらないならこれだけでOK。

http://www.libspark.org/browser/as3/FLARToolKit/branches/nyatla


ソースコード(NyARToolKitCPP)

NyARToolKitCPPの一部なので、sorceforge.jpにあります。Alchemy本体のコードとか、AlchemyMasterのソースコード類はこっち。

http://sourceforge.jp/projects/nyartoolkit/svn/view/NyARToolkitCPP/?root=nyartoolkit


FlashDeveloperからのコンパイルの手順

ちょっと面倒ですが、FLARToolKitを使ったことがあればできると思います。

Default projectを作って、FLARToolKit内の以下のパスをsource-pathへ追加してください。

  1. nyatla\src
  2. nyatla\sample
  3. nyatla\extlib\NyARToolkitCPP\forAlchemy\AlchemyMaster\as3
  4. nyatla\extlib\NyARToolkitCPP\forAlchemy\NyARToolkitAS3\src\as3

あとコレも忘れずに。

  1. Papervision3D_2.0.883

次に、Library pathに、nyartoolkit.swcを追加します。

  1. nyatla\extlib\NyARToolkitCPP\forAlchemy\NyARToolkitAS3\lib\nyartoolkit.swc

コンパイルの設定はこれでOK。もしFlex3でコンパイルするなら、同じように設定してあげてください。

エントリポイントは、nyatla\sample\jp\nyatla\example\aM_flar\SimpleCube.asにありますので、ここにAlways compileのチェックを入れて、実行してみてください。

いいわけ

基盤にしたNyARToolKitCPPのバージョンが2.0.0相当と古く、またFLARToolKitの拡張部分を全然実装してないので、現行のFLARToolKit(2.2.0相当)と比較すると、機能的にはかなり劣ります。まあ、速度的には文句ないんですが。機能拡張をするとすれば、NyARToolKitCPPを2.3.0ベースにしたあとかな。と思ったり。

あともしかしたらバグが・・・あるかも。

AlchemyMasterについて

今回のプロジェクト向けに作ったツールキットです。C++のクラスライブラリを、Alchemyを中継してActionScript3側で自然に表現することができます。まあコードよりもノウハウがほとんどなんですが…。普通にAlchemyを使うと、コードが増えたり処理速度がおちたりしがちですが、AlchemyMasterのテンプレートに沿ってAPIを定義すると、(処理量的にもコード量的にも)低コストで錬金できます。

中身はC++のProxyを構築するテンプレートクラス類と、/ActinScript側でStubを実装するためのベースクラス等です。Alchemy版 FLARToolKitでは、このツールキットを経由してNyARToolKitCPPのコード(C++)とActionScript3のコードを接続しています。


#もしリクエストがあれば、アーキテクチャとかは書こうかなとか。


ライセンスはLGPLv3/FLARToolKitバインドライセンスの二種類です。FLARToolKitの商用版ライセンスをご利用の方は、FLARToolKitバインドライセンス(FLARToolKitと一緒に使う限り、FLARToolKitの一部として使用可能)をご利用ください。

参考

色々参考にしたページのご紹介。
ありがとうございます。

FLARToolKitについてはこちら

  1. SparkProject: http://www.libspark.org/wiki/saqoosha/FLARToolKit
  2. タロタローグ: http://blog.tarotaro.org/

Alchemyについてはこちら

  1. AdobeさんのAlchemyのページ: http://labs.adobe.com/wiki/index.php/Alchemy:Documentation:Developing_with_Alchemy:C_API
  2. てっく煮ぶろぐさん: http://d.hatena.ne.jp/nitoyon/

追記

パフォーマンスについては、C++版をそのまま動かすよりも、約6倍遅く動作します。家にあるPCで動かした時はこんな感じ。


NyARToolKitのリファレンス処理(RawTest)でQVGA画像を1度処理するのにかかる時間

C++ 1.5ms
Java 1.9ms
Alchemy 6ms