我正在学习如何在Kinect上发展。我知道它的算法使用单个像素的概率分布来决定区域中的身体部位。
我的问题是,如果没有Kinect看到整个身体,我可以进入手部位置吗?在身体太靠近设备或大部分隐藏的情况下?我正在使用微软的KinectSDK。
答案 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中的深度帧来分割身体特定区域的像素(例如手,大腿等),并将其像素位置与骨架段进行比较。如果深度像素与其它骨架片段的距离最小,则可以将深度像素分配给特定骨架片段。计算距离线段而不是距离关节(即点)的距离非常重要。
此示例显示躯干,头部,手臂,前臂,大腿和腿部的实时分割:
您可以在本文中了解有关Kinect Avatars。
的更多技术细节