2016年5月5日 星期四

week11_球追蹤_呂登祐

安裝KinectDeveloperToolkit-v1.8.0-Setup燃後開啟kinect的Toolkit測試順便存檔(.stl)

再來進入Meshlab的官網: https://sourceforge.net/projects/meshlab/files/meshlab/MeshLab%20v1.3.3/
載MeshLab_v133_64bit.exe程式,測試剛剛存的(.stl)檔案

足球範例小遊戲:

產生一顆球
import SimpleOpenNI.*;
SimpleOpenNI openni;
void setup(){
  size(640, 400);
  openni = new SimpleOpenNI(this);
  openni.enableRGB();
  openni.enableDepth();
  openni.enableUser();
}
void draw(){
  openni.update();
  image(openni.userImage(), 0, 0, 600, 400);
  for(int userId: openni.getUsers()){
  PVector pos = new PVector(0, 0, 0);
  float confidence = openni.getJointPositionSkeleton(userId, SimpleOpenNI.SKEL_HEAD, pos);
  ellipse(pos.x, pos.y, 50, 50);
  println(pos);
  }
}
void onNewUser(SimpleOpenNI openni, int userId){
  openni.startTrackingSkeleton(userId);
}


修正球的位置,原本上個程式碼是球會隨著使用者左右移動,但是上下方向的移動卻是顛倒,所以在另外設一個X方向Y方向的位置變數,另外去計算他的位置
import SimpleOpenNI.*;
SimpleOpenNI openni;
void setup(){
  size(600, 400);
  openni = new SimpleOpenNI(this);
  openni.enableRGB();
  openni.enableDepth();
  openni.enableUser();
}
float Xpos(PVector pos){
  return width/2 + pos.x*500/pos.z;
}
float Ypos(PVector pos){
  return height/2 - pos.y*500/pos.z;
}
void draw(){
  openni.update();
  image(openni.userImage(), 0, 0, 600, 400);
  for(int userId: openni.getUsers()){
  PVector pos = new PVector(0, 0, 0);
  float confidence = openni.getJointPositionSkeleton(userId, SimpleOpenNI.SKEL_HEAD, pos);
  ellipse(Xpos(pos), Ypos(pos), 50, 50);
  println(pos);
  }
}
void onNewUser(SimpleOpenNI openni, int userId){
  openni.startTrackingSkeleton(userId);
}



import SimpleOpenNI.*;
SimpleOpenNI openni;
void setup(){
  size(600, 400);
  openni = new SimpleOpenNI(this);
  openni.enableRGB();
  openni.enableDepth();
  openni.enableUser();
}
float Xpos(PVector pos){
  return width/2 + pos.x*500/pos.z;
}
float Ypos(PVector pos){
  return height/2 - pos.y*500/pos.z;
}
void draw(){
  openni.update();
  image(openni.userImage(), 0, 0, 600, 400);
  for(int userId: openni.getUsers()){
  PVector pos = new PVector(0, 0, 0), pos1 = new PVector(0, 0, 0), pos2 = new PVector(0, 0, 0);
  float confidence;
    confidence = openni.getJointPositionSkeleton(userId, SimpleOpenNI.SKEL_HEAD, pos);
      ellipse(Xpos(pos), Ypos(pos), 50, 50);
    confidence = openni.getJointPositionSkeleton(userId, SimpleOpenNI.SKEL_LEFT_FOOT, pos1);
      ellipse(Xpos(pos1), Ypos(pos1), 50, 50);
      print("Foot: " + confidence);
    confidence = openni.getJointPositionSkeleton(userId, SimpleOpenNI.SKEL_RIGHT_FOOT, pos2);
      ellipse(Xpos(pos2), Ypos(pos2), 50, 50);
      println(abs(pos1.y-pos2.y));
    if(confidence > 0.6 && abs(pos1.y-pos2.y)>100){
      fill(255, 0, 0, 128);
      rect(0, 0, 600, 400);
    }
  //ellipse(pos.x, pos.y, 50, 50);
  println(pos);
  }
}
void onNewUser(SimpleOpenNI openni, int userId){
  openni.startTrackingSkeleton(userId);
}

沒有留言:

張貼留言