2013-02-07 67 views

回答

1

這個想法是跟蹤檢測到的用戶。

sceneImage()/sceneMap()函數可以方便地跟蹤用戶像素,但是我還希望啓用SKEL_PROFILE_NONE配置文件來跟蹤用戶。

這適用於返回一個整數的onNewUseronLostUser事件:該用戶的ID。此ID對於跟蹤總用戶或最近檢測到的用戶非常重要。 一旦你有了用戶的ID,你可以將其插入到其他SimpleOpenNI功能中,如getCoM(),它返回用戶的「質心」(它的身體中心的x,y,z位置)。

所以,你可以使用上面提到的用戶事件來更新用戶的內部列表:

import SimpleOpenNI.*; 

SimpleOpenNI context; 
ArrayList<Integer> users = new ArrayList<Integer>();//a list to keep track of users 

PVector pos = new PVector();//the position of the current user will be stored here 

void setup(){ 
    size(640,480); 
    context = new SimpleOpenNI(this); 
    context.enableDepth(); 
    context.enableScene(); 
    context.enableUser(SimpleOpenNI.SKEL_PROFILE_NONE);//enable basic user features like centre of mass(CoM) 
} 
void draw(){ 
    context.update(); 
    image(context.sceneImage(),0,0); 
    if(users.size() > 0){//if there are any users 
    for(int user : users){//for each user 
     context.getCoM(user,pos);//get the xyz pozition 
     text("user " + user + " is at: " + ((int)pos.x+","+(int)pos.y+","+(int)pos.z+",")+"\n",mouseX,mouseY);//and draw it on screen 
    } 
    } 
} 
void onNewUser(int userId){ 
    println("detected" + userId); 
    users.add(userId);//a new user was detected add the id to the list 
} 
void onLostUser(int userId){ 
    println("lost: " + userId); 
    //not 100% sure if users.remove(userId) will remove the element with value userId or the element at index userId 
    users.remove((Integer)userId);//user was lost, remove the id from the list 
} 

HTH