我试图让我的Kinect的SkeletonStream反馈一个数据,告诉我没有人被发现。如果检测到我的骨架,我可以获得饲料,但如果没有人,我无法收到任何通知。有没有办法让kinect告诉我是否没有拾取骷髅?
private void kinect_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
{
using (SkeletonFrame frame = e.OpenSkeletonFrame())
{
if (frame == null)
{
return;
}
frame.GetSkeletons(ref allSkeletons);
if (allSkeletons.All(s => s.TrackingState == SkeletonTrackingState.NotTracked))
return;
foreach (var skeleton in allSkeletons)
{
if (skeleton.TrackingState != SkeletonTrackingState.Tracked)
{
continue;
}
if (skeleton.TrackingState == SkeletonTrackingState.NotTracked)
{
}
foreach (Joint joint in skeleton.Joints)
{
if (joint.TrackingState != JointTrackingState.Tracked)
continue;
if (joint.JointType == JointType.HipCenter)
{
hipCenter = joint.Position;
AdvanceFunction();
}
}
sdm.Draw(frame.GetSkeletons(), false);
}
}
}
答案 0 :(得分:1)
没有什么可以简单地告诉你目前没有跟踪任何骷髅。您需要查看骨架框架以确定是否有任何用户。
你的foreach
循环遍历所有骷髅......
foreach (var skeleton in allSkeletons)
{
if (skeleton.TrackingState != SkeletonTrackingState.Tracked)
{
continue;
}
....
}
在第一个if
语句中 - 如果当前骨架未被主动跟踪,则循环将移至下一个骨架。如果找到任何骨架,您将要添加标记。例如,您可以执行类似......
bool hasActivePlayer = false;
foreach (var skeleton in allSkeletons)
{
if (skeleton.TrackingState != SkeletonTrackingState.Tracked)
{
continue;
}
hasActivePlayer = true;
....
}
if (hasActivePlayer == false)
{
// you aren't tracking anyone, deal with it
}
您可能也有兴趣查看SkeletonTrackingState.PositionOnly
。在这种情况下,Kinect知道某人在那里,但它没有主动跟踪他们的骨架。如果你想查找它,你可以在foreach
循环中更新ckeck。