【问题标题】:Detect visual gestures offline from .xef files从 .xef 文件中离线检测视觉手势
【发布时间】:2015-10-06 10:38:25
【问题描述】:

我正在尝试将带有 kinect sdk 工具的 DiscreteGestureBasics 项目与 RecordAndPlaybackBasics 结合起来。 RecordAndPlaybackBasics 代码有两个主要方法播放 .xef 文件和录制 .xef 文件。我想读取一个 .xef 文件并使用 DiscreteGestureBasics 中的代码评估手势。在 DiscreteGestureBasics 中,我使用来自 RecordAndPlaybackBasics 的代码输入了回放 .xef 文件的功能。播放文件的代码如下:

 private void PlaybackClip(string filePath)
    {
        using (KStudioClient client = KStudio.CreateClient())
        {
            client.ConnectToService();         
            using (KStudioPlayback playback = client.CreatePlayback(filePath))
            {
                playback.LoopCount = this.loopCount;
                playback.Start();
                while (playback.State == KStudioPlaybackState.Playing)
                {

                    Thread.Sleep(100);
                }
            }
            client.DisconnectFromService();
        }

        // Update the UI after the background playback task has completed
        this.isPlaying = false;
        this.Dispatcher.BeginInvoke(new NoArgDelegate(UpdateState));
    }

我尝试将 GestureDetector.cs 的代码(来自 DiscreteGestureBasics 的脚本)添加到 PlaybackClip 函数中。我添加了一个带有播放功能的按钮,因此当我按下按钮时,一个 .xef 文件开始播放。 xef 正常可视化,但检测器的置信度分数始终为零。在来自 GestureDetector.cs 的以下代码中,scirpt 离散结果始终为空。知道这里有什么问题吗?

VisualGestureBuilderFrameReference frameReference = e.FrameReference;
using (VisualGestureBuilderFrame frame =frameReference.AcquireFrame())
{// frame return always null
 if (frame != null)
 {
    IReadOnlyDictionary<Gesture, ContinuousGestureResult> discreteResults = frame.ContinuousGestureResults;
    if (discreteResults != null) //discreteResults  is always null.
    {
    }
 } 
}

gestureDetector的初始化可以在MainWindow()中找到:

     int maxBodies = this.kinectSensor.BodyFrameSource.BodyCount;
     for (int i = 0; i < maxBodies; ++i)
     {
            GestureResultView result = new GestureResultView(i, false, false, 0.0f);
            GestureDetector detector = new GestureDetector(this.kinectSensor, result);
            this.gestureDetectorList.Add(detector);

            ContentControl contentControl = new ContentControl();
            contentControl.Content = this.gestureDetectorList[i].GestureResultView;
    ... 
    }

此外,当我从播放功能System.Diagnostics.Process.Start("VgbView.exe"); 运行 VgbView.exe 时,查看器通常会评估手势。为什么在我的情况下我无法访问ContinuousGestureResults?在周末我改变了一些东西,我在我的范围内取得了成功(从 .xef 计算重复),但现在我不记得我做了什么改变(并且无意中取消了改变)。为什么IReadOnlyDictionary&lt;Gesture, ContinuousGestureResult&gt; discreteResults = frame.ContinuousGestureResults; Gesture 和 ContinuousGestureResult 始终为空?对于我收到以下方法的每一帧,IsTrackingIdValid 总是错误的。

【问题讨论】:

    标签: c# kinect gestures


    【解决方案1】:

    “要使用 VGB,您必须拥有至少包含骨架和深度信息的扩展事件文件 (XEF)。有关录制和查看扩展事件文件 (XEF) 的信息,请参阅 Kinect 工作室。” Visual Gesture Bilder (MSDN)

    所以你已经像这样在你的记录骨架和深度信息中添加了:

       KStudioEventStreamSelectorCollection streamCollection = new KStudioEventStreamSelectorCollection();
       streamCollection.Add(KStudioEventStreamDataTypeIds.Depth);
       streamCollection.Add(KStudioEventStreamDataTypeIds.Body);
       streamCollection.Add(KStudioEventStreamDataTypeIds.BodyIndex);
    

    【讨论】:

    • 是的,我已经存储了 .xef。录音功能(来自 RecordAndPlaybackBasics 的工作就像一个魅力)。我的问题是,当我播放播放文件时,我无法使用手势检测器对其进行评估。看来我得到了一个空的gestureFrame。 xef 文件中的信息很好。
    • 我认为我的问题在于 trackingId 功能。也许我没有正确比较 trackingId。
    猜你喜欢
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多