2012-06-19 7 views
2

У меня есть два датчика kinect, которые подключены на разных USB-контроллерах. Если включить поток скелет на них обоих, я получаю исключение, когда я вызываю метод запуска на втором датчике:Два кинекса и скелетный поток из обоих из них - возможно?

This API has returned an exception from an HRESULT: 0x830100AA 

Трассировка стека:

at Microsoft.Kinect.KinectExceptionHelper.CheckHr(Int32 hr) 
    at Microsoft.Kinect.NuiSensor.NuiInitialize(UInt32 dwFlags) 
    at Microsoft.Kinect.KinectSensor.Initialize(SensorOptions options) 
    at Microsoft.Kinect.KinectSensor.Start() 

Почему я не могу иметь скелетное слежение от обоих кинок?

P.S. Я использую Kinect для Windows SDK 1.5

Спасибо!

ответ

5

Просто для уточнения:

  • Tracking работает с обеих Kinects. (протестировано с Microsoft SDK 1.6)
  • Что вам нужно сделать, это подключить Kinects на отдельной USB-шине.

Также ознакомьтесь с некоторыми примерами в SDK. В 1.6 SDK есть пример под названием «Kinect Explorer» для управляемого кода, который показывает, как безопасно обрабатывать несколько Kinect.

Обработка нескольких скелетов - непростая задача (если вы хотите определить, является ли пользователь из kinect 1 ist одним и тем же пользователем в kinect 2), вам нужно написать свою собственную логику.

2

Если вы используете несколько датчиков Kinect, отслеживание скелета работает только на первом устройстве, которое вы инициализируете (с RuntimeOption для отслеживания скелета). Чтобы переключить устройство, используемое для отслеживания, uninitialize старого и инициализировать новый.

+1

ваша идея занимает много времени ... Я знаю это, потому что я уже пробовал это :) Но моя проблема в том, почему невозможно иметь отслеживание скелета для обоих датчиков, в том же процессе? Если я запускаю отдельные процессы для каждого kinect, отслеживание скелета работает как шарм ... – VladN

+0

@ Hubrus вы могли бы рассказать мне, как сделать каждый из двух датчиков запущенным в другом процессе, пожалуйста? – Tak

+0

Простой. Создайте проект, который запускает один kinect (на основе параметра, такого как индекс устройства kinect в списке устройств kinect) и просто используйте Process.Start для каждого kinect. Пример: 'foreach (KinectDevice kDevice in kinectSensors) { ProcessStartInfo kinectProcess = new ProcessStartInfo(); kinectProcess.CreateNoWindow = true; kinectProcess.Arguments = kDevice.getUniqueId.ToString(); kinectProcess.FileName = "path_to_exe_file"; kinectProcesses.Add (Process.Start (kinectProcess)); } ' – VladN