Как я могу получить серийный номер Kinect с OpenNI? - PullRequest
3 голосов
/ 24 января 2012

Как я могу получить серийные номера моих устройств kinect в OpenNI? я использую Драйвер датчика kinct для avin2.

Я пытаюсь сделать следующее, но в моей переменной только "0" serial:

xn::NodeInfoList possibleChains;
context.EnumerateProductionTrees(XN_NODE_TYPE_DEVICE,NULL,possibleChains,NULL);
for(xn::NodeInfoList::Iterator i = possibleChains.Begin(); i !=
possibleChains.End(); ++i)
    {
        xn::NodeInfo node = *i;
        nRetVal = context.CreateProductionTree(node);
        xn::Device device;
        nRetVal = node.GetInstance(device);
        XnChar serial[1024];
        device.GetIdentificationCap().GetSerialNumber(serial, 1024);
    } 

Ответы [ 2 ]

4 голосов
/ 18 мая 2012

Я думаю, что это пока невозможно с OpenNI (по крайней мере, для Kinect - возможно, виноват драйвер avin2).

Однако вы можете получить информацию о том, к какой USB-шине / порту подключен Kinect, используя xn::NodeInfo::GetCreationInfo ( link )

В linux он содержит следующее (для типа устройства NodeType):

045e/02ae@5/13 (idVendor/idProduct@BusID/DeviceId) 

Я не могу показать вам точный код, так как я использую Java-оболочку OpenNI вместо C ++, но этот метод у меня работает на Mac / Linux / Win для дифференциации Kinects в моих приложениях.

Проблема в том, что информация о шине / порте изменится, когда вы подключите kinect к другому usb (а в linux она меняется иногда даже между перезапусками).

Но если вы используете Linux, вы можете использовать (как root):

# lsusb -v -d 045e:02ae | grep -e "Bus\|iSerial"
# Bus 005 Device 008: ID 045e:02ae Microsoft Corp. Xbox NUI Camera
#   iSerial                 3 A00365A00972107A
# Bus 005 Device 013: ID 045e:02ae Microsoft Corp. Xbox NUI Camera
#   iSerial                 3 A00365A00955107A

чтобы получить фактический серийный номер kinect.

Поэтому вы можете придумать сценарий bash, который будет запущен до запуска вашего приложения OpenNI, который найдет шину / порт и передаст его вашему приложению (которое затем может использовать эту информацию для связи с правильным Kinect) .

1 голос
/ 29 апреля 2013

С OpenNI2 , давая требуемый серийный номер в виде wantedSerialNumber строка

openni::Device device = new openni::Device();
openni::Array<openni::DeviceInfo> deviceList;
openni::OpenNI::enumerateDevices(&deviceList);
for (int i = 0; i != deviceList.getSize(); ++i) {
    const openni::DeviceInfo& info = deviceList[i];
    string uri = info.getUri();
    device->open(uri.c_str());
    char serialNumber[1024];
    device->getProperty(ONI_DEVICE_PROPERTY_SERIAL_NUMBER, &serialNumber);
    if (string(serialNumber) != wantedSerialNumber) {
        device->close();
    } else {
        break;
    }
}
...