Kinect + OpenNI & Flash(AIR2.0)でモーションをトラッキング


Kinect + OpenNI + Flash(AIR2.0)で一応いろんな関節のトラッキングができるようになりました。

ホネホネバージョン

PV3Dと組み合わせてみました

今回は前回に引き続き、KinectからOpenNI経由で関節の座標情報を取得しFlashで簡単なグラフィックをレンダリングさせたのですが、これを実現するためには毎フレームごとに座標データの取得・解析を行う必要がありました。

ちなみにこれが送信されてくるデータ1フレーム分。

0,1,add,584.744,92.511,1544.512
0,2,add,560.321,166.503,1593.675
0,3,add,537.526,239.405,1641.854
0,6,add,568.893,169.380,1451.725
0,12,add,553.151,164.097,1735.625
0,17,update,518.658,318.146,1595.655
0,18,update,567.596,426.363,1720.099
0,20,update,424.192,414.788,1850.328
0,21,update,515.457,300.491,1782.915
0,22,update,493.693,440.226,1658.483

これが1秒間に30回も送られてくるとなるとかなりげんなりしますが、以下の関数で処理したらあっさりと多元配列化できたのであとは取得した座標を使ってもじゃもじゃしたというところです。

private function dataToArray(data:String):Array{
	var list:Array = ["","","","","","","","","","","","","","","","","","","","","","","",""]
	var vars:Array = data.split("\n");
	for(var i:int=0; i<vars.length; i++){
		var props:Array = vars[i].split(",");
		list[int(props[1])-1] = props;
	}
	return list;
}

ただ、未だにC++をよく分かっていないのでいろんなところがまだ怪しさ満点です。
今後はC++をきちんと学びながら進めていきたいと思っています。


Kinect + OpenNI & Flash(AIR2.0)でモーションをトラッキング” に対して6件のコメントがあります。

  1. hikaru より:

    もしよろしかったらどのようにSample-NiUserTrackerを改良したのかソースを見せて頂く事は可能でしょうか?
    またNativeProcessを利用してSample-NiUserTrackerを立ち上げるにはどのようにしたら良いのかも教えて頂けると助かります。
    このようにすれば良いのでしょうか?

    #!/bin/sh
    cd /OpenNI-Bin-MacOSX-v1.0.0.25/Samples/Bin/Release/
    ./Sample-NiUserTracker

    ご検討いただければ幸いです。

    1. Yoshida@DigiFie より:

      コメントありがとうございます。
      これらのデモで使用したソースは準備が出来次第公開しますのでしばしお待ちを。
      ただ1月末の福岡てら子での発表に間に合わせるために書き殴ったコードで、しかも僕自身がC++をよく理解していないため参考になるかどうかは微妙ですが・・・w
      また、AIRのNativeProcessからUserTrackerを立ち上げる手順は、NativeProcessStartupInfoで起動用のshellコマンドを叩いて起動させています。

      ちなみに起動用のshellスクリプトはこんな感じです。
      #!/bin/sh
      cd /”OpenNI一式を配置しているディレクトリ”/OpenNI-Bin-MacOSX-v1.0.0.25/Samples/Bin/Release/
      ./UserTrackerTest

      1. hikaru より:

        ありがとうございます!
        ひとまず、Sample-NiUserTrackerからデータを取る事ができました。
        たすかりました。
        今後もがんばってください。

  2. naoki より:

    C言語については大学で少し学んだだけの初心者の者です.

    現在私は卒業した身でありますが,博士号を取得中の先輩がKinectを使った研究に着手しているため,その力になりたくKinect及びOpenNIやNITEについて調べているところです.

    極めて初歩的な質問になってしまうかもしれませんが,OpenNI同梱のサンプル「NiUserTracker」の内容を変更してX,Y,Zの位置情報を取得し数値で出力させようと試みているのですがうまくいきません.
    VisualStudio2010Express,2008Expressで編集しようとしています.
    アクセス制限は変更しました.
    2008で「NiUserTracker_2008.vcprj」を編集し内部の「main.cpp」を開こうとするとエラーが出てしまいます.
    どのように編集を始めたらいいのか,恐縮ではありますがご教授頂けないでしょうか.

    宜しくお願いします.

    1. Yoshida@DigiFie より:

      コメントありがとうございます。
      僕の開発環境はMacで、さらにC++はほとんど素人同然ですので参考にならない部分も多いかもしれませんが・・・

      まずXYZ座標の出力についてですが、今回の場合は表示側はFlash(ActionScript)で作っているため、OpenNIから取得する値は毎フレームごと座標値および状態を示す値だけですのでC++の標準出力で出力しました。

      また、サンプルのNiUserTrackerでは座標の取得はSceneDrawer.cppのほうで行っていますので、こちらで取得した座標情報を取得できるように改変した方がよいと思われます。

      あまり参考にならない感じの返答で申し訳ありません。

      1. naoki より:

        ご回答ありがとうございます。

        そしてお返事遅くなってすいませんでした

        おっしゃる通り見るべきところが違っていたようです。
        プログラムの改編もできました。

        ただ出力できた座標値をうまく変換できていませんが・・・
        もう少し頑張ってみます。

        本当にありがとうございました。

        これからもがんばってください。

コメントは受け付けていません。