frigate/frigate/data_processing/real_time/api.py
2026-03-08 11:44:51 -05:00

78 lines
2.2 KiB
Python

"""Local only processors for handling real time object processing."""
import logging
from abc import ABC, abstractmethod
from typing import Any
import numpy as np
from frigate.config import FrigateConfig
from frigate.config.enrichment_updater import EnrichmentConfigEnum
from ..types import DataProcessorMetrics
logger = logging.getLogger(__name__)
class RealTimeProcessorApi(ABC):
@abstractmethod
def __init__(
self,
config: FrigateConfig,
metrics: DataProcessorMetrics,
) -> None:
self.config = config
self.metrics = metrics
pass
@abstractmethod
def process_frame(self, obj_data: dict[str, Any], frame: np.ndarray) -> None:
"""Processes the frame with object data.
Args:
obj_data (dict): containing data about focused object in frame.
frame (ndarray): full yuv frame.
Returns:
None.
"""
pass
@abstractmethod
def handle_request(
self, topic: str, request_data: dict[str, Any]
) -> dict[str, Any] | None:
"""Handle metadata requests.
Args:
topic (str): topic that dictates what work is requested.
request_data (dict): containing data about requested change to process.
Returns:
None if request was not handled, otherwise return response.
"""
pass
@abstractmethod
def expire_object(self, object_id: str, camera: str) -> None:
"""Handle objects that are no longer detected.
Args:
object_id (str): id of object that is no longer detected.
camera (str): name of camera that object was detected on.
Returns:
None.
"""
pass
def update_config(self, update_type: EnrichmentConfigEnum, payload: Any) -> None:
"""Handle a config change notification.
Called for every config update published under ``config/``.
Processors should override this to check the update type and act
only on changes relevant to them. Default is a no-op.
Args:
update_type: The enrichment config type that changed.
payload: The updated configuration object.
"""
pass