From 22222a71ae9eeb1199a5b9e06e7846e3a2c734e2 Mon Sep 17 00:00:00 2001 From: Blake Blackshear Date: Sun, 30 Apr 2023 14:38:49 -0500 Subject: [PATCH] fix labelmap in config response --- frigate/http.py | 6 ++-- frigate/test/test_config.py | 62 +++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 3 deletions(-) diff --git a/frigate/http.py b/frigate/http.py index 706487e8f..66aaff368 100644 --- a/frigate/http.py +++ b/frigate/http.py @@ -867,9 +867,9 @@ def config(): config["plus"] = {"enabled": current_app.plus_api.is_active()} for detector, detector_config in config["detectors"].items(): - detector_config["model"]["labelmap"] = current_app.frigate_config.detectors[ - detector - ].model.merged_labelmap + detector_config["model"][ + "labelmap" + ] = current_app.frigate_config.model.merged_labelmap return jsonify(config) diff --git a/frigate/test/test_config.py b/frigate/test/test_config.py index a40093139..c21720e39 100644 --- a/frigate/test/test_config.py +++ b/frigate/test/test_config.py @@ -1,3 +1,4 @@ +import json import unittest import numpy as np from pydantic import ValidationError @@ -7,6 +8,7 @@ from frigate.config import ( FrigateConfig, ) from frigate.detectors import DetectorTypeEnum +from frigate.plus import PlusApi from frigate.util import deep_merge, load_config_with_no_duplicates @@ -30,6 +32,32 @@ class TestConfig(unittest.TestCase): }, } + self.plus_model_info = { + "id": "e63b7345cc83a84ed79dedfc99c16616", + "name": "SSDLite Mobiledet", + "description": "Fine tuned model", + "trainDate": "2023-04-28T23:22:01.262Z", + "type": "ssd", + "supportedDetectors": ["edgetpu"], + "width": 320, + "height": 320, + "inputShape": "nhwc", + "pixelFormat": "rgb", + "labelMap": { + "0": "amazon", + "1": "car", + "2": "cat", + "3": "deer", + "4": "dog", + "5": "face", + "6": "fedex", + "7": "license_plate", + "8": "package", + "9": "person", + "10": "ups", + }, + } + def test_config_class(self): frigate_config = FrigateConfig(**self.minimal) assert self.minimal == frigate_config.dict(exclude_unset=True) @@ -815,6 +843,40 @@ class TestConfig(unittest.TestCase): runtime_config = frigate_config.runtime_config() assert runtime_config.model.merged_labelmap[0] == "person" + def test_plus_labelmap(self): + with open("/config/model_cache/test", "w") as f: + json.dump(self.plus_model_info, f) + with open("/config/model_cache/test.json", "w") as f: + json.dump(self.plus_model_info, f) + + config = { + "mqtt": {"host": "mqtt"}, + "model": {"path": "plus://test"}, + "cameras": { + "back": { + "ffmpeg": { + "inputs": [ + { + "path": "rtsp://10.0.0.1:554/video", + "roles": ["detect"], + }, + ] + }, + "detect": { + "height": 1080, + "width": 1920, + "fps": 5, + }, + } + }, + } + + frigate_config = FrigateConfig(**config) + assert config == frigate_config.dict(exclude_unset=True) + + runtime_config = frigate_config.runtime_config(PlusApi()) + assert runtime_config.model.merged_labelmap[0] == "amazon" + def test_fails_on_invalid_role(self): config = { "mqtt": {"host": "mqtt"},