from abc import ABC, abstractmethod import numpy as np class BaseDetector(ABC): """ The Interface (Blueprint). All models (YOLO, MobileNet, ResNet, RCE) must inherit from this class. This ensures that the benchmark script can treat them all exactly the same. """ @abstractmethod def load_model(self): """ Initialize the model architecture and load weights from disk. This must happen before prediction. """ pass @abstractmethod def predict(self, image :np.ndarray): """ Run inference on a single image. Args: image (np.ndarray): A BGR image from OpenCV (Height, Width, Channels). Returns: tuple: A tuple containing exactly 3 elements: 1. label (str): The name of the detected object (e.g., 'bird', 'mug'). 2. confidence (float): How sure the model is (0.0 to 1.0). 3. inference_time (float): Processing time in milliseconds. """ pass