Kinect:在AllFramesReadyEventArgs中具有循环功能的滞后帧显示



我试图将每个关节位置(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秒就会滞后一次(骨骼移动,而不是帧速率)。

知道如何解决这个问题吗?谢谢大家。

我在处理深度数据时遇到了类似的问题。首先要注意的是,Kinect是GPU上的一款费力的设备,帧更新是它的核心,所以你必须小心使用任何耗时的任务,因为它们会以每帧或每秒30次的速度运行。因此,在帧读取功能中尽可能少地使用。

设置一个定时器或一个单独的线程,该线程将写入您的文件并只执行一次创建目录,因为现在它正在每帧创建一次。在帧读取器中,通过队列将skeletoData保存到对象。然后,您可以让定时器/线程简单地采用FIFO方法,以与数据相同的顺序写入数据。

我也会将任何foreach改为for循环,因为它更有效。

最新更新