diff --git a/frigate/config.py b/frigate/config.py index 387927c6b..32f6af141 100644 --- a/frigate/config.py +++ b/frigate/config.py @@ -1329,7 +1329,7 @@ class FrigateConfig(FrigateBaseModel): ) detector_config.model.compute_model_hash() - if detector_config.type != "cpu": + if detector_config.enable_cpu_fallback and detector_config.type != "cpu": fallback_config = config.copy(deep=True) fallback_config.model = ModelConfig() detector_config.fallback_config = self.generate_detector_config( diff --git a/frigate/detectors/detector_config.py b/frigate/detectors/detector_config.py index ca1915449..839312786 100644 --- a/frigate/detectors/detector_config.py +++ b/frigate/detectors/detector_config.py @@ -139,6 +139,9 @@ class ModelConfig(BaseModel): class BaseDetectorConfig(BaseModel): # the type field must be defined in all subclasses type: str = Field(default="cpu", title="Detector Type") + enable_cpu_fallback: bool = Field( + default=False, title="Fallback to CPU if startup fails" + ) model: ModelConfig = Field( default=None, title="Detector specific model configuration." ) diff --git a/frigate/object_detection.py b/frigate/object_detection.py index cb1dca624..fed8a094a 100644 --- a/frigate/object_detection.py +++ b/frigate/object_detection.py @@ -103,11 +103,16 @@ def run_detector( try: object_detector = LocalObjectDetector(detector_config=detector_config) except Exception as ex: - logger.error(f"Got exception when initializing detector: {ex}, falling back to CPU detector") - - object_detector = LocalObjectDetector(detector_config=detector_config.fallback_config) - using_fallback_detector.value = 1 - + if detector_config.enable_cpu_fallback: + logger.error( + f"Got exception when initializing detector: {ex}, falling back to CPU detector" + ) + object_detector = LocalObjectDetector( + detector_config=detector_config.fallback_config + ) + using_fallback_detector.value = 1 + else: + raise ex outputs = {} for name in out_events.keys():