diff --git a/frigate/config/config.py b/frigate/config/config.py index db450ffcf3..04dd46a67a 100644 --- a/frigate/config/config.py +++ b/frigate/config/config.py @@ -80,12 +80,12 @@ logger = logging.getLogger(__name__) yaml = YAML() -DEFAULT_DETECTORS = { - "ov": { - "type": "openvino", - "device": "CPU", - } -} +# Pydantic field default applied when an existing config omits `detectors:`. +# Kept as cpu tflite for backwards compatibility with 0.17 configs. +DEFAULT_DETECTORS = {"cpu": {"type": "cpu"}} + +# Used by the openvino branch below and rendered into the new-config YAML +# template so first-time setups default to openvino on CPU. DEFAULT_MODEL = { "width": 300, "height": 300, @@ -94,6 +94,7 @@ DEFAULT_MODEL = { "path": "/openvino-model/ssdlite_mobilenet_v2.xml", "labelmap_path": "/openvino-model/coco_91cl_bkgr.txt", } +NEW_CONFIG_DETECTORS = {"ov": {"type": "openvino", "device": "CPU"}} DEFAULT_DETECT_DIMENSIONS = {"width": 1280, "height": 720} @@ -109,7 +110,7 @@ DEFAULT_CONFIG = f""" mqtt: enabled: False -{_render_default_yaml({"detectors": DEFAULT_DETECTORS, "model": DEFAULT_MODEL})} +{_render_default_yaml({"detectors": NEW_CONFIG_DETECTORS, "model": DEFAULT_MODEL})} cameras: {{}} # No cameras defined, UI wizard should be used version: {CURRENT_CONFIG_VERSION} """ @@ -708,14 +709,6 @@ class FrigateConfig(FrigateBaseModel): detector_config.model = model self.detectors[key] = detector_config - # If the top-level model is unset, adopt the first detector's resolved - # model so worker processes (which receive self.model) agree with the - # dimensions used to size the detection shared memory in start_detectors. - if not self.model.model_dump(exclude_unset=True, warnings="none") and self.detectors: - first_detector = next(iter(self.detectors.values())) - if first_detector.model is not None: - self.model = first_detector.model - for name, camera in self.cameras.items(): modified_global_config = global_config.copy() diff --git a/frigate/test/test_config.py b/frigate/test/test_config.py index 1469924b9c..48553465d3 100644 --- a/frigate/test/test_config.py +++ b/frigate/test/test_config.py @@ -64,9 +64,9 @@ class TestConfig(unittest.TestCase): def test_config_class(self): frigate_config = FrigateConfig(**self.minimal) - assert "ov" in frigate_config.detectors.keys() - assert frigate_config.detectors["ov"].type == DetectorTypeEnum.openvino - assert frigate_config.detectors["ov"].model.width == 300 + assert "cpu" in frigate_config.detectors.keys() + assert frigate_config.detectors["cpu"].type == DetectorTypeEnum.cpu + assert frigate_config.detectors["cpu"].model.width == 320 @patch("frigate.detectors.detector_config.load_labels") def test_detector_custom_model_path(self, mock_labels): @@ -964,11 +964,8 @@ class TestConfig(unittest.TestCase): }, } - # With no model defined, the top-level model adopts the default - # detector's resolved model (openvino + ssdlite_mobilenet_v2 with the - # coco_91cl_bkgr labelmap, which has __background__ at index 0). frigate_config = FrigateConfig(**config) - assert frigate_config.model.merged_labelmap[1] == "person" + assert frigate_config.model.merged_labelmap[0] == "person" def test_default_labelmap(self): config = {