kinect骨骼追踪

通过kinect追踪身体骨骼,并在图像上画出来。新奇、有趣。

import SimpleOpenNI.*;
SimpleOpenNI kinect;
public void setup()
{
kinect=new SimpleOpenNI(this);
kinect.setMirror(true);
kinect.enableDepth();
kinect.enableUser(SimpleOpenNI.SKEL_PROFILE_ALL);//启用全部关节
size(kinect.depthWidth(),kinect.depthHeight());
}
public void draw(){
kinect.update();
image(kinect.depthImage(),0,0);
if(kinect.isTrackingSkeleton(1)){
  drawSkeleton(1);//在屏幕上打印出1个骨骼
}
}
void drawSkeleton(int userId){//将关节用线段连接在一起
pushStyle();
stroke(255,0,0);
strokeWeight(3);
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);
popStyle();
}
public void onNewUser(int userId){//姿态检测
println("onNewUser-userId:"+userId);
if(kinect.isTrackingSkeleton(1)) return;
println("start pose detection");
kinect.startPoseDetection("Psi",userId);
}
public void onLostUser(int userId){//一旦用户丢失,控制台打印
  println("onLostUser-userId"+userId);
}
public void onStartPose(String pose,int userId){//检测到一个姿态,就可以停止检测,并要求NITE进行骨骼校准
  println("onStartPose-userId"+userId+",pose:"+pose);
  println("stop pose detection");
  kinect.stopPoseDetection(userId);
  kinect.requestCalibrationSkeleton(userId,true);
}
public void onEndPose(String pose,int userId){//完全姿态检测开始校准的时候你还可以把状态显示出来
println("onEndPose-userId:"+userId+",pose:"+pose);
}
public void onStartCalibration(int userId){
println("onStartCalibration-userId:"+userId);
}
public void onEndCalibration(int userId,boolean successfull){
println("onEndCalibration-userId:"+userId+",successfull:"+successfull);
if(successfull){
  println("User cailbrated!!!");
  kinect.startTrackingSkeleton(userId);
}
else{
println("Failed to cailbrate user!!!");
println("Start pose setection");
kinect.startPoseDetection("Psi",userId);
}

}


  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值