【问题标题】:SkeletonFrameReady event handler of KinectReplay class not executingKinectReplay 类的 SkeletonFrameReady 事件处理程序未执行
【发布时间】:2013-09-05 15:47:46
【问题描述】:

我正在使用 kinect 工具包中的代码来记录和重放帧,我知道问题是它永远无法识别新的 replay_SkeletonFrameReady,因此我无法绘制我记录的骨架。请注意,我从中读取的文件中确实有数据(数据也通过 kinect 工具包方法保存)。

    void replay_SkeletonFrameReady(object sender, ReplaySkeletonFrameReadyEventArgs e)
    {
        //..The code never makes it to this part, why is this?             
        processFrame(e.SkeletonFrame);
    }

    private void processFrame(ReplaySkeletonFrame frame)
    {
        if (frame != null)
        {
            skeletonsReplay = new Skeleton[frame.Skeletons.Length];
            skeletonsReplay = frame.Skeletons;
            Console.WriteLine("attempting draw");
            drawMe();  //..Function that draws skeleton
        }
    }

    private void LaunchReplay()
    {
        Console.WriteLine("replay launched");
        Stream readFS = File.OpenRead(@Global.localDirectory +         
        "\\localStorage\\MySwing.replay");
        replay = new KinectReplay(readFS);

        //..This line of code should cause the first function to be called right?
        replay.SkeletonFrameReady += replay_SkeletonFrameReady;
        replay.Start();
    }

【问题讨论】:

  • 很抱歉,如果您已经知道问题所在,您的问题是什么?你想让它识别skeletonFrameReady吗?
  • 一旦从文件中读取一个新帧,它就应该调用 replay_skeletonframeready,但这永远不会发生。所以问题是每当它读取一个新帧时,处理该帧的函数永远不会被调用。 replay.SkeletonFrameReady += replay_SkeletonFrameReady; 应该调用 replay_skeletonframeready
  • @EJ_Westhuizen 你在方法的各个部分设置断点了吗?你是这样确定代码永远不会达到那个程度的,还是只是因为你没有看到绘制的骨架?

标签: c# kinect kinect-sdk kinect.toolbox


【解决方案1】:

由于Kinect Toolbox 是开源的,我们可以了解内部情况。

当您通过传递一个 Stream 来初始化 KinectReplay 对象时,该类将查看该文件并查看哪些流已保存到文件中(这是在您使用 KinectRecorder 并传递给它 @987654324 时指定的@ enum 实例。KinectReplay 构造函数随后将读取整个文件,在找到它们时将骨架/颜色/深度帧添加到内部集合中。

当您调用 Start 方法时,KinectReplay 系统将模拟录制到毫秒,提供与最初录制相同的帧计时。例如,查看ReplaySystem Start 方法,您会看到(在后台线程中* - 阅读:如果最后一个线程处于活动状态,则不会让您的进程继续运行)它在第一帧中为时间戳执行线程睡眠。在我的情况下,第一个骨架帧在 2752 毫秒内没有看到,所以这是第一次睡眠。在回放系统唤醒并发送帧之前,您的代码可能超出范围。

*注意:它可能不是后台线程,它在技术上是一个抽象任务,可以选择任何并行机制..

【讨论】:

    猜你喜欢
    • 2019-10-24
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    • 2015-04-29
    • 2011-12-12
    • 1970-01-01
    相关资源
    最近更新 更多