2014-03-26 2 views
1

Я хочу спросить, есть ли способ проверить, используется ли Kinect в данный момент (sensor.start), чтобы мы могли использовать другой Kinect для другого приложения или в том же приложении? Я пытался использовать Kinect.IsRunning, но он не работает.Как запустить два экземпляра одного приложения для двух Kinect?

Это случай: У меня есть приложение, которое работает на одном Kinect, но я хочу запустить это приложение два раза. У меня есть два Kinect, подключенных к моему компьютеру. Проблема заключается в том, что всякий раз, когда я запускаю второе приложение, он обнаруживает тот же Kinect, который будет использоваться, что приведет к сбою второго приложения. Я хочу, чтобы это приложение могло узнать, начался ли первый датчик Kinect, и он пойдет на следующий. Я прочитал эту статью, но это не помогает мне решить эту проблему. http://social.msdn.microsoft.com/Forums/en-US/e8e96d97-ec02-430e-b80c-a40ae6b92604/running-two-instances-of-the-same-app-for-two-kinects?forum=kinectsdknuiapi

До сих пор я жестко закодировал Kinect ID в своем приложении, но это означает, что мне нужно иметь два приложения, которые неэффективны. Если мне нужно изменить Kinect, мне нужно снова изменить идентификатор внутри кодов. Любой может мне помочь. пожалуйста? Я думал, что это будет не сложно, но я все еще не нашел никакой функции для этого. Я пишу свои коды в VB.Net

+0

Для этого в образце кода (MultiDepthViewer) используется стандартный код OpenNI2. https://github.com/OpenNI/OpenNI2/tree/master/Samples/MultiDepthViewer. Побочным эффектом является то, что каждая камера Kinect создает свой собственный ИК-паттерн, и когда они перекрывают изображение глубины, становится шумно. Например, вы можете видеть маленькие удары, выступающие из стены. – Vlad

+0

спасибо! Я просмотрю его :) – user3423299

ответ

0

Я хотел бы сделать что-то вроде этого:

For Each _sensor As KinectSensor In KinectSensor.KinectSensors 
    sensor = _sensor 

    ...//setup event handlers and such 

    Try 
     sensor.Start() //If it gets past this, then we can exit as it has 
         // successfully started a kinect 
     Exit For 

    Catch ex As ApplicationException 
     MsgBox("That Kinect is being used in another application, moving to the next") 
    Catch ex2 As IOException 
     MsgBox("Error") 
    End Try 
Next 

Это будет искать все kinects, попытайтесь запустить их, и если ApplicationException брошено, то она движется на следующий кинект.

+0

привет, спасибо за ваш ответ! синтаксис был в порядке, за исключением Exit. по выходу вы имеете в виду выход из цикла или выход из попытки? Сначала я попытался выйти из try, он станет выбранным Kinect, всегда будет вторым Kinect. Итак, я попытался выйти из цикла for внутри try, но он проверяет только первый Kinect, поэтому в конце концов я все еще не могу заставить его перейти на следующий Kinect. По крайней мере, крушение пропало. Просто, что второе приложение не может активировать другой Kinect, так что он просто ничего не показывает. – user3423299

+0

@ user3423299 Он должен выйти из цикла после того, как он найдет действительный kinect. Извините, что мой код неаккуратен, но он должен зацикливаться на кинекторах, попытаться запустить его, если он не сработает, затем он перейдет к следующему kinect, и если он удастся, тогда он должен выйти из цикла –

+0

@ user342399. Также вы уверены, что цикл проходит через каждый kinect? Поместите точку останова, чтобы увидеть, проходит ли она через цикл несколько раз –

Смежные вопросы