refactor: update detect method in camera classes to return dictionaries instead of lists
This commit is contained in:
@@ -5,7 +5,7 @@ from typing import List
|
||||
from .base_camera import BaseCamera
|
||||
|
||||
|
||||
class CvCamera(BaseCamera):
|
||||
class OpenCvCamera(BaseCamera):
|
||||
"""Kamera oparta na cv2.VideoCapture"""
|
||||
|
||||
config_map = {
|
||||
@@ -24,13 +24,28 @@ class CvCamera(BaseCamera):
|
||||
self.camera_list = []
|
||||
self.camera_index = 0
|
||||
|
||||
def detect(self) -> list:
|
||||
self.camera_list.clear()
|
||||
self.camera_list = enumerate_cameras(cv2.CAP_ANY)
|
||||
@staticmethod
|
||||
def detect():
|
||||
camera_list = enumerate_cameras(cv2.CAP_ANY)
|
||||
result = {}
|
||||
seen_ports = set()
|
||||
|
||||
result = []
|
||||
for camera in self.camera_list:
|
||||
result.append({"name": camera.name, "port": camera.path})
|
||||
for camera in camera_list:
|
||||
# unikamy duplikatów tego samego /dev/videoX albo tej samej ścieżki na Windows/macOS
|
||||
if camera.path in seen_ports:
|
||||
continue
|
||||
|
||||
cap = cv2.VideoCapture(camera.index, camera.backend) # próbujemy otworzyć
|
||||
ret, frame = cap.read()
|
||||
cap.release()
|
||||
|
||||
if ret and frame is not None and frame.size > 0:
|
||||
result[camera.index] = {
|
||||
"name": camera.name,
|
||||
"port": camera.path,
|
||||
"backend": camera.backend,
|
||||
}
|
||||
seen_ports.add(camera.path)
|
||||
|
||||
return result
|
||||
|
||||
@@ -38,7 +53,7 @@ class CvCamera(BaseCamera):
|
||||
self.error_msg = None
|
||||
try:
|
||||
if index:
|
||||
self.camera_index = self.camera_list[index].index
|
||||
self.camera_index = index
|
||||
|
||||
self.cap = cv2.VideoCapture(self.camera_index)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user