【问题标题】:Kinect: Laggy frame display with loop function inside AllFramesReadyEventArgsKinect:在 AllFramesReadyEventArgs 内具有循环功能的延迟帧显示
【发布时间】:2016-04-15 06:56:58
【问题描述】:

我尝试将每个关节位置 (xyz) 保存到文本文件中。以下是部分代码:

      private void KinectAllFramesReady(object sender, AllFramesReadyEventArgs) 
    {
    .
    .
    .
    //Some initialization code//
    .
    .
    .
      using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
                    {
                        if (skeletonFrame != null)
                        {
                            if ((this.skeletonData == null) || (this.skeletonData.Length != skeletonFrame.SkeletonArrayLength))
                            {
                                this.skeletonData = new Skeleton[skeletonFrame.SkeletonArrayLength];
                            }

                            skeletonFrame.CopySkeletonDataTo(this.skeletonData);

                            haveSkeletonData = true;

                            //===============
                            foreach (var skeleton in skeletonData)
                            {
                                if (skeletonFrame != null)
                                {
                                    if (skeleton.TrackingState == SkeletonTrackingState.Tracked)
                                    {

                                        // check the record check box

                                        //if (obj.RecCheckStat == true)

                                        if (RecordCheckBox.IsChecked == true)
                                        {
                                            //save skeleton to string
                                           Directory.CreateDirectory(folder_path);
                                            File.WriteAllText(file_path, currentSkeleton);

                                        }


                                    }
                                }
                            }
                            //===============
                        }
                    }


    }
.
.
.
//Draw skeleton-depth-color//
.
.
.
}

似乎使用函数中的foreach (var skeleton in skeletonData),每4-5秒就会出现帧延迟(骨架移动,而不是帧速率)。

知道如何解决这个问题吗?谢谢各位。

【问题讨论】:

    标签: c# kinect


    【解决方案1】:

    我在处理深度数据时遇到了类似的问题。首先要注意的是,Kinect 是 GPU 上的一个高强度设备,帧更新是它的核心,所以你必须小心使用任何耗时的任务,因为它们会在每个帧速率或大约 30 次运行一秒。所以在读帧函数中尽量少放。

    设置一个计时器或一个单独的线程,它将写入您的文件并只创建一次目录,因为现在它每帧都创建它。 在帧阅读器中,通过队列将骨架数据保存到对象中。然后你可以让定时器/线程简单地采用先进先出的方法来按照它来的顺序写入数据。

    我也会将任何 foreach 更改为 for 循环,因为它有点 more efficient

    【讨论】:

      猜你喜欢
      • 2013-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多