mirror of
				https://github.com/blakeblackshear/frigate.git
				synced 2025-10-27 10:52:11 +01:00 
			
		
		
		
	move colormap to config
This commit is contained in:
		
							parent
							
								
									bbf0fc8324
								
							
						
					
					
						commit
						1c85f774eb
					
				@ -1,18 +1,18 @@
 | 
			
		||||
from __future__ import annotations
 | 
			
		||||
 | 
			
		||||
from enum import Enum
 | 
			
		||||
import json
 | 
			
		||||
import logging
 | 
			
		||||
import os
 | 
			
		||||
from enum import Enum
 | 
			
		||||
from typing import Dict, List, Optional, Tuple, Union
 | 
			
		||||
 | 
			
		||||
import matplotlib.pyplot as plt
 | 
			
		||||
import numpy as np
 | 
			
		||||
import yaml
 | 
			
		||||
from pydantic import BaseModel, Field, validator
 | 
			
		||||
from pydantic.fields import PrivateAttr
 | 
			
		||||
import yaml
 | 
			
		||||
 | 
			
		||||
from frigate.const import BASE_DIR, RECORD_DIR, CACHE_DIR
 | 
			
		||||
from frigate.const import BASE_DIR, CACHE_DIR, RECORD_DIR
 | 
			
		||||
from frigate.edgetpu import load_labels
 | 
			
		||||
from frigate.util import create_mask, deep_merge
 | 
			
		||||
 | 
			
		||||
@ -578,11 +578,16 @@ class ModelConfig(BaseModel):
 | 
			
		||||
        default_factory=dict, title="Labelmap customization."
 | 
			
		||||
    )
 | 
			
		||||
    _merged_labelmap: Optional[Dict[int, str]] = PrivateAttr()
 | 
			
		||||
    _colormap: Dict[int, Tuple[int, int, int]] = PrivateAttr()
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def merged_labelmap(self) -> Dict[int, str]:
 | 
			
		||||
        return self._merged_labelmap
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def colormap(self) -> Dict[int, tuple[int, int, int]]:
 | 
			
		||||
        return self._colormap
 | 
			
		||||
 | 
			
		||||
    def __init__(self, **config):
 | 
			
		||||
        super().__init__(**config)
 | 
			
		||||
 | 
			
		||||
@ -591,6 +596,12 @@ class ModelConfig(BaseModel):
 | 
			
		||||
            **config.get("labelmap", {}),
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        cmap = plt.cm.get_cmap("tab10", len(self._merged_labelmap.keys()))
 | 
			
		||||
 | 
			
		||||
        self._colormap = {}
 | 
			
		||||
        for key, val in self._merged_labelmap.items():
 | 
			
		||||
            self._colormap[val] = tuple(int(round(255 * c)) for c in cmap(key)[:3])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class LogLevelEnum(str, Enum):
 | 
			
		||||
    debug = "debug"
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,5 @@
 | 
			
		||||
import copy
 | 
			
		||||
import base64
 | 
			
		||||
import copy
 | 
			
		||||
import datetime
 | 
			
		||||
import hashlib
 | 
			
		||||
import itertools
 | 
			
		||||
@ -14,30 +14,20 @@ from statistics import mean, median
 | 
			
		||||
from typing import Callable, Dict
 | 
			
		||||
 | 
			
		||||
import cv2
 | 
			
		||||
import matplotlib.pyplot as plt
 | 
			
		||||
import numpy as np
 | 
			
		||||
 | 
			
		||||
from frigate.config import FrigateConfig, CameraConfig
 | 
			
		||||
from frigate.const import RECORD_DIR, CLIPS_DIR, CACHE_DIR
 | 
			
		||||
from frigate.config import CameraConfig, FrigateConfig
 | 
			
		||||
from frigate.const import CACHE_DIR, CLIPS_DIR, RECORD_DIR
 | 
			
		||||
from frigate.edgetpu import load_labels
 | 
			
		||||
from frigate.util import (
 | 
			
		||||
    SharedMemoryFrameManager,
 | 
			
		||||
    calculate_region,
 | 
			
		||||
    draw_box_with_label,
 | 
			
		||||
    draw_timestamp,
 | 
			
		||||
    calculate_region,
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
logger = logging.getLogger(__name__)
 | 
			
		||||
 | 
			
		||||
PATH_TO_LABELS = "/labelmap.txt"
 | 
			
		||||
 | 
			
		||||
LABELS = load_labels(PATH_TO_LABELS)
 | 
			
		||||
cmap = plt.cm.get_cmap("tab10", len(LABELS.keys()))
 | 
			
		||||
 | 
			
		||||
COLOR_MAP = {}
 | 
			
		||||
for key, val in LABELS.items():
 | 
			
		||||
    COLOR_MAP[val] = tuple(int(round(255 * c)) for c in cmap(key)[:3])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def on_edge(box, frame_shape):
 | 
			
		||||
    if (
 | 
			
		||||
@ -72,9 +62,12 @@ def is_better_thumbnail(current_thumb, new_obj, frame_shape) -> bool:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TrackedObject:
 | 
			
		||||
    def __init__(self, camera, camera_config: CameraConfig, frame_cache, obj_data):
 | 
			
		||||
    def __init__(
 | 
			
		||||
        self, camera, colormap, camera_config: CameraConfig, frame_cache, obj_data
 | 
			
		||||
    ):
 | 
			
		||||
        self.obj_data = obj_data
 | 
			
		||||
        self.camera = camera
 | 
			
		||||
        self.colormap = colormap
 | 
			
		||||
        self.camera_config = camera_config
 | 
			
		||||
        self.frame_cache = frame_cache
 | 
			
		||||
        self.current_zones = []
 | 
			
		||||
@ -247,7 +240,7 @@ class TrackedObject:
 | 
			
		||||
 | 
			
		||||
        if bounding_box:
 | 
			
		||||
            thickness = 2
 | 
			
		||||
            color = COLOR_MAP[self.obj_data["label"]]
 | 
			
		||||
            color = self.colormap[self.obj_data["label"]]
 | 
			
		||||
 | 
			
		||||
            # draw the bounding boxes on the frame
 | 
			
		||||
            box = self.thumbnail_data["box"]
 | 
			
		||||
@ -357,7 +350,7 @@ class CameraState:
 | 
			
		||||
            for obj in tracked_objects.values():
 | 
			
		||||
                if obj["frame_time"] == frame_time:
 | 
			
		||||
                    thickness = 2
 | 
			
		||||
                    color = COLOR_MAP[obj["label"]]
 | 
			
		||||
                    color = self.config.model.colormap[obj["label"]]
 | 
			
		||||
                else:
 | 
			
		||||
                    thickness = 1
 | 
			
		||||
                    color = (255, 0, 0)
 | 
			
		||||
@ -448,7 +441,11 @@ class CameraState:
 | 
			
		||||
 | 
			
		||||
        for id in new_ids:
 | 
			
		||||
            new_obj = tracked_objects[id] = TrackedObject(
 | 
			
		||||
                self.name, self.camera_config, self.frame_cache, current_detections[id]
 | 
			
		||||
                self.name,
 | 
			
		||||
                self.config.model.colormap,
 | 
			
		||||
                self.camera_config,
 | 
			
		||||
                self.frame_cache,
 | 
			
		||||
                current_detections[id],
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
            # call event handlers
 | 
			
		||||
 | 
			
		||||
@ -14,7 +14,7 @@ import numpy as np
 | 
			
		||||
from frigate.config import FRIGATE_CONFIG_SCHEMA, FrigateConfig
 | 
			
		||||
from frigate.edgetpu import LocalObjectDetector
 | 
			
		||||
from frigate.motion import MotionDetector
 | 
			
		||||
from frigate.object_processing import COLOR_MAP, CameraState
 | 
			
		||||
from frigate.object_processing import CameraState
 | 
			
		||||
from frigate.objects import ObjectTracker
 | 
			
		||||
from frigate.util import (
 | 
			
		||||
    DictFrameManager,
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user