2015-10-06 5 views
9

Я пытаюсь объединить проект DiscreteGestureBasics, который снабжен инструментом kinect sdk и RecordAndPlaybackBasics. Код RecordAndPlaybackBasics имеет два основных метода: воспроизведение файла .xef и запись .xef. Я хочу прочитать файл .xef и оценить жесты, используя код из DiscreteGestureBasics. В DiscreteGestureBasics я ввожу функциональные возможности для воспроизведения файлов .xef с использованием кода от 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 discreteResults всегда имеет значение null. Любая идея, что это может быть неправильно здесь?

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; 
    ... 
    } 

Кроме того, когда я бегу VgbView.exe из функции PlayBack System.Diagnostics.Process.Start("VgbView.exe"); зритель обычно оценивают жест. Почему в моем случае я не могу получить доступ ContinuousGestureResults? В выходные дни я что-то меняю, и я преуспеваю в своих масштабах (с учетом повторения с .xef), но теперь я не помню, что я изменил (и unintenionally отменил изменение). Почему IReadOnlyDictionary<Gesture, ContinuousGestureResult> discreteResults = frame.ContinuousGestureResults; Жест и ContinuousGestureResult постоянно null? Больше для каждого кадра я получаю следующий метод: IsTrackingIdValid постоянно false.

ответ

-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); 
+1

Да от курса я .xef хранится. Функция записи (из RecordAndPlaybackBasics работает как шарм). Моя проблема в том, что когда я воспроизвожу файл воспроизведения, я не могу его оценить с помощью gestureDetector. Кажется, я получил нулевой жест Frame. Информация из файла xef прекрасна. –

+0

Я думаю, что мои проблемы находятся в функции trackingId. Возможно, я не сравниваю правильно trackingId. –