我试图将每个关节位置(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倍的速度运行一秒。因此,尽量减少帧读取功能。

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

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

关于c# - Kinect:在AllFramesReadyEventArgs内部具有循环功能的粗帧显示,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36640210/

10-13 09:31