from typing import List import cv2 from facefusion.types import CameraPoolSet CAMERA_POOL_SET : CameraPoolSet =\ { 'capture': {} } def get_local_camera_capture(camera_id : int) -> cv2.VideoCapture: camera_key = str(camera_id) if camera_key not in CAMERA_POOL_SET.get('capture'): camera_capture = cv2.VideoCapture(camera_id) if camera_capture.isOpened(): CAMERA_POOL_SET['capture'][camera_key] = camera_capture return CAMERA_POOL_SET.get('capture').get(camera_key) def get_remote_camera_capture(camera_url : str) -> cv2.VideoCapture: if camera_url not in CAMERA_POOL_SET.get('capture'): camera_capture = cv2.VideoCapture(camera_url) if camera_capture.isOpened(): CAMERA_POOL_SET['capture'][camera_url] = camera_capture return CAMERA_POOL_SET.get('capture').get(camera_url) def clear_camera_pool() -> None: for camera_capture in CAMERA_POOL_SET.get('capture').values(): camera_capture.release() CAMERA_POOL_SET['capture'].clear() def detect_local_camera_ids(id_start : int, id_end : int) -> List[int]: local_camera_ids = [] for camera_id in range(id_start, id_end): cv2.utils.logging.setLogLevel(0) camera_capture = get_local_camera_capture(camera_id) cv2.utils.logging.setLogLevel(3) if camera_capture and camera_capture.isOpened(): local_camera_ids.append(camera_id) return local_camera_ids