2016年5月5日 星期四

02160615_成庭萱_week11

期末作品:打老鼠
在影片0:53-1:58間



先下載KinectSDK 1.8 Developer Toolkit 1.8

再下載Meshlab

讀KinectFusion模型
選Kinect Fusion Explorer-D2D->Run

存成STL檔 匯入MeshLab裡



1.踢足球


import SimpleOpenNI.*;
SimpleOpenNI openni;
void setup(){
  size(600,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);
}

偵測到人的頭就會有球跑出來



2.偵測到左腳會有球

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_LEFT_FOOT, pos);
    ellipse(Xpos(pos), Ypos(pos), 50, 50);
    println(pos);
  }
}
void onNewUser(SimpleOpenNI openni, int userId) {
  openni.startTrackingSkeleton(userId);
}

把左腳抬高就會跑出球了



3.

偵測到 頭 左腳 右腳 會有球


踢腳畫面會變紅

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_LEFT_FOOT, pos1);
    ellipse(Xpos(pos1), Ypos(pos1), 50, 50);
    println("Foot: " +confidence);
    confidence = openni.getJointPositionSkeleton(
    userId, SimpleOpenNI.SKEL_HEAD, pos);
    ellipse(Xpos(pos), Ypos(pos), 50, 50);
    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);
    }
  }
}
void onNewUser(SimpleOpenNI openni, int userId) {
  openni.startTrackingSkeleton(userId);
}

沒有留言:

張貼留言