Skip to content

Instantly share code, notes, and snippets.

@pingud98
Created June 27, 2018 19:35
Show Gist options
  • Save pingud98/f14338bab67cf5e2694dd7530a920fde to your computer and use it in GitHub Desktop.
Save pingud98/f14338bab67cf5e2694dd7530a920fde to your computer and use it in GitHub Desktop.
Skeleton detection using kinect for Processing
/* --------------------------------------------------------------------------
* SimpleOpenNI User Test
* --------------------------------------------------------------------------
* Processing Wrapper for the OpenNI/Kinect 2 library
* http://code.google.com/p/simple-openni
* --------------------------------------------------------------------------
* prog: Max Rheiner / Interaction Design / Zhdk / http://iad.zhdk.ch/
* date: 12/12/2012 (m/d/y)
* ----------------------------------------------------------------------------
*/
import SimpleOpenNI.*;
SimpleOpenNI context;
color[] userClr = new color[]{ color(255,0,0),
color(0,255,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();
PVector v1 = new PVector();
PVector v2d = new PVector();
float dontcare;
void setup()
{
size(640,480);
context = new SimpleOpenNI(this);
if(context.isInit() == false)
{
println("Can't init SimpleOpenNI, maybe the camera is not connected!");
exit();
return;
}
// enable depthMap generation
context.enableDepth();
// enable skeleton generation for all joints
context.enableUser();
background(200,0,0);
stroke(0,0,255);
strokeWeight(3);
smooth();
}
void draw()
{
// update the cam
context.update();
// draw depthImageMap
//image(context.depthImage(),0,0);
image(context.userImage(),0,0);
// draw the skeleton if it's available
int[] userList = context.getUsers();
for(int i=0;i<userList.length;i++)
{
if(context.isTrackingSkeleton(userList[i]))
{
stroke(userClr[ (userList[i] - 1) % userClr.length ] );
drawSkeleton(userList[i]);
}
// draw the center of mass
if(context.getCoM(userList[i],com))
{
context.convertRealWorldToProjective(com,com2d);
stroke(100,255,0);
strokeWeight(10);
beginShape(LINES);
vertex(com2d.x,com2d.y);
vertex(com2d.x,com2d.y);
vertex(com2d.x,com2d.y);
vertex(com2d.x,com2d.y);
endShape();
fill(0,255,100);
text(Integer.toString(userList[i]),com2d.x,com2d.y);
}
}
}
// draw the skeleton with the selected joints
void drawSkeleton(int userId)
{
// to get the 3d joint data
/*
PVector jointPos = new PVector();
context.getJointPositionSkeleton(userId,SimpleOpenNI.SKEL_NECK,jointPos);
println(jointPos);
*/
//context.drawLimb(userId, SimpleOpenNI.SKEL_HEAD, SimpleOpenNI.SKEL_NECK);
//context.drawLimb(userId, SimpleOpenNI.SKEL_NECK, SimpleOpenNI.SKEL_LEFT_SHOULDER);
//context.drawLimb(userId, SimpleOpenNI.SKEL_LEFT_SHOULDER, SimpleOpenNI.SKEL_LEFT_ELBOW);
//context.drawLimb(userId, SimpleOpenNI.SKEL_LEFT_ELBOW, SimpleOpenNI.SKEL_LEFT_HAND);
context.getCoM(userId,v1);
context.convertRealWorldToProjective(v1,v2d);
print("CoM ");
print(v2d.x);
print(' ');
print(v2d.y);
fill(0,0,0);
stroke(255,255,255);
strokeWeight(1);
rect(v2d.x, v2d.y, 5, 5);
context.getJointPositionSkeleton(userId, SimpleOpenNI.SKEL_LEFT_HAND, v1);
context.convertRealWorldToProjective(v1,v2d);
print(" Left hand ");
print(v2d.x);
print(' ');
print(v2d.y);
fill(0,0,0);
stroke(255,255,255);
strokeWeight(10);
rect(v2d.x, v2d.y, 5, 5);
context.getJointPositionSkeleton(userId, SimpleOpenNI.SKEL_LEFT_ELBOW, v1);
context.convertRealWorldToProjective(v1,v2d);
print(" Left elbow ");
print(v2d.x);
print(' ');
print(v2d.y);
fill(0,0,0);
stroke(255,255,255);
strokeWeight(10);
rect(v2d.x, v2d.y, 5, 5);
context.getJointPositionSkeleton(userId, SimpleOpenNI.SKEL_LEFT_SHOULDER, v1);
context.convertRealWorldToProjective(v1,v2d);
print(" Left shoulder ");
print(v2d.x);
print(' ');
print(v2d.y);
fill(0,0,0);
stroke(255,255,255);
strokeWeight(10);
rect(v2d.x, v2d.y, 5, 5);
context.getJointPositionSkeleton(userId, SimpleOpenNI.SKEL_RIGHT_HAND, v1);
context.convertRealWorldToProjective(v1,v2d);
print(" Right hand ");
print(v2d.x);
print(' ');
print(v2d.y);
fill(255,0,0);
rect(v2d.x, v2d.y, 5, 5);
context.getJointPositionSkeleton(userId, SimpleOpenNI.SKEL_RIGHT_ELBOW, v1);
context.convertRealWorldToProjective(v1,v2d);
print(" right elbow ");
print(v2d.x);
print(' ');
print(v2d.y);
fill(0,0,0);
stroke(255,255,255);
strokeWeight(10);
rect(v2d.x, v2d.y, 5, 5);
context.getJointPositionSkeleton(userId, SimpleOpenNI.SKEL_RIGHT_SHOULDER, v1);
context.convertRealWorldToProjective(v1,v2d);
print(" right shoulder ");
print(v2d.x);
print(' ');
println(v2d.y);
fill(0,0,0);
stroke(255,255,255);
strokeWeight(10);
rect(v2d.x, v2d.y, 5, 5);
//context.drawLimb(userId, SimpleOpenNI.SKEL_NECK, SimpleOpenNI.SKEL_RIGHT_SHOULDER);
//context.drawLimb(userId, SimpleOpenNI.SKEL_RIGHT_SHOULDER, SimpleOpenNI.SKEL_RIGHT_ELBOW);
//context.drawLimb(userId, SimpleOpenNI.SKEL_RIGHT_ELBOW, SimpleOpenNI.SKEL_RIGHT_HAND);
//context.drawLimb(userId, SimpleOpenNI.SKEL_LEFT_SHOULDER, SimpleOpenNI.SKEL_TORSO);
//context.drawLimb(userId, SimpleOpenNI.SKEL_RIGHT_SHOULDER, SimpleOpenNI.SKEL_TORSO);
//context.drawLimb(userId, SimpleOpenNI.SKEL_TORSO, SimpleOpenNI.SKEL_LEFT_HIP);
//context.drawLimb(userId, SimpleOpenNI.SKEL_LEFT_HIP, SimpleOpenNI.SKEL_LEFT_KNEE);
//context.drawLimb(userId, SimpleOpenNI.SKEL_LEFT_KNEE, SimpleOpenNI.SKEL_LEFT_FOOT);
//context.drawLimb(userId, SimpleOpenNI.SKEL_TORSO, SimpleOpenNI.SKEL_RIGHT_HIP);
//context.drawLimb(userId, SimpleOpenNI.SKEL_RIGHT_HIP, SimpleOpenNI.SKEL_RIGHT_KNEE);
//context.drawLimb(userId, SimpleOpenNI.SKEL_RIGHT_KNEE, SimpleOpenNI.SKEL_RIGHT_FOOT);
}
// -----------------------------------------------------------------
// SimpleOpenNI events
void onNewUser(SimpleOpenNI curContext, int userId)
{
println("onNewUser - userId: " + userId);
println("\tstart tracking skeleton");
curContext.startTrackingSkeleton(userId);
}
void onLostUser(SimpleOpenNI curContext, int userId)
{
println("onLostUser - userId: " + userId);
}
void onVisibleUser(SimpleOpenNI curContext, int userId)
{
//println("onVisibleUser - userId: " + userId);
}
void keyPressed()
{
switch(key)
{
case ' ':
context.setMirror(!context.mirror());
break;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment