Opencv Videocapture Device Index / Device Number
Solution 1:
As far as I know, openCV enumerates devices and uses the index of it as a camera index. But the way it enumerates can differ among backends. Anyway, if you can enumerate devices as OpenCV do, you can match the index of the device and its information depend on your code.
So, In Windows environment, you can use MSMF or DSHOW as a backend. If you are using MSMF as a backend, I made a simple function to list devices and match its name to its index. Here: https://github.com/pvys/CV-camera-finder.
If you are using DSHOW as a background, here's a nice article: https://www.codeproject.com/Articles/1274094/Capturing-Images-from-Camera-using-Python-and-Dire
Solution 2:
Preface, I do not use windows, and this hasn't been tested, but is a combination of answers and source found from online, with some modifications.
Walk the USB registry keys and parse the sub_key strings:
import _winreg
usb_devices=[]
index = 0with _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Enum\USB') as root_usb:
whileTrue:
try:
subkey = _winreg.EnumKey(root_usb, index)
usb_devices.append(subkey)
index += 1except WindowError as e:
if e[0] == 259: # No more data is availablebreakelif e[0] == 234: # more data is available
index += 1continueraise e
print('parse these', usb_devices)
Or possibly Popen
a wmic
subprocess and parse the 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())
Related, linux, mac, and windows c++:
- https://superuser.com/questions/902012/how-to-identify-usb-webcam-by-serial-number-from-the-linux-command-line
- https://superuser.com/questions/883053/mac-os-x-equivalent-of-udevadm-info-a-n-dev-ttyacm0
- get serial com port description in windows batch
- Detecting USB Insertion / Removal Events in Windows using C++
- windows - How to enumerate all connected USB devices' device path?
- https://msdn.microsoft.com/en-us/library/aa394413(v=vs.85).aspx
- http://www.velleman.eu/images/tmp/usbfind.c
- http://www.bitpim.org/pyxr/c/projects/bitpim/src/comscan.py.html
Solution 3:
If you can differentiate the cameras by their serial number or device and vendor id, you can loop through all video devices before opening with opencv and search for the camera device you want to open.
Post a Comment for "Opencv Videocapture Device Index / Device Number"