|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import cv2 |
|
|
|
|
|
|
|
|
class CamConfig: |
|
|
def __init__(self, cap: cv2.VideoCapture): |
|
|
self.width = cap.get(cv2.CAP_PROP_FRAME_WIDTH) |
|
|
self.height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT) |
|
|
self.fps = cap.get(cv2.CAP_PROP_FPS) |
|
|
fourcc = int(cap.get(cv2.CAP_PROP_FOURCC)) |
|
|
self.format_str = "".join([chr((fourcc >> (8 * i)) & 0xFF) for i in range(4)]) |
|
|
|
|
|
|
|
|
self.brightness = cap.get(cv2.CAP_PROP_BRIGHTNESS) |
|
|
self.contrast = cap.get(cv2.CAP_PROP_CONTRAST) |
|
|
self.saturation = cap.get(cv2.CAP_PROP_SATURATION) |
|
|
self.device_id = cap.getBackendName() |
|
|
|
|
|
def __str__(self): |
|
|
return ( |
|
|
f"Camera Details:\n" |
|
|
f"Resolution: {self.width}x{self.height}\n" |
|
|
f"FPS: {self.fps}\n" |
|
|
f"FourCC Format: {self.format_str}\n" |
|
|
f"Brightness: {self.brightness}\n" |
|
|
f"Contrast: {self.contrast}\n" |
|
|
f"Saturation: {self.saturation}\n" |
|
|
f"Device Backend: {self.device_id}\n" |
|
|
) |
|
|
|
|
|
|
|
|
print(f"OpenCV version: {cv2.__version__}") |
|
|
|
|
|
max_cameras = 10 |
|
|
available = [] |
|
|
details = {} |
|
|
|
|
|
for i in range(max_cameras): |
|
|
cap = cv2.VideoCapture(i) |
|
|
|
|
|
if not cap.isOpened(): |
|
|
print(f"Camera index {i:02d} not found...") |
|
|
continue |
|
|
|
|
|
details[i] = CamConfig(cap) |
|
|
available.append(i) |
|
|
|
|
|
print(f"Camera index {i:02d} OK!") |
|
|
|
|
|
cap.release() |
|
|
|
|
|
print(f"\nCameras found: {available}\n") |
|
|
|
|
|
for index, config in details.items(): |
|
|
print(f"Camera {index}:\n{config}") |
|
|
|