Я думаю, что это пока невозможно с 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) .