Kinect用户检测

我正在开发一个应用程序当一个kinect传感器检测到一个人可以在其上工作的骨架,如果其他人接近现有的用户,它会检测到第二个人。
我想限制到用户的感觉传感器首先检测到它,如果其他用户来这不应该检测到另一个。
提前致谢

另请参见Jurgeon D对Kinect SDK播放器检测的回答,因为它处理的是骨架索引。 @Fixus也是正确的,你可以使用一个ID。 但是,如果你的意思是超过2人被检测到,那么只有一个被检测到,这是不是编程,这是在Kinect的硬件和@FelixK。 是正确的。

骨骼指数

void nui_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e) { SkeletonFrame sf = e.SkeletonFrame; //check which skeletons in array are active and // use that array indexes for player index SkeletonData player1 = sf.Skeletons[playerIndex1]; SkeletonData player2 = sf.Skeletons[playerIndex2]; } 

骨架ID

 void nui_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e) { SkeletonFrame sf = e.SkeletonFrame; if (sf.TrackingState == SkeletalTrackingState.Tracked) { int ID1 = sf.TrackingID; } 

也是检测人类的代码

  DepthImageFrame depthFrame; short[] rawDepthData = new short[depthFrame.PixelDataLength]; depthFrame.CopyPixelDataTo(rawDepthData); Byte[] pixels = new byte[depthFrame.Height * depthFrame.Width * 4]; int player = rawDepthData[depthIndex] & DepthImageFrame.PlayerIndexBitmask; if (player > 0) { //do something } 

Kinect会检测到新用户,因为这是他的工作:)但请记住,每个用户都有自己的ID,所以你总是知道第一个用户是第一个,第二个是第二个。 这样,你只能在你想使用的用户的骨架上工作

如果我正确理解你的问题,这是不可能的,你不能修改Kinects的行为,以及如何检测用户(如果在框架中没有什么;我不认为有什么)。

你必须在你的代码中解决这个问题。

在其中一个kinect快速入门教程中,有一种方法只能检测一个用户。 我尝试了我自己的应用程序,它的工作。

 using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame()) { if (skeletonFrame == null) return; Skeleton[] skeletons= new Skeleton[skeletonFrame.SkeletonArrayLength]; skeletonFrame.CopySkeletonDataTo(skeletons); if (skeletons.All(s => s.TrackingState == SkeletonTrackingState.NotTracked)) return; Skeleton skeleton = (from s in skeletons where s.TrackingState == SkeletonTrackingState.Tracked select s).FirstOrDefault(); if (skeleton == null) return; // TODO: Do something to the skeleton data... }