ページ

ラベル openFrameworks の投稿を表示しています。 すべての投稿を表示
ラベル openFrameworks の投稿を表示しています。 すべての投稿を表示

2015年11月10日火曜日

ofxNI2の使い方

昔のメモをとりあえず、こちらに。
xtionをoFで使うのであれば、今だとこちらaddonが簡単だと思うので導入メモを残す。
https://github.com/satoruhiga/ofxNI2

1. ofxNI2をダウンロードしてoFのaddOnsフォルダにコピー。普通のアドオンと一緒。
2. openNI2のドライバがアドオンに同梱されているのでそれらを実行時に読み込まれる場所にコピーするシェルを設定する。
2-1. プロジェクトの画面(?)のTARGETSを開いて、Build Phasesを選択。
2-2. 左上の+ボタンを押して(意外とわかりづらい)「New Run Script Phase」を選択する。それで Run ScriptgScriptが追加される筈。
2-3. ofxNI2のreadmeにあるRun Scriptをコピペ。

2.の手順は文章だけだとわかりづらいのでスクリーンショットも。



それにしてもxtion、中古の値段がひどい・・・

2014年3月14日金曜日

デジタル・マーブリング





本当はSICFというイベントで発表できたら、と考えていたのですが、
あえなく落選してしまい、発表場所もなくなったのでブログに公開します。

最初の構想の元になっていたのは
マーブリングという水の上に絵の具を落としていく技法です。
子供の頃に水の上の絵の具を流して遊んだことがある人は多いと思いますが、
あれです。

動画はトルコの職人さんによるもの。
見入ってしまいます。


で、これをPC上で再現したら面白いんじゃないかと思い、
まず考えたのが、水流を再現するにはどうしたら?
ということでした。

で、調べた結果、どうやら流体力学というものをPC上で
再現できれば、出来そうだということはなんとなくわかったのですが、
正直、数学・物理に疎いので理解できず・・・

幸い、流体シミュレーションを開発・公開されている方が
それなりにいて、今回の制作には以下のライブラリを参考にしました。
ソースコードから理解していくという作戦です。

Thomas Diewald
http://thomasdiewald.com/blog/?p=95


このライブラリはjavaで記述されていて、GPUを使うバージョンも
公開されていたのですが、ダウンロードして動作したのはCPUバージョンのみ。
CPUバージョンだからかパフォーマンスも正直、イマイチ。

今回はopenFrameworksを使うつもりでいたのと、
パフォーマンスを改善することを目的に
まずはライブラリをC++に移植するところから開発をスタート。

とりあえず、単純にjavaの文法をC++にするレベルの移植を終えて、
動かしたところ、パフォーマンスはそれほど変わらず・・・
マシンにインストールされているのはjava6なんですが、
java6、かなり速いです。

次にロジックを見直して不要そうな部分をどんどん省いていったんですが、
これも対して効果なし。

残る作戦はGPUを使った並列処理化しかない、
と思いはOpenCLでロジック部分を実装。
結果はかえって遅くなる始末。
さすがにこれにはヘコみました。

それでも納得できなかったので
いろいろと試した結果、GPUでの並列化でなく、
CPUでの並列化の方が速いことが判明。
やっと満足いくパフォーマンスを得ることができました。
たぶん、内部的にはCPUコアをフル活用しているんだと思っています。

GPUでの並列処理が遅い明確な理由は未だにわかってないのですが、
今回、プログラムでは2次元配列を多用しており、
GPU側のメモリへの転送速度がネックになっているんだと推測しています。

openCL慣れてくれば、かなり応用範囲の広い技術な気がしています。
今回はデータ並列(同じ処理を複数同時に行う)しかしてないんですが、
タスク並列(違う処理を同時に行う)でやれる部分もあったりしますし、
openGLとメモリ領域を共用して描画速度をもっと早めたりもできそうですし。
以前、作成したチューリングパターンなんかにも応用できそうです。

ちなみに今回の開発環境は以下のとおりです。
何かの参考になれば。

【Hardware】
PC : mac book pro(Late 2012 15-inch)
CPU : Intel Core i7 2.3GHz
GPU : NDIVIA GeForce GT650M

【Software】
OS : mac os x 10.8.5
openFrameworks : v0.8
OpenCL : 1.1

2013年9月4日水曜日

xtion demo(2)

ユーザートラッキングによるデモを追加しました。
今回はユーザーごとに取得できるピクセルデータを元に映像を生成しています。

この動画、quickTimeを使ってmacの画面を直接キャプチャしてるんですが、openFrameworksのofxQTVideoSaverっていうアドオン使って録画するのが普通っぽいですね。

2013年9月1日日曜日

xtion demo(1)

xtion + OpenNI2 + openFrameworks
による、ユーザートラッキングのデモプログラムを作って見ました。



動画ではわかりにくですが、手のひらに連動して光が動きます。

【書籍】OpenNI 3Dセンサープログラミング

8月30日に知って31日に購入。

OpenNIの日本語情報は限られているので、こういう本が出版されるのは、ありがたい。
mac + openFrameworks + xtionで趣味をプログラムをしているが、この本にはバッチリ、同じ環境での環境構築方法が載っているので、そっちを参照した方が良いと思う。

巻末にOpenNI2、NiTE2のリファレンスも載っている。
公式のプログラマーズガイドを見れば良いんだけど、英語が得意でない人間としては日本語でのリファレンスの方がやっぱり理解しやすいな、と思った。

ちなみにPrimeSense社のcarmineはこの本読んで初めて知った。

認識距離がcarmine1.09では0.35mってのは魅力的で心惹かれた。

2013年8月21日水曜日

mac + xtion + openFrameworks(3)

なんとかxtionでちょっとしたデモを動作させることができた。
以下、動作させた時のメモ。

【環境】

  • MacBookPro Retina, Mid 2012 + osx(10.7.4 / Lion)
  • Xtion Pro Live
  • OpenNI2.2(Beta) + NiTE2.2(Beta)
  • openFrameworks 0.8.0
【前提】
  • openFrameworksは動作していること
  • OpenNIとNiTEはダウンロード済みでサンプルデモが動作していること
【手順】


  1. openFrameworksのプロジェクトジェネレータで空のプロジェクトを作成。
  2. 新しいグループ、includeとlibsを作成
  3. 新しく作ったinculudeグループに${OpenNI2インストールディレクトリ}/Include以下の全ヘッダファイルをプロジェクトに追加。${NiTE2インストールディレクトリ}/include以下の全ヘッダファイルをプロジェクトに追加。
  4. 新しく作ったlibsグループに${OpenNI2インストールディレクトリ}/Redist以下の全ファイルを追加。${NiTE2インストールディレクトリ}/Redist以下の全ファイルをプロジェクトに追加。
  5. TARGETS -> Build Setting -> Search Paths -> Always Search User PathsをYesにする。
  6. TARGETS -> Build Phasesで Add Build Phase する。選択するのはAdd Copy Files。
  7. 追加したPhaseのDestinationを[ Executables ]にする。Subpathは空。ファイル一覧にOpenNI.ini,NiTE.ini,OpenNI2ディレクトリ,NiTE2ディレクトリを追加
  8. /usr/lib配下に${OpenNI2インストールディレクトリ}/Redist以下のダイナミックライブラリを全て移動。
  9. /usr/lib配下に${NiTE2インストールディレクトリ}/Redist以下のダイナミックライブラリを全て移動。
これでopenFrameworksからOpenNI2 SDKで用意されているAPIが叩けるようになった。

ただ手順の8〜9についてだけが実は今でも謎で、最初はCopy Filesにダイナミックライブラリとかも指定していたが、どうにも実行環境にコピーされないようで、実行する度に/usr/libにOpenNI2のライブラリがない、と怒られていた。

仕方なく/usr/libにライブラリを配置したら正しく動作した。
このやり方だと他の環境でOpenNI使った開発環境を作りたい時に上のような手順を踏まないといけないのがダサい。
個人的なopenFrameworksのaddonにしようと思っていたんで、うーん、って感じ。

一番の問題はxcodeへの理解不足なのは理解しているが。

2013年8月6日火曜日

mac + xtion + openFrameworks(2)

結局、ofxOpenNI2も実行すると、なぜかデバイスが見つからない、という意味合いのエラーメッセージが出て初期化処理で止まってしまった。

仕方がないので、それなりに情報が出回っているopenNI1.5とNITEの組み合わせで試してみようと思う。
とりあえず、OpenNI1.5のサンプルとNITEのサンプルは動作した。

2013年8月5日月曜日

mac + xtion + openFrameworks

今更ながら、kinect hackをやろうと思って始めたが、開発環境を構築する部分が難しい。
環境は以下のとおり。

mac osx(10.7 Lion)
xtion + openFrameworks 0.7.4 + OpenNI2

アドオンでofxOpenNIを使ってみたが、どうやらkinect専用らしく、openFrameworksからはうまく認識してくれない。
ターミナルからOpenNI2のサンプルは正常に動作しているんで何か方法はあるハズだが・・・

明日はofxOpenNI2を試してみよう。
ダメならもうアドオンは諦めてOpenNIをopenFrameworksから直叩きするしかない。