2016-12-23 4 views
1

У меня есть среда python (в Windows 10), которая использует класс OpenCV VideoCapture для подключения к нескольким USB-камерам.Индекс/номер устройства устройства VideoCapture OpenCV

Насколько я знаю, нет способа идентифицировать конкретную камеру в OpenCV, отличную от параметра device, в методе класса /open.

Проблема заключается в том, что параметр устройства изменяется в зависимости от того, сколько камер действительно подключено и к каким портам USB.

Я хочу, чтобы определить конкретную камеру и найти ее «индекс устройства» или «индекс камеры» независимо от того, сколько камер подключено и к каким портам USB.

Может кто-нибудь предложить способ достижения этой функциональности? код python предпочтительнее, но C++ также будет работать.

+2

Какая операционная система? – jmunsch

ответ

0

Если вы можете различать камеры по их серийному номеру или идентификатору устройства и продавца, вы можете прокручивать все видеоустройства перед открытием с помощью opencv и искать устройство камеры, которое хотите открыть.

2

Предисловие, я не использую окна, и это не было протестировано, но представляет собой комбинацию ответов и источников, найденных в Интернете, с некоторыми изменениями.

Прогулка ключи реестра USB и анализировать sub_key строки:

import _winreg 
usb_devices=[] 
index = 0 
with _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Enum\USB') as root_usb: 
    while True: 
     try: 
      subkey = _winreg.EnumKey(root_usb, index) 
      usb_devices.append(subkey) 
      index += 1 
     except WindowError as e: 
      if e[0] == 259: # No more data is available 
       break 
      elif e[0] == 234: # more data is available 
       index += 1 
       continue 
      raise e 
print('parse these', usb_devices) 

Или, возможно, Popenwmic подпроцесс и Разбираем stdout:

from subprocess import Popen, PIPE 
results1 = Popen(['wmic', 'path', 'win32_pnpentity', 'get', 'caption' '/format:list'], stdout=PIPE) 
results2 = Popen(['wmic','path','Win32_SerialPort','get','DeviceID^,Caption^,Description^,Name^,ProviderType','/format:list'], stdout=PIPE) 
print('parse these', results1.stdout.read()) 
print('parse these', results2.stdout.read()) 

Связанные, Linux, Mac, и окна с ++:

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

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