Quantcast
Channel: Kinect - Processing 2.x and 3.x Forum
Viewing all articles
Browse latest Browse all 530

Draw a different color if the hand is in a different position - Kinect

$
0
0

Hi everyone

I don't understand a part within my code. I want to make an if statement so that if the hand is in a different position of the screen, the color of the circle, which follows the hand, will change. Like this: http://simple-openni.googlecode.com/svn/site/screenshots/NiteSlider2d.jpg

But I really don't know which function I need to call upon. This is my code now:

import SimpleOpenNI.*;
//import processing.opengl.*;

SimpleOpenNI  kinect;                          // het woord "kinect" refereert in het script naar SimpleopenNI

color[]       userClr = new color[] {          // kleur per ''tracked'' persoon
  color(0, 255, 0),
  color(255, 0, 0),
  color(0, 0, 255),
  color(255, 255, 0),
  color(255, 0, 255),
  color(0, 255, 255)
};

PVector com = new PVector();
PVector com2d = new PVector();


void setup()
{

  size(1920, 1080, OPENGL);                             // kinect heeft een max output van 640x480, maar wordt nu geforceerd om 2x te vergroten met de scale in: void draw()
  kinect = new SimpleOpenNI(this);
  colorMode(HSB);
  if (kinect.isInit() == false)
  {
    println("Can't init SimpleOpenNI, maybe the camera is not connected!");
    exit();
    return;
  }

  kinect.enableDepth();                       // genereer een Depthmap
  kinect.enableUser();                        // genereer een skelet met alle joints
}

void draw()
{
  scale(3,2.25);                                    // om alsnog de grootte aan te passen wordt het beeld 2x vergroot
  kinect.update();                            // update de kinect camera per frame
  image(kinect.userImage(), 0, 0);            // laat beeld zien
  strokeWeight(7);                             // lijndikte skelet



  // -----------------------------------------------------------------
  // trigger om het skelet te maken als een persoon in beeld is

  int[] userList = kinect.getUsers();
  for (int i=0; i<userList.length; i++)
  {
    if (kinect.isTrackingSkeleton(userList[0]))
    {
      stroke(userClr[ (userList[0] - 1) % userClr.length ] );
      drawSkeleton(userList[0]);
    }
  }

  showFramerate();                             // laat de framerate zien

  // -----------------------------------------------------------------
  // hier link je objecten aan het skelet

  int[] users=kinect.getUsers();

  for (int i=0; i < users.length; i++) {
    int userId=users[0];

    PVector realData=new PVector();
    PVector projData=new PVector();

    stroke(255);
    strokeWeight(2);
    fill(255, 255, 255);

//    // link object aan hoofd
//    kinect.getJointPositionSkeleton(userId, SimpleOpenNI.SKEL_HEAD, realData);
//    kinect.convertRealWorldToProjective(realData, projData);
//    ellipse(projData.x, projData.y, 30, 30);

    // link object aan rechter hand
    kinect.getJointPositionSkeleton(userId, SimpleOpenNI.SKEL_RIGHT_HAND, realData);
    kinect.convertRealWorldToProjective(realData, projData);
    println("realData rechts", realData);

    //SO THIS PART IS WRONG AND I DON'T KNOW HOW TO MAKE THIS IF STATEMENT
    if(realData() == projData.x(width) >100 && projData.x(width) <200){
     ellipse(projData.x, projData.y, 30, 30);
    fill(10,200,100);
    }
    ellipse(projData.x, projData.y, 30, 30);
    fill(150,10,60);




    // link object aan linker hand
    kinect.getJointPositionSkeleton(userId, SimpleOpenNI.SKEL_LEFT_HAND, realData);
    //convert de data van het skeleton left hand naar realData en projData
    kinect.convertRealWorldToProjective(realData, projData);


    //realData spuugt drie getallen uit,-183.6774, -145.80629, 546.2606 de x, y, en z waarden
    println("realData links:", realData);

    ellipse(projData.x, projData.y, 30, 30);
    fill(10,150,60);
  }




//fill(0);                            // fake widescreen
//rect(0, 0, 640, 80);
//rect(0, 400, 1280, 80);
}

// -----------------------------------------------------------------
// met deze "drawLimb" objects wordt het skelet opgebouwd

void drawSkeleton(int userId)
{
//  kinect.drawLimb(userId, SimpleOpenNI.SKEL_HEAD, SimpleOpenNI.SKEL_NECK);
//
//  kinect.drawLimb(userId, SimpleOpenNI.SKEL_NECK, SimpleOpenNI.SKEL_LEFT_SHOULDER);
//  kinect.drawLimb(userId, SimpleOpenNI.SKEL_LEFT_SHOULDER, SimpleOpenNI.SKEL_LEFT_ELBOW);
  kinect.drawLimb(userId, SimpleOpenNI.SKEL_LEFT_ELBOW, SimpleOpenNI.SKEL_LEFT_HAND);

//  kinect.drawLimb(userId, SimpleOpenNI.SKEL_NECK, SimpleOpenNI.SKEL_RIGHT_SHOULDER);
//  kinect.drawLimb(userId, SimpleOpenNI.SKEL_RIGHT_SHOULDER, SimpleOpenNI.SKEL_RIGHT_ELBOW);
  kinect.drawLimb(userId, SimpleOpenNI.SKEL_RIGHT_ELBOW, SimpleOpenNI.SKEL_RIGHT_HAND);

//  kinect.drawLimb(userId, SimpleOpenNI.SKEL_LEFT_SHOULDER, SimpleOpenNI.SKEL_TORSO);
//  kinect.drawLimb(userId, SimpleOpenNI.SKEL_RIGHT_SHOULDER, SimpleOpenNI.SKEL_TORSO);

//  kinect.drawLimb(userId, SimpleOpenNI.SKEL_TORSO, SimpleOpenNI.SKEL_LEFT_HIP);
//  kinect.drawLimb(userId, SimpleOpenNI.SKEL_LEFT_HIP, SimpleOpenNI.SKEL_LEFT_KNEE);
//  kinect.drawLimb(userId, SimpleOpenNI.SKEL_LEFT_KNEE, SimpleOpenNI.SKEL_LEFT_FOOT);

//  kinect.drawLimb(userId, SimpleOpenNI.SKEL_TORSO, SimpleOpenNI.SKEL_RIGHT_HIP);
//  kinect.drawLimb(userId, SimpleOpenNI.SKEL_RIGHT_HIP, SimpleOpenNI.SKEL_RIGHT_KNEE);
//  kinect.drawLimb(userId, SimpleOpenNI.SKEL_RIGHT_KNEE, SimpleOpenNI.SKEL_RIGHT_FOOT);
}

// -----------------------------------------------------------------
// SimpleOpenNI events

void onNewUser(SimpleOpenNI curkinect, int userId)
{
  println("onNewUser - userId: " + userId);
  println("\tstart tracking skeleton");

  curkinect.startTrackingSkeleton(userId);
}

void onLostUser(SimpleOpenNI curkinect, int userId)
{
  println("onLostUser - userId: " + userId);
}

void onVisibleUser(SimpleOpenNI curkinect, int userId)
{
  println("onVisibleUser - userId: " + userId);
}

// -----------------------------------------------------------------
// simpele void waarmee de framerate wordt getoond om de performance te meten

void showFramerate()
{
  fill(255);
  textSize(20);
  text("fps" + frameRate, 10, 20);
}

Viewing all articles
Browse latest Browse all 530

Trending Articles