Пронизывание с Kinect - PullRequest
       3

Пронизывание с Kinect

13 голосов
/ 08 июня 2011

Я пишу приложение на C #, использующее Kinect, в настоящее время беру выходные данные и записываю их в шейдерный ресурс и отображаю их как текстуру. Моя проблема в том, что Kinect (по-видимому) работает только со скоростью 30 кадров в секунду, поэтому это сильно душит мою работу.

Какой лучший способ преодолеть это, многопоточность? Есть ли какой-то шаблон проектирования, который поможет с этим типом проблемы? Насколько я могу сказать, я могу захотеть, чтобы kinect обрабатывал данные в потоке, а затем получил доступ к нему, когда процесс завершился, но я не уверен, с чего начать безопасным образом.

Спасибо за любой совет, который вы можете предложить.

В настоящее время я использую OpenNI для драйверов / api kinect и SlimDX для стороны рендеринга DirectX.

Ответы [ 2 ]

8 голосов
/ 13 июня 2011

Я раньше не работал с Kinect, и вы не указали, какие драйверы / оболочки вы используете, но я подозреваю, что это, вероятно, не будет иметь значения.

Что вам, вероятно, понадобится сделать, это:

  1. Разделите цикл «Обновление» для Kinect на свой собственный поток. Это позволит логике вашего приложения работать максимально быстро, не останавливаясь в ожидании обновления от оборудования kinect.
  2. Вам нужно будет "блокировать" данные изображения / глубины на каждом проходе, пока kinect заполняет новые данные.
  3. Если процесс заполнения данных в Kinect занимает две минуты, вы можете попробовать буферизовать данные изображения и глубины, если драйверы этого еще не сделали. Это означает просто хранить две копии в памяти и читать одну, пока пишется другая.

Для отличных руководств по созданию потоков в c # я всегда рекомендую Threading от Albahari в C # . Я также рекомендовал бы, если вы хотите получить более конкретную информацию о том, что вы можете сделать для ускорения работы вашего приложения, вам, вероятно, следует отредактировать свой вопрос и добавить подробности о том, как именно вы его структурировали сейчас, какую оболочку / драйвер вы используете и т. Д.

1 голос
/ 23 августа 2012

При любой разработке с Kinect, требующей высокой производительности, вы должны использовать модель объединения вместо модели событий.В дополнение к этому, ваш лучший вариант - открыть поток и выполнить операции объединения.Вы можете также использовать потоки с моделью событий, чтобы выполнять длительные операции и не останавливать пользовательский интерфейс.

И вы можете видеть это: http://msdn.microsoft.com/en-us/library/hh973076

...