【问题标题】:Recognize two skeletons Kinect识别两个骨骼 Kinect
【发布时间】:2014-06-23 23:33:15
【问题描述】:

我使用 kinect 制作了一个游戏(乒乓球),我可以识别一个骨架,并且可以做出手势来控制左摇杆,但是当我尝试与两个玩家一起玩时,我无法识别另一个玩家的骨架。这是我目前所做的:

private void SensorSkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            Skeleton[] skeletons = new Skeleton[0];

            using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
            {
                if (skeletonFrame != null)
                {
                    skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];
                    skeletonFrame.CopySkeletonDataTo(skeletons);
                }
                if (skeletons.Length != 0)
                {
                    foreach (Skeleton skel in skeletons)
                    {
                        if (skel.TrackingState == SkeletonTrackingState.Tracked)
                        {
                            this.tracked(skel);
                            this.trackedLeft(skel);
                        }
                    }
                }
            }
        }

        public void tracked(Skeleton skeleton)
        {
            Joint jHandRight = skeleton.Joints[JointType.HandRight];
            Joint jHipCenter = skeleton.Joints[JointType.HipCenter];
            if ((jHipCenter.Position.Z - jHandRight.Position.Z) > 0.2)
            {
                //Consider hand raised in front of them
                //System.Diagnostics.Debug.WriteLine("Hand: Raised");
                //MessageBox.Show("POR FAVORRRRRRRR");
                //movement[0] = false;
                movement[0] = true;
                movement[1] = false;
            }
            else
            {
                //Hand is lowered by the users side
                //System.Diagnostics.Debug.WriteLine("Hand: Lowered");
                //MessageBox.Show("A SERRRRIIIIIOOOOOOOOOOOOOO");
                //movement[1] = false;
                movement[1] = true;
                movement[0] = false;
            }
        }

有人可以帮助我。

【问题讨论】:

  • 如何区分播放器 1 和播放器 2?
  • 目前我无法区分,我读到kinect可以识别两个玩家......也许给了id但不知道怎么做

标签: c# kinect kinect-interaction


【解决方案1】:

您需要一种方法来区分骨架一和骨架二。请参阅Kinect user Detection 了解如何执行此操作。然后,您可以将玩家一和二的骨架传递给您的两种不同方法。我使用玩家 ID,因为如果骨架丢失一两帧,他们的 ID 保持不变

int id1 = 0, id2 = 0;

... 

if (skeletons.Length != 0)
{
    foreach (Skeleton skel in skeletons)
    {
         if (skel.TrackingState == SkeletonTrackingState.Tracked)
         {
                if (skel.TrackingID == id1)
                    this.tracked(skel);
                else if (skel.TrackingID == id2)
                    this.trackedLeft(skel);
                else
                {
                     if (id1 != 0 && id2 == 0)
                         id2 = skel.TrackingID;
                     else if (id2 != 0 && id1 == 0)
                         id1 = skel.TrackingID;
                }
         }
     }
  }

【讨论】:

  • 您的意思是两个 ID 相同吗?
  • @mason 不,哈哈不小心弄乱了我的代码...检查我的编辑
  • 我有一个问题,在这种情况下,代码会输入这个if (id1 != 0 && id2 == 0) id2 = skel.TrackingID; else if (id2 != 0 && id1 == 0) id1 = skel.TrackingID;,我试过了,它从来没有通过……我错过了什么吗?
  • 我找到了区分两个播放器的方法,谢谢你的帮助:)
  • @seal 当第一个id被赋值时满足条件(id1)所以它不为零,但是id2的起始值仍然为零,所以它把新的id赋给id2跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多