仕事で実際に使用したofxOpenNI Tipsin work

 
date:2012.09.19   posted by:mizutani
 


9月にBMING LIFE STOREに設置するkinectアプリを作りました。プログラムの作業をデザイニウムで担当しています。これはディスプレイの前で何かポーズをとるとそのポーズに合った吹き出しなどが出現し写真がとれるアプリになります。技術的にはOpenNI+openframeworksを使用して作成し、今回はそのアプリで使用したTipsをofxOpenNIを中心に紹介していきます!ちなみにofxOpenNIはgameoverhack/ofxOpenNIを使用しています。

 

[1] RGBカメラの取得解像度を上げる方法
デフォの設定では640×480になっています。これをofxOpenNIで取得できる最大の解像度1280×1024にするにはofxOpenNI/src/ofxImageGenerator.cppの以下のコードを変更することにより解像度を上げられます。(※1280×1024ではFPSが15になります。)

map_mode.nXRes = XN_VGA_X_RES;
map_mode.nYRes = XN_VGA_Y_RES;
map_mode.nFPS = 30;

map_mode.nXRes = XN_SXGA_X_RES;
map_mode.nYRes = XN_SXGA_Y_RES;
map_mode.nFPS = 15;

[2] スケルトン各部位の座標取得方法
スケルトンの座標取得はこちらのサイトで説明されています。スケルトンを使い始めの頃は部位の名前がどの部分になるのかわからず、ひとつひとつ調べるのが面倒だったので一覧を載せておきます。

[3] スケルトンが外れたのにスケルトントラッキングが取得される
Tipsというより仕様の話ですが、kinectの範囲外にプレイヤーが出たのにスケルトンがしばらく残っている場合が多々あります。

すぐに消えてもらえれば問題無いですが、残り続けてしまうため今回のアプリでは対策として5frameごとにスケルトンの動きをチェックし、前と同じ位置に各部位があった場合そのスケルトンを無効として扱いました。基本的に人が動かなくても正常にスケルトンを取得しているときはブレ(ノイズ)が必ず出ますが、残ってしまっているスケルトンは全く動きません。

[4] ポーズの認識について
ポーズは各部位がどの方向を向いているのか図1のようにエリアを分けて判断しました。例えば図1で青のラインのように基準点より右上に伸びている場合、0という判断になります。この方法で図2のようにアプリで使用する10種類のポーズを分けています。

 

[5] ユーザトラッキング数/スケルトントラッキング数を増やしたい場合
今回のアプリではあまり関係ありませんが、トラッキング数はデフォで8人になっています。この数を増やすにはofxOpenNI/src/ofxUserGenerator.hの以下のコードを変更します。(※最大は15人となっています。)

#define MAX_NUMBER_USERS 8

#define MAX_NUMBER_USERS 15

[6] ofxHttpUtilsで画像をアップロードできない場合の対処
サーバの設定によってofxHttpUtilsで画像をアップロードできない場合があるようです。今回のアプリの場合できない方になってしまいました。対処方法としてはcurlを使用してレスポンスはresponse.xmlに保存してそれをopenframeworksで読み込むという非常にまどろっこしいやり方になりました。コードとしては以下のような感じです。

system(“curl -F file=@../../../data/*****.png http://*****.com/upload.php > ../../../data/response.xml”);

solar panels for home
 
Copyright © TheDesignium inc. powered by WordPress & mootools.
Relative Keyword|none