2013-01-25 5 views
1

В обработке я могу успешно рисовать карты глубин из 2 Kinects с помощью SimpleOpenNI, но теперь я пытаюсь нарисовать 2 «сцены» (из enableScene() vs enableDepth()). Оба Kinects обнаружены, но когда я рисую вывод, я вижу, что одна и та же сцена рисуется дважды (тогда как использование enableDepth() всегда давало мне 2 разных изображения глубины). Любые идеи, что я делаю неправильно? Заранее спасибо.SimpleOpenNI: Несколько Kinects и enableScene()/sceneImage() в обработке

/* -------------------------------------------------------------------------- 
* SimpleOpenNI Multi Camera Test 
* -------------------------------------------------------------------------- 
*/ 

import SimpleOpenNI.*; 

SimpleOpenNI cam1; 
SimpleOpenNI cam2; 

void setup() 
{ 
    size(640 * 2 + 10,480); 

    // start OpenNI, loads the library 
    SimpleOpenNI.start(); 

    // init the cameras 
    cam1 = new SimpleOpenNI(0,this); 
    cam2 = new SimpleOpenNI(1,this); 

    // set the camera generators ** HAD TO REVERSE ORDER FOR BOTH KINECTS TO WORK 

    // enable Scene 
    if(cam2.enableScene() == false) 
    { 
    println("Can't open the scene for Camera 2"); 
    exit(); 
    return; 
    } 

    // enable depthMap generation 
    if(cam1.enableScene() == false) 
    { 
    println("Can't open the scene for Camera 1"); 
    exit(); 
    return; 
    } 

    background(10,200,20); 
} 

void draw() 
{ 
    // update the cams 
    SimpleOpenNI.updateAll(); 

    image(cam1.sceneImage(),0,0); 

    image(cam2.sceneImage(),640 + 10,0); 
} 
+1

Были пара синтаксических ошибок с кодом, который теперь исправлен, но все же проблемы сохраняются. На моей машине (старый macbook) SimpleOpenNI не может создать вторую карту глубины Kinect. Я не уверен, что это ограничение шины USB или проблема с самой библиотекой SimpleOpenNI на данный момент. –

+0

Очень интересно. Мы запустили его на нескольких совершенно новых машинах с Kinects на отдельных шинах, а простые изображения глубины из enableDepth() работают, но enableScene() на обеих камерах последовательно создает одну и ту же сцену, поэтому я считаю, что это что-то в SimpleOpenNI. Ну что ж. Спасибо, что посмотрели. – Gregir

ответ

1

Я сделал еще один текст, используя sceneMap() функциональность, но, похоже, действительно существует проблема с SimpleOpenNI не обновляется должным образом внутренне:

/* -------------------------------------------------------------------------- 
* SimpleOpenNI Multi Camera Test 
* -------------------------------------------------------------------------- 
*/ 

import SimpleOpenNI.*; 

SimpleOpenNI cam1; 
SimpleOpenNI cam2; 

int numPixels = 640*480; 
int[] sceneM1 = new int[numPixels]; 
int[] sceneM2 = new int[numPixels]; 
PImage scene1,scene2; 

void setup() 
{ 
    size(640 * 2 + 10,480 * 2 + 10); 

    // start OpenNI, loads the library 
    SimpleOpenNI.start(); 

    // init the cameras 
    cam1 = new SimpleOpenNI(0,this); 
    cam2 = new SimpleOpenNI(1,this); 

    // set the camera generators ** HAD TO REVERSE ORDER FOR BOTH KINECTS TO WORK 

    // enable Scene 
    if(cam2.enableScene() == false) 
    { 
    println("Can't open the scene for Camera 2"); 
    exit(); 
    return; 
    } 
// cam2.enableDepth();//this fails when using only 1 bus 

    // enable depthMap generation 
    if(cam1.enableScene() == false) 
    { 
    println("Can't open the scene for Camera 1"); 
    exit(); 
    return; 
    } 
    cam1.enableDepth(); 

    scene1 = createImage(640,480,RGB); 
    scene2 = createImage(640,480,RGB); 

    background(10,200,20); 
} 

void draw() 
{ 
    // update the cams 
    SimpleOpenNI.updateAll(); 

    image(cam1.depthImage(),0,0); 
    image(cam1.sceneImage(),0,0); 

    cam1.sceneMap(sceneM1); 
    cam2.sceneMap(sceneM2); 
    updateSceneImage(sceneM1,scene1); 
    updateSceneImage(sceneM2,scene2); 
    image(scene1,0,490); 
    image(scene2,650,490); 
} 
void updateSceneImage(int[] sceneMap,PImage sceneImage){ 
    for(int i = 0; i < numPixels; i++) sceneImage.pixels[i] = sceneMap[i] * 255; 
    sceneImage.updatePixels(); 
} 

Используя что-то вроде

cam1.update(); 
cam2.update(); 

а не

SimpleOpenNI.updateAll(); 

ничего не меняет.

issue was filed, надеюсь, он будет разрешен. Тем временем попробуйте использовать OpenNI на другом языке/фреймворке. OpenFrameworks имеет много общего с обработкой (и многими отличиями также, если честно, но это не ракетостроение). Попробуйте экспериментальный ofxOpenNI addon to test multiple cameras, надеюсь, он решит вашу проблему.

+0

Ах, хорошее мышление. Один из моих коллег сегодня попробовал то же самое и получил те же результаты, но это была хорошая идея. Во всяком случае, я хотел взглянуть на что-то вроде OpenFrameworks или Cinder, так что это может быть хорошей возможностью. Еще раз спасибо, что посмотрим на это. (Кстати, чтобы решить то, что мы пытались сделать в конечном итоге с несколькими камерами, мы отправились с TSPS в качестве вспомогательного приложения для работы с несколькими камерами, и он отлично поработал. Http://opentsps.com/) – Gregir

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

  • Нет связанных вопросов^_^