remove decorator and specifically suppress TFLite delegate creation messages

This commit is contained in:
Josh Hawkins 2025-12-18 15:43:36 -06:00
parent 2f9308e0b1
commit 26d4f5f0ab
5 changed files with 46 additions and 41 deletions

View File

@ -13,7 +13,7 @@ from frigate.comms.event_metadata_updater import (
) )
from frigate.config import FrigateConfig from frigate.config import FrigateConfig
from frigate.const import MODEL_CACHE_DIR from frigate.const import MODEL_CACHE_DIR
from frigate.log import redirect_output_to_logger from frigate.log import suppress_stderr_during
from frigate.util.object import calculate_region from frigate.util.object import calculate_region
from ..types import DataProcessorMetrics from ..types import DataProcessorMetrics
@ -80,8 +80,9 @@ class BirdRealTimeProcessor(RealTimeProcessorApi):
except Exception as e: except Exception as e:
logger.error(f"Failed to download {path}: {e}") logger.error(f"Failed to download {path}: {e}")
@redirect_output_to_logger(logger, logging.DEBUG)
def __build_detector(self) -> None: def __build_detector(self) -> None:
# Suppress TFLite delegate creation messages that bypass Python logging
with suppress_stderr_during("tflite_interpreter_init"):
self.interpreter = Interpreter( self.interpreter = Interpreter(
model_path=os.path.join(MODEL_CACHE_DIR, "bird/bird.tflite"), model_path=os.path.join(MODEL_CACHE_DIR, "bird/bird.tflite"),
num_threads=2, num_threads=2,

View File

@ -21,7 +21,7 @@ from frigate.config.classification import (
ObjectClassificationType, ObjectClassificationType,
) )
from frigate.const import CLIPS_DIR, MODEL_CACHE_DIR from frigate.const import CLIPS_DIR, MODEL_CACHE_DIR
from frigate.log import redirect_output_to_logger from frigate.log import suppress_stderr_during
from frigate.types import TrackedObjectUpdateTypesEnum from frigate.types import TrackedObjectUpdateTypesEnum
from frigate.util.builtin import EventsPerSecond, InferenceSpeed, load_labels from frigate.util.builtin import EventsPerSecond, InferenceSpeed, load_labels
from frigate.util.object import box_overlaps, calculate_region from frigate.util.object import box_overlaps, calculate_region
@ -72,7 +72,6 @@ class CustomStateClassificationProcessor(RealTimeProcessorApi):
self.last_run = datetime.datetime.now().timestamp() self.last_run = datetime.datetime.now().timestamp()
self.__build_detector() self.__build_detector()
@redirect_output_to_logger(logger, logging.DEBUG)
def __build_detector(self) -> None: def __build_detector(self) -> None:
try: try:
from tflite_runtime.interpreter import Interpreter from tflite_runtime.interpreter import Interpreter
@ -89,6 +88,8 @@ class CustomStateClassificationProcessor(RealTimeProcessorApi):
self.labelmap = {} self.labelmap = {}
return return
# Suppress TFLite delegate creation messages that bypass Python logging
with suppress_stderr_during("tflite_interpreter_init"):
self.interpreter = Interpreter( self.interpreter = Interpreter(
model_path=model_path, model_path=model_path,
num_threads=2, num_threads=2,
@ -377,7 +378,6 @@ class CustomObjectClassificationProcessor(RealTimeProcessorApi):
self.__build_detector() self.__build_detector()
@redirect_output_to_logger(logger, logging.DEBUG)
def __build_detector(self) -> None: def __build_detector(self) -> None:
model_path = os.path.join(self.model_dir, "model.tflite") model_path = os.path.join(self.model_dir, "model.tflite")
labelmap_path = os.path.join(self.model_dir, "labelmap.txt") labelmap_path = os.path.join(self.model_dir, "labelmap.txt")
@ -389,6 +389,8 @@ class CustomObjectClassificationProcessor(RealTimeProcessorApi):
self.labelmap = {} self.labelmap = {}
return return
# Suppress TFLite delegate creation messages that bypass Python logging
with suppress_stderr_during("tflite_interpreter_init"):
self.interpreter = Interpreter( self.interpreter = Interpreter(
model_path=model_path, model_path=model_path,
num_threads=2, num_threads=2,

View File

@ -5,7 +5,7 @@ from typing_extensions import Literal
from frigate.detectors.detection_api import DetectionApi from frigate.detectors.detection_api import DetectionApi
from frigate.detectors.detector_config import BaseDetectorConfig from frigate.detectors.detector_config import BaseDetectorConfig
from frigate.log import redirect_output_to_logger from frigate.log import suppress_stderr_during
from ..detector_utils import tflite_detect_raw, tflite_init from ..detector_utils import tflite_detect_raw, tflite_init
@ -28,8 +28,9 @@ class CpuDetectorConfig(BaseDetectorConfig):
class CpuTfl(DetectionApi): class CpuTfl(DetectionApi):
type_key = DETECTOR_KEY type_key = DETECTOR_KEY
@redirect_output_to_logger(logger, logging.DEBUG)
def __init__(self, detector_config: CpuDetectorConfig): def __init__(self, detector_config: CpuDetectorConfig):
# Suppress TFLite delegate creation messages that bypass Python logging
with suppress_stderr_during("tflite_interpreter_init"):
interpreter = Interpreter( interpreter = Interpreter(
model_path=detector_config.model.path, model_path=detector_config.model.path,
num_threads=detector_config.num_threads or 3, num_threads=detector_config.num_threads or 3,

View File

@ -8,7 +8,7 @@ import numpy as np
from frigate.const import MODEL_CACHE_DIR from frigate.const import MODEL_CACHE_DIR
from frigate.detectors.detection_runners import get_optimized_runner from frigate.detectors.detection_runners import get_optimized_runner
from frigate.embeddings.types import EnrichmentModelTypeEnum from frigate.embeddings.types import EnrichmentModelTypeEnum
from frigate.log import redirect_output_to_logger from frigate.log import suppress_stderr_during
from frigate.util.downloader import ModelDownloader from frigate.util.downloader import ModelDownloader
from ...config import FaceRecognitionConfig from ...config import FaceRecognitionConfig
@ -57,12 +57,13 @@ class FaceNetEmbedding(BaseEmbedding):
self._load_model_and_utils() self._load_model_and_utils()
logger.debug(f"models are already downloaded for {self.model_name}") logger.debug(f"models are already downloaded for {self.model_name}")
@redirect_output_to_logger(logger, logging.DEBUG)
def _load_model_and_utils(self): def _load_model_and_utils(self):
if self.runner is None: if self.runner is None:
if self.downloader: if self.downloader:
self.downloader.wait_for_download() self.downloader.wait_for_download()
# Suppress TFLite delegate creation messages that bypass Python logging
with suppress_stderr_during("tflite_interpreter_init"):
self.runner = Interpreter( self.runner = Interpreter(
model_path=os.path.join(MODEL_CACHE_DIR, "facedet/facenet.tflite"), model_path=os.path.join(MODEL_CACHE_DIR, "facedet/facenet.tflite"),
num_threads=2, num_threads=2,

View File

@ -34,7 +34,7 @@ from frigate.data_processing.real_time.audio_transcription import (
AudioTranscriptionRealTimeProcessor, AudioTranscriptionRealTimeProcessor,
) )
from frigate.ffmpeg_presets import parse_preset_input from frigate.ffmpeg_presets import parse_preset_input
from frigate.log import LogPipe, redirect_output_to_logger from frigate.log import LogPipe, suppress_stderr_during
from frigate.object_detection.base import load_labels from frigate.object_detection.base import load_labels
from frigate.util.builtin import get_ffmpeg_arg_list from frigate.util.builtin import get_ffmpeg_arg_list
from frigate.util.process import FrigateProcess from frigate.util.process import FrigateProcess
@ -367,16 +367,16 @@ class AudioEventMaintainer(threading.Thread):
class AudioTfl: class AudioTfl:
@redirect_output_to_logger(logger, logging.DEBUG)
def __init__(self, stop_event: threading.Event, num_threads=2): def __init__(self, stop_event: threading.Event, num_threads=2):
self.stop_event = stop_event self.stop_event = stop_event
self.num_threads = num_threads self.num_threads = num_threads
self.labels = load_labels("/audio-labelmap.txt", prefill=521) self.labels = load_labels("/audio-labelmap.txt", prefill=521)
# Suppress TFLite delegate creation messages that bypass Python logging
with suppress_stderr_during("tflite_interpreter_init"):
self.interpreter = Interpreter( self.interpreter = Interpreter(
model_path="/cpu_audio_model.tflite", model_path="/cpu_audio_model.tflite",
num_threads=self.num_threads, num_threads=self.num_threads,
) )
self.interpreter.allocate_tensors() self.interpreter.allocate_tensors()
self.tensor_input_details = self.interpreter.get_input_details() self.tensor_input_details = self.interpreter.get_input_details()