Я пытаюсь объединить проект 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.
Да от курса я .xef хранится. Функция записи (из RecordAndPlaybackBasics работает как шарм). Моя проблема в том, что когда я воспроизвожу файл воспроизведения, я не могу его оценить с помощью gestureDetector. Кажется, я получил нулевой жест Frame. Информация из файла xef прекрасна. –
Я думаю, что мои проблемы находятся в функции trackingId. Возможно, я не сравниваю правильно trackingId. –