Kinect用户检测

问题描述 投票:3回答:5

我正在开发应用程序。当Kinect传感器检测到骨骼,如果其他人接近现有用户,该人可以在该骨骼上工作,它将检测到第二个人。我想限制用户,如果其他用户来了,则Kinect传感器会首先检测到它,这不应检测到另一个。在此先感谢

c# kinect
5个回答
7
投票

另请参阅Jurgeon D对Kinect SDK player detection的回答,因为它涉及骨架索引。 @Fixus也是正确的,因为您可以使用ID。但是,如果您要检测到两个以上的人,那么只有一个是未编程的,即在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
 }      

4
投票

Kinect将检测新用户,因为这是他的工作:)但是请记住,每个用户都有自己的ID,因此您始终知道第一个用户是第一位,第二位是第二位。这样,您只能在要使用的用户框架上工作


3
投票

如果我无法正确理解您的问题,那么您将无法修改Kinects行为及其检测用户的方式(如果Framework中没有任何内容;我认为不存在任何内容。

您必须在代码中解决此问题。


0
投票

在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...

}

0
投票
KinectManager kinectManager = KinectManager.Instance;
AvatarController avatarCtrl = avatar ? avatar.gameObject.GetComponent<AvatarController> () : null;

if (kinectManager != null && kinectManager.IsInitialized () && avatar != null && avatarCtrl && kinectManager.IsUserTracked (avatarCtrl.playerId)) {
        //User detected. You can do the remaining thing.
}
© www.soinside.com 2019 - 2024. All rights reserved.