SSブログ

Magiquand (10.6+ Beta 0.9)公開 [OpenCV関係]

こないだの「魔法の杖」アプリをもう少しもっともらしい形にした。

ここからダウンロードできます。

FameTime/iSightカメラを持ったMacとOS X10.6以上で動作するように作ったつもりです。ぜひ動作状況、あるいは動作しなかった状況を教えて下さい。よろしくお願いします。

まえにもちょっと書いたけど、これは最終的には別のアプリの制御用として使いたい。それにはハードと外部ライブラリが絡むので自分のiMacでデバグできれば問題ない、ということにはならなくていろいろな組み合わせで確認しないといけない。そのために僕のアプリとしては珍しくベータ版を公開して試してもらうことにしている。

前回からの変更点は
  1. 10.6、10.7、10.8をサポートするためにカメラ入力をAV FoundationからQTKitに書き換え
  2. 鏡像表示に変更
  3. アプリサイズが30GB超えから5GBに
  4. パーティクルのパラメータの一部が変更可能に
である。

QTKit Capture

AV Foudationを使うとOS X 10.6では動作しないのでわざわざレガシーなQTKit Captureを使うように書き換えた。APIは良く似ているけど、QTKitは次の10.9ではDeprecatedになる予定で、おそらくもう全然メンテナンスされていない。しかしなるべくたくさんのハードで確認したかったので、今でもまだ使っている人が大勢いるはず(Macユーザとしては、と言う意味で)の10.6をサポートしたかった。正式バージョンは10.6用と10.7以上用のふたつにするつもり。

鏡像表示

おそらく鏡を見るように表示する方がおもちゃとしては親切だろうと思ったけど、QTKit CaptureではAV Foundationにくらべると簡単ではない。とりあえずPreview用のCALayerのレベルで左右反転するようにした。これもQTKit Captureの動作が思った通りでなかったりしてずいぶん苦労した。

アプリサイズの縮小

これに一番時間を費やしてしまった。前回はOpenCVをFrameworkにしたものをPrivate Frameworkとしてアプリバンドルに含めていた。それはXcodeでちょこっと設定をするだけで(Copy Build Phaseを追加してFrameworksディレクトリにOpenCVをコピーすればいい)できてしまう。しかしOpenCVのうち使っているのはLK法のOptical Flowの部分だけなのでOpenCVのほんの一部だけ。Frameworkではなく、unixスタイルのライブラリならいくつかに分割されていて、必要なものだけリンクすればいい。

ところがPrivate FrameworkにくらべてPrivate Libraryにするのはすごく難しい。アプリが立ち上がるときにダイナミックリンクライブラリをリンクするためにdyldという実行時リンカが先に立ち上がってシンボルを解決するんだけど、そいつにリンクのための情報を渡してやればいい。ところがunixスタイルで作ってしまって/usr/local/libなんかにインストールしたライブラリはそのままではPrivate Libraryにはできない。なぜかというとそれらのライブラリもほかのライブラリを参照している可能性があって、それがどこにあるかはライブラリとしてビルドした時点で決まってしまっている。それを全部解決して書き直す必要がある。

今回結局otoolinstall_name_toolというコマンドラインツールを使って、Xcodeが出力したバイナリをシコシコ手で編集した。しかもユーザがアプリをどこにインストールするかわからないので絶対パスが含まれないようにする必要がある。OS Xのdyldが専用に持っている@executable_pathや@loaderpathといった実行時に解決される変数を使ってライブラリのパスを表現する必要がある。めちゃめんどくさかった。しかしそのおかげで前回40GB近くあったアプリバンドルは5GBちょっとまで小さくなった。

パラメータ変更

アプリを立ち上げて"Window"メニューの"Show Property Panel"サブメニューを選ぶと、小さなパネルが開く。そこにあるスライダを動かすとパーティクルのパラメータが変更できる。これで見かけを変えることができる。いろいろいじって試してみてもらいたい。

パラメータの意味を説明するのは面倒なので雰囲気で理解して欲しい。具体的な意味はCore AnimationのCAEmitterLayerとCAEmitterCellのporpertyとほぼ一対一に対応しているのでリファレンスを参照してもらえばわかるはず。英語なので面倒だけど。

また、ウィンドウのサイズも変更してみてもらいたい。縦横比を保存するようにしたけど、サイズを変更するとおかしな動作をする可能性がある。

ベータバージョン

これはまだベータなので、まだ日本語リソースを作っていない。そのせいですごく不親切に見えるけど、動かすだけならそれほど難しくはないはず。

ぜひ、自分のMacにダウンロードして動かしてみてもらいたい。そしてその動作状況、あるいは動作しなかった状況を、その動作環境と込みで教えて欲しい。
  • Macの機種
  • OSのバージョン
  • 繋がっているカメラ(FaceTimeカメラ以外の場合)
  • 動作状況(動作しなかった、したけど縦横比がおかしい、全部が表示されない、後ろに髪の長い女が写る、などなど)
といったことをコメントあるいはメールしていただけるとありがたい。

とくにiSightカメラを持った古い機種や10.6、10.7を使っている人には強くお願いします。
nice!(0)  コメント(4)  トラックバック(0) 

nice! 0

コメント 4

jun hirabayashi

 手を動かしても、キラキラしないです…。映像Windowは表示されますが、カメラで撮影されている映像がそのまま出力されてるみたいです。@10.8.4, Macbook Air 2012
by jun hirabayashi (2013-09-23 07:08) 

decafish

コメントありがとうございます。
うう、なぜでしょう。動くのは僕のiMacだけでしょうか....

Propertyパネルを出してパラメータを変更したり、ウィンドウサイズを変えたりしてみてもらえませんでしょうか。
よろしくお願いします。
by decafish (2013-09-23 07:56) 

jun hirabayashi

 下記の2番目で動作しました。

1. Propertyパネルを出して各種変更→効果表示無し
2. Windowサイズ変更→効果表示される!

 これ以降は、アプリを起動し直しても(Windowサイズ変更とかしなくても)効果表示有、でした。何か、どこかに関連するデータが格納されてるんでしょうか…。

by jun hirabayashi (2013-09-23 20:26) 

decafish

試していただいてありがとうございます。
2回目以降は何もしないでも表示されたということでしょうか?う〜ん、一番解決が難しい状況の用です。
user defaultsなどの保存はしていないので、毎回同じ条件で立ち上がるはずなんですが....
by decafish (2013-09-23 20:45) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

献立09/22献立09/23 ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。