使用kinect跟踪没有身体图像的手

时间:2012-03-06 11:06:57

标签: kinect

我正在学习如何在Kinect上发展。我知道它的算法使用单个像素的概率分布来决定区域中的身体部位。

我的问题是,如果没有Kinect看到整个身体,我可以进入手部位置吗?在身体太靠近设备或大部分隐藏的情况下?我正在使用微软的KinectSDK。

4 个答案:

答案 0 :(得分:3)

我不确定这是否可以在MS Kinect SDK中使用,但是使用新的“beta”OpenNI SDK,您可以跟踪用户,而无需他们完全查看/校准并访问手点,还有其他吗?为您提供身体跟踪SDK的供应商,您可能想尝试(OMEK就是其中之一)。

答案 1 :(得分:1)

你可以 - 我正在使用SimpleOpenNI和Processing,但MS SDK应该允许你使用类似的方法。

首先,您必须启用手部跟踪:

  kinect.enableGesture ();
  kinect.enableHands ();
  kinect.addGesture ("RaiseHand"); //Wave, Swipe, RaiseHand and Click

然后使用下面的方法 - 请注意,如果您对3D数据感兴趣,则不必使用convertRealWorldToProjective方法。

  void onCreateHands(int HandId, PVector position, float time) {
    PVector convHand = new PVector ();
    thisHand = position;
    kinect.convertRealWorldToProjective(position, convHand);
    currHand = convHand;
  }

  void onUpdateHands(int HandId, PVector position, float time) {
    PVector convHand = new PVector ();
    thisHand = position;
    kinect.convertRealWorldToProjective(position, convHand);
    currHand = convHand;
  }

  void onDestroyHands(int HandId, PVector position, float time) {
    PVector convHand = new PVector ();
    kinect.convertRealWorldToProjective(position, convHand);
    currHand = new PVector (0, 0, 0);
    }

  void onRecognizeGesture (String strGesture, PVector idPosition, PVector endPosition)       {
    kinect.startTrackingHands (endPosition);
    kinect.removeGesture ("RaiseHand");
  }

希望它有所帮助!

答案 2 :(得分:0)

不知道你是否仍然想要它,但你可以尝试在kinect前面举手,使它成为最接近它的对象。然后访问深度图并找到最接近它的像素,同时将其他像素颜色值设置为黑色

答案 3 :(得分:0)

您可以使用Kinect中的深度帧来分割身体特定区域的像素(例如手,大腿等),并将其像素位置与骨架段进行比较。如果深度像素与其它骨架片段的距离最小,则可以将深度像素分配给特定骨架片段。计算距离线段而不是距离关节(即点)的距离非常重要。

此示例显示躯干,头部,手臂,前臂,大腿和腿部的实时分割: enter image description here

您可以在本文中了解有关Kinect Avatars

的更多技术细节