from abc import ABC, abstractmethod from typing import Any from ...dominio import Clipe from ...scanner.modelos import Cena, EvidenciaVisual from .modelos import QuadroDeVideo class ExtratorDeQuadros(ABC): """Interface para obter uma amostra temporal de frames de um clipe.""" @abstractmethod def extrair(self, clipe: Clipe) -> list[QuadroDeVideo]: ... class AnalisadorDeFrame(ABC): """Interface comum: recebe um frame e devolve evidências do domínio.""" nome: str @abstractmethod def analisar(self, quadro: QuadroDeVideo) -> list[EvidenciaVisual]: ... class AnalisadorDeSequenciaDeQuadros(ABC): """Interface para evidências que só existem ao comparar vários frames.""" nome: str @abstractmethod def analisar(self, quadros: list[QuadroDeVideo]) -> list[EvidenciaVisual]: ... class DetectorDeIntervalosDeCena(ABC): """Interface para algoritmos que encontram intervalos de cena no clipe.""" nome: str @abstractmethod def detectar(self, clipe: Clipe, quadros: list[QuadroDeVideo]) -> list[Cena]: ...