【问题标题】:Kinect Record Only When One Body/Skeleton Is in the Frame仅当一个身体/骨架在框架中时 Kinect 记录
【发布时间】:2016-03-03 21:34:10
【问题描述】:

我需要编写一个程序来记录帧,但只有当一个骨架/身体在帧中时。我查看了 bodyCount 方法,但它总是给出 6 的值(没用)。我尝试做的一件事如下所示。此代码基本上显示了存储被跟踪主体的索引。但是,我仍然不知道如何知道框架中是否有一个或多个实体。 我真的很感激任何帮助。 提前致谢。

private void Reader_FrameArrived(object sender, BodyFrameArrivedEventArgs e){
   using (BodyFrame bodyFrame=e.FrameReference.AquireFrame()){
          if (bodyFrame!=null){
                if(this.bodies==null){
                this.bodies=new Body[bodyFrame.BodyCount];
                }
          body.Frame.GetAndRefreshBodyData(this.bodies) 

          for(int i=0; i<6;i++){
              if(this.bodies[i].IsTracked){
              Console.WriteLine("Tracked"+i)
               }
           }

      }

   }

}

【问题讨论】:

    标签: visual-studio kinect kinect-sdk


    【解决方案1】:

    只需检查每个身体的 IsTracked 属性,并将跟踪的骨架数量存储在单个变量中。如果此数字等于 1,则只跟踪一个骨架,您可以开始录制。

        private Body[] bodies = null;
    
        [...]
    
        private void Reader_FrameArrived(object sender, BodyFrameArrivedEventArgs e)
        {
            bool dataReceived = false;
    
            using (BodyFrame bodyFrame = e.FrameReference.AcquireFrame())
            {
                if (bodyFrame != null)
                {
                    if (this.bodies == null)
                    {
                        this.bodies = new Body[bodyFrame.BodyCount];
                    }
    
                    // The first time GetAndRefreshBodyData is called, Kinect will allocate each Body in the array.
                    // As long as those body objects are not disposed and not set to null in the array,
                    // those body objects will be re-used.
                    bodyFrame.GetAndRefreshBodyData(this.bodies);
                    dataReceived = true;
                }
            }
    
            if (dataReceived)
            {
                int trackedBodyCount = 0;
                for (int i=0; i<this.bodies.Length; ++i)
                {
                    if(this.bodies[i].IsTracked) {
                        trackedBodyCount += 1;
                    }
                }
    
                if (trackedBodyCount == 1)
                {
                    // One skeleton is tracked
                }
            }
        }
    

    【讨论】:

    • 我不知道为什么我没想到这样做。再次感谢!
    • 我需要获得更多积分才能投票。一旦我这样做,我会投票赞成:)
    猜你喜欢
    • 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
    相关资源
    最近更新 更多