Saqoosha

  1. About
  2. Archives
  3. Search
  4. Say
Language:

キミも覚悟を示せ。

20090525-Jfaflar

海外では FLARToolKit の商用案件がぞくぞくと出てきていて、うちにもそいうい話はいっぱいくるのになかなか実現しなかったのね。まあ、でも、よーやく、僕も、FLARToolKit でお仕事できましたよっと。

adidas のサッカー日本代表を応援するコンテンツ。「adidas×サッカー日本代表

2009052502-Kamo-1の、Web サイトの中、、、じゃなくって、店頭イベントで FLARToolKit が使われてます。ケータイサイトで応援メッセージを投稿すると日本代表のエンブレムに描かれている 3 本足の烏がデザインされたマーカー壁紙がゲットできて、それを店頭に設置してあるモニターにかざすとみんなの投稿したメッセージがそのマーカーから飛び出してくるって仕組み。長い。こんなん→

ケータイのマーカー認識はなかなか大変だわ。ちっちゃいし暗いし。まあ、なんとか使えるレベルまでにはしたつもり。このへんの改良はそのうちコミットします。そのうち。

ほんとはこういうのって、本家の ARToolKit 使って C 言語でガリガリ書いたほうが認識精度も動作速度もいいと思うんだけど、演出面に凝るとかネットワークを使うとかになってくると開発期間も長くなってコストもかかっちゃう。できる人もすごく限られる。その点、Flash なら割と簡単にできるから使ってもらえる機会も多いというわけですな。このプロジェクトもそんな感じ。(Java 版とか Processing 版はちょうどその間ぐらいの感じかな。)

あー、そうそう、BetweenAS3 も使ったよ! Bezier な動きも欲しかったから Tweener 併用だけどw

つーわけで、このイベント、まずは大阪の茶屋町、サッカーショップ加茂で体験できます。その他、澁谷、新宿など、5 ヶ所で 1 ヶ月ほどやってますので、お近くの方はサッカー日本代表を応援しがてら、体験しに行ってくれたらいいんじゃないかなー。詳しくはこつら。

追記:広告会議の中の人の体験レポート
追記:5/27 と 5/31 の日本代表戦でもやりますよ!
追記:5/31 の国立競技場イベントに某 Flasher たちも遊びに来てくれたよ!

スーパー高速に射影変換するには

昨日のてら子で質問にあった射影変換の高速化。気になったのでやってみましたよ。射影変換 (Homography) てのは↓こういうのを言います。

2009052501-Homography

左のようなパースのついた画像から、真っ正面むいてる絵を取り出すのに使ったりするですね。まーったく理論とかわかってなかったのでいろいろググって探してみたところ、AS3 で書いてる人がいたのでこれをベースにやってみました。OpenCV のソースみてるとかなり複雑そうだったのにこれはすごくシンプル。意外と簡単。

高速化の方法としては 2 つ。1 つは、Pixel Bender を使う方法。もう 1 つは DisplacementMapFilter を使う方法。両方書いてみた。で、処理速度を計測してみた結果。

––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
.TestSuite (20 iterations)
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
method...................................................ttl ms...avg ms
Test1_setPixel                                             6594   329.70
Test2a_PixelBender                                          155     7.75
Test2b_PixelBender_Smoothed                                 187     9.35
Test3_DisplacementMap                                        87     4.35
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––

それぞれの方法で 20 回処理した時間が ttl ms。avg ms は 1 回あたりの平均処理時間。Test1_setPixel てのが元のコード。329.7ms。これじゃリアルタイムには使えない。Test2a_PixelBender が Pixel Bender 版。40 倍高速。さすが。Test2b_PixelBender_Smoothed これも Pixel Bender なんだけど、sampleNearest じゃなくって sampleLinear で色を取ってきてるので画質的には一番きれい。で、最速、Test3_DisplacementMap。DisplacementMapFilter 版。(あー、ちなみにこのベンチマークテストは gSkinner の PerformanceTest クラスを使わせてもらってます。便利。)

まあ数字だけ見ると DisplacementMapFilter が一番かなっと思うのだけど、画質がけっこうアレでして。このサンプルで一番歪みが激しい左上のを比較してみるとよくわかる。

20090525-Homography2

というわけで、速度的には、DisplacementMapFilter が一番速いけど画質も考慮すると Pixel Bender (sampleNearest) がベストですかね、っと。

ソースはこちら。

追記:Test3_DisplacementMap には DisplacementMap 用の画像を生成する時間が含まれてないので、対象となる四角形がグリグリ変わるのなら Pixel Bender のが断然高速。って、あー、そっか、Displace map を Pixel Bender で作ればいいのか。

GE の AR のん作った人に会った

今日は仕事を早めに切り上げてとある人物に会いにいきました。FLARToolKit 初の商用案件、GE | Plug Into the Smart Grid の Augmented Reality コンテンツ部分の Flash を担当した、Mikael Emtinger がわざわざ僕に会いにスウェーデンから、、、じゃなくって親友が日本人と結婚したらしくその結婚式に出席するとかで、近くなら会おうてな感じでメールをもらいまして。こんな機会めったにないのでログっとく。

・・・

待ち合わせ、Mikael の顔しらんねんけど、、、 / nerdy な男がキョロキョロ。Saqoosha? 声かけられる。見つけた。 / 英語モードスタート。緊張する。 / 15 階スカイラウンジへまいりまーす。 / とりあえずお土産の日本のお菓子セットをあげる。 / 東京で mariroom とか fladdict とか yossy とかと会ってたらしい。てか僕が紹介したんだけど。 / Sweden にはいい感じの Adobe とのコネクションがないので mariroom に出会えてよかったと。 / Spark project はソースコードのありかが分かりづらいと文句言われるw / まあでもとてもいいコミュニティだよね。 / BetweenAS3 いいよってすすめといた。 / Mikael は英語でいうところの Michael、マイコー。 / Swedish な名前はムズイのが多いらしい。 / スウェーデン語は世界一難しいらしい。 / スウェーデンは小学校のころから英語勉強してるからみんなほとんどの人が英語しゃべれるって。うらやましか。 / まあ日本も結構長い間勉強するんだけどな、、 / Flash 歴は 3 年ぐらい。 / 17 歳の時にゲーム会社立ち上げたけど 100 人ぐらいのでっかい会社になっちゃったから辞めたってw / 今はフリーランス。GE のは North Kingdom から受けた仕事なんだけど、びっくりなことにこれまで一度も North Kingdom の人と会ったことないらしい。 / Mikael ん家から North Kingdom までは電車で 8 時間。。。 / GE のは制作期間だいたい 3 週間。短っ! / 3D モデルは North Kingdom、Flash が Mikael、サウンドは Mikael の友達。 / いろんなことができる友達がたくさんいるので案件に応じて組み合わせてやってる。 / OpenCV とか ARToolKitPlus 使ったようなのもやってみたり。 / Papervision3D は複雑すぎてダメとかいって自分で 3D エンジン作ってた。ROXIK みたい。 / Absolut Machines やったときは Flash Media Server がクソすぎて困ったらしいw / 毎日 FMS を再起動させるためのスクリプトを書いたとか。 / 英語さえできれば離れてても大丈夫だからおめーもできるよとか言われたw / 別荘つぶして新しい家作ってるらしい。写真みたけどすげえいい場所。 / 来年 4 月にはゲストルームもできるから来ていいよって。

・・・

だんだんどうでもいい話になってきたのでこのへんで。2 時間ずっと英語はどうなることやらと思ってたけど、まあなんとかなったっぽい。ゆってることは分かる。しゃべれないけど。つーかもー、海外から僕を訪ねてくるってのがもー、エキサイティングですよね。がんばろ。

英語でブログを書く

ここんところ Flash 界では英語が流行っているようで。FITC の影響かしらね。ぼくは FLARToolKit がヒットしてから海外からの問い合わせが急激に増えたのでちょこちょこ英語で書いたりしてたわけですけれども。まあそんなこんなで、日本人 Flasher が海外に向けて英語でアピールするブログっていうのができた。

JActionScripters.com

Twitter で追っかけてた人はだいたい知ってると思うけど、fladdict がいいだしっぺ。日本人も世界で戦える実力あるよってのをアピールする場。まあもちろん英語じゃないと世界には伝えられないので英語で書くのは必須。いまんとこ 20 人ぐらい? ネットで目立ってる人はだいたい参加してるんじゃないかな。しかも英語添削してくれる人までいる。心強い。

つーわけで、いままで以上に英語を書くシチュエーションができたわけですが、ここで僕が英語で書く時に使ってるツールを紹介。もっといいのがあったら教えてください。

英辞郎 + 英辞郎ビューア
辞書はこれでいいと思う。検索めっちゃ速いし語数めっちゃ多いし。Firefox 連携便利だし。(使ってないけど)

英辞郎 on the WEB
こっちもたまに使う。あんまし↑と違いはない。

Google translate
Yahoo 翻訳
日本語で書いて英語にしてみたり、書いた英語を日本語にして確かめたり。

Cross Translation
JAS-ml で知った素敵翻訳サイト。いろんな翻訳サイトを比較できる。これからはこっち使おうー。

英文校正サイト [NativeChecker]
これめっちゃ便利。from? with? どっち?みたいなときに使う。

英語例文検索 EReK
NativeChecker を知る前はこっちつかってた。edu ドメインだけ検索とかできるのでたまに使う。

あとはー、書いてみた英辞をそのまま Google に投げてみてよく使われてる表現かどうか調べたり。ああそう、最近は使ってないんだけど添削サービスも使ってみたりしてた。やっぱ書きっぱなしじゃなくってちゃんと正してもらうの大事。

Twitter の自分の英語 tweet を全部添削して reply してくれるサービス誰か作ってくださーい。

BetweenAS3Thread

package net.saqoosha.thread {
 
    import org.libspark.betweenas3.tweens.ITween;
    import org.libspark.thread.IMonitor;
    import org.libspark.thread.Monitor;
    import org.libspark.thread.Thread;
 
    public class BetweenAS3Thread extends Thread {
 
        private var _tween:ITween;
        private var _monitor:IMonitor;
 
        public function BetweenAS3Thread(target:ITween) {
            _tween = target;
            _monitor = new Monitor();
        }
 
        public function cancel():void {
            interrupt();
        }
 
        override protected function run():void {
            _monitor.wait();
            interrupted(interruptedHandler);
            _tween.onComplete = _monitor.notifyAll;
            _tween.play();
        }
 
        private function interruptedHandler():void {
            if (_tween.isPlaying) {
                _tween.stop();
            }
        }
    }
}

Very simple.