Improve logging (#18867)

* Ignore numpy get limits warning

* Add function wrapper to redirect stdout and stderr to logpipe

* Save stderr too

* Add more to catch

* run logpipe

* Use other logging redirect class

* Use other logging redirect class

* add decorator for redirecting c/c++ level output to logger

* fix typing

---------

Co-authored-by: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com>
This commit is contained in:
Nicolas Mowen
2025-06-25 07:24:45 -06:00
committed by Blake Blackshear
parent da0248db15
commit ec6c04e49a
7 changed files with 206 additions and 18 deletions

View File

@@ -1,7 +1,7 @@
"""Util for classification models."""
import logging
import os
import sys
import cv2
import numpy as np
@@ -9,6 +9,7 @@ import numpy as np
from frigate.comms.embeddings_updater import EmbeddingsRequestEnum, EmbeddingsRequestor
from frigate.comms.inter_process import InterProcessRequestor
from frigate.const import CLIPS_DIR, MODEL_CACHE_DIR, UPDATE_MODEL_STATE
from frigate.log import redirect_output_to_logger
from frigate.types import ModelStatusTypesEnum
from frigate.util.process import FrigateProcess
@@ -16,6 +17,8 @@ BATCH_SIZE = 16
EPOCHS = 50
LEARNING_RATE = 0.001
logger = logging.getLogger(__name__)
def __generate_representative_dataset_factory(dataset_dir: str):
def generate_representative_dataset():
@@ -36,6 +39,7 @@ def __generate_representative_dataset_factory(dataset_dir: str):
return generate_representative_dataset
@redirect_output_to_logger(logger, logging.DEBUG)
def __train_classification_model(model_name: str) -> bool:
"""Train a classification model."""
@@ -55,14 +59,6 @@ def __train_classification_model(model_name: str) -> bool:
]
)
# TF and Keras are very loud with logging
# we want to avoid these logs so we
# temporarily redirect stdout / stderr
original_stdout = sys.stdout
original_stderr = sys.stderr
sys.stdout = open(os.devnull, "w")
sys.stderr = open(os.devnull, "w")
# Start with imagenet base model with 35% of channels in each layer
base_model = MobileNetV2(
input_shape=(224, 224, 3),
@@ -124,10 +120,6 @@ def __train_classification_model(model_name: str) -> bool:
with open(os.path.join(model_dir, "model.tflite"), "wb") as f:
f.write(tflite_model)
# restore original stdout / stderr
sys.stdout = original_stdout
sys.stderr = original_stderr
@staticmethod
def kickoff_model_training(
@@ -146,6 +138,7 @@ def kickoff_model_training(
# tensorflow will free CPU / GPU memory
# upon training completion
training_process = FrigateProcess(
None,
target=__train_classification_model,
name=f"model_training:{model_name}",
args=(model_name,),