We are about to switch to a new forum software. Until then we have removed the registration on this forum.
Hi all, Could you please help me about this program.
final year project title: ****To study and develop real time human identification using a high speed Kinect sensor.**** Currently what I'm doing now is using skeleton technique to identify the person using Kinect sensor and the output is a mobile robot. The problem is now the person had being detected by the kinect, but whenever he went out from the frame about 7 sec, and went back into the frame, Kinect have to reset to detect a new person.
My target is, I want to detect and the recognize the same person after he went in and out from the frame.
import processing.serial.*;
import SimpleOpenNI.*; SimpleOpenNI kinect; Serial myPort;
void setup() { kinect = new SimpleOpenNI(this); kinect.enableDepth(); kinect.enableUser(SimpleOpenNI.SKEL_PROFILE_ALL);
size(640, 480); fill(255, 0, 0); String portName = Serial.list()[0]; myPort = new Serial(this, portName, 9600); }
void draw() { kinect.update(); image(kinect.depthImage(), 0, 0);
IntVector userList = new IntVector(); kinect.getUsers(userList);
if (userList.size() > 0) { int userId = userList.get(0);
if ( kinect.isTrackingSkeleton(userId)) {
drawSkeleton(userId);
circleForAHead(userId);
}
} }
void circleForAHead(int userId) { //userId=1; // get 3D position of a joint PVector jointPos = new PVector(); kinect.getJointPositionSkeleton(userId,SimpleOpenNI.SKEL_TORSO,jointPos); //println(jointPos.x); // println(jointPos.y); // println(jointPos.z);
if(jointPos.x > -200 && jointPos.x < 200)
{
if(jointPos.z > 1000)
{
myPort.write('F');
println("Forward");
}
else
{
myPort.write('S');
println("Stop");
}
}
else if (jointPos.x >200 && jointPos.x < 580)
{
myPort.write('R');
println("Right");
}
else if (jointPos.x <-200 && jointPos.x > -580)
{
myPort.write('L');
println("Left");
}
else
{
myPort.write('S');
println("Stop");
}
}
void drawSkeleton(int userId) { stroke(0); strokeWeight(5);
kinect.drawLimb(userId, SimpleOpenNI.SKEL_HEAD, SimpleOpenNI.SKEL_HEAD); 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); kinect.drawLimb(userId, SimpleOpenNI.SKEL_RIGHT_HIP, SimpleOpenNI.SKEL_LEFT_HIP);
noStroke();
fill(255,0,0); drawJoint(userId, SimpleOpenNI.SKEL_HEAD); drawJoint(userId, SimpleOpenNI.SKEL_NECK); drawJoint(userId, SimpleOpenNI.SKEL_LEFT_SHOULDER); drawJoint(userId, SimpleOpenNI.SKEL_LEFT_ELBOW); drawJoint(userId, SimpleOpenNI.SKEL_NECK); drawJoint(userId, SimpleOpenNI.SKEL_RIGHT_SHOULDER); drawJoint(userId, SimpleOpenNI.SKEL_RIGHT_ELBOW); drawJoint(userId, SimpleOpenNI.SKEL_TORSO); drawJoint(userId, SimpleOpenNI.SKEL_LEFT_HIP); drawJoint(userId, SimpleOpenNI.SKEL_LEFT_KNEE); drawJoint(userId, SimpleOpenNI.SKEL_RIGHT_HIP); drawJoint(userId, SimpleOpenNI.SKEL_LEFT_FOOT); drawJoint(userId, SimpleOpenNI.SKEL_RIGHT_KNEE); drawJoint(userId, SimpleOpenNI.SKEL_LEFT_HIP); drawJoint(userId, SimpleOpenNI.SKEL_RIGHT_FOOT); drawJoint(userId, SimpleOpenNI.SKEL_RIGHT_HAND); drawJoint(userId, SimpleOpenNI.SKEL_LEFT_HAND); }
void drawJoint(int userId, int jointID) { PVector joint = new PVector();
float confidence = kinect.getJointPositionSkeleton(userId, jointID, joint); if(confidence < 0.9){ return; }
PVector convertedJoint = new PVector(); kinect.convertRealWorldToProjective(joint, convertedJoint); ellipse(convertedJoint.x, convertedJoint.y, 5, 5); }
// user-tracking callbacks! void onNewUser(int userId) { println("start pose detection"); kinect.startPoseDetection("Psi", userId); }
void onLostUser(int userId) { myPort.write('S'); myPort.write('S'); println("Stop"); println("User Lost - userId: "+userId ); myPort.write('S'); myPort.write('S'); }
void onEndCalibration(int userId, boolean successful) { if (successful) { println(" User calibrated !!!"); kinect.startTrackingSkeleton(userId); } else { println(" Failed to calibrate user !!!"); kinect.startPoseDetection("Psi", userId); } }
void onStartPose(String pose, int userId) { println("Started pose for user"); kinect.stopPoseDetection(userId); kinect.requestCalibrationSkeleton(userId, true); }