0

Kinect に特定の範囲内のオブジェクトのみを認識させる方法を見つける必要があります。問題は、私たちのセットアップでは、追跡を妨害する可能性のあるシーンの周りに視聴者がいるということです. したがって、キネクトを数メートルの範囲に設定して、その範囲を超えるオブジェクトによって邪魔されないようにする必要があります。処理には SimpleOpenNI ライブラリを使用しています。

何らかの方法でそのようなことを達成する可能性はありますか?

事前にどうもありがとうございました。

マッテオ

4

1 に答える 1

1

スケルトンを検出せずにユーザーのax、y、z位置を取得するユーザーの重心(CoM)を取得できます。

OpenNIユーザーCoM

z位置に基づいて、範囲/しきい値に基本的なifステートメントを使用できるはずです。

import SimpleOpenNI.*;

SimpleOpenNI context;//OpenNI context
PVector pos = new PVector();//this will store the position of the user
ArrayList<Integer> users = new ArrayList<Integer>();//this will keep track of the most recent user added
float minZ = 1000;
float maxZ = 1700;

void setup(){
  size(640,480);
  context = new SimpleOpenNI(this);//initialize
  context.enableScene();//enable features we want to use
  context.enableUser(SimpleOpenNI.SKEL_PROFILE_NONE);//enable user events, but no skeleton tracking, needed for the CoM functionality
}
void draw(){
  context.update();//update openni
  image(context.sceneImage(),0,0);
  if(users.size() > 0){//if we have at least a user
    for(int user : users){//loop through each one and process
      context.getCoM(user,pos);//store that user's position
      println("user " + user + " is at: " + pos);//print it in the console
      if(pos.z > minZ && pos.z < maxZ){//if the user is within a certain range
        //do something cool 
      }
    }
  }
}
//OpenNI basic user events
void onNewUser(int userId){
  println("detected" + userId);
  users.add(userId);
}
void onLostUser(int userId){
  println("lost: " + userId);
  users.remove(userId);
}

私が投稿したこれらのワークショップノートで、より多くの説明とうまくいけば役立つヒントを見つけることができます。

于 2012-12-08T00:13:38.897 に答える