mirror of
https://github.com/blakeblackshear/frigate.git
synced 2024-11-21 19:07:46 +01:00
Use different consolidation requirement depending on label (#8249)
This commit is contained in:
parent
ee1e1b748c
commit
e80b6d9e5b
@ -12,7 +12,7 @@ FRIGATE_LOCALHOST = "http://127.0.0.1:5000"
|
|||||||
PLUS_ENV_VAR = "PLUS_API_KEY"
|
PLUS_ENV_VAR = "PLUS_API_KEY"
|
||||||
PLUS_API_HOST = "https://api.frigate.video"
|
PLUS_API_HOST = "https://api.frigate.video"
|
||||||
|
|
||||||
# Attributes
|
# Attribute & Object Consts
|
||||||
|
|
||||||
ATTRIBUTE_LABEL_MAP = {
|
ATTRIBUTE_LABEL_MAP = {
|
||||||
"person": ["face", "amazon"],
|
"person": ["face", "amazon"],
|
||||||
@ -21,6 +21,11 @@ ATTRIBUTE_LABEL_MAP = {
|
|||||||
ALL_ATTRIBUTE_LABELS = [
|
ALL_ATTRIBUTE_LABELS = [
|
||||||
item for sublist in ATTRIBUTE_LABEL_MAP.values() for item in sublist
|
item for sublist in ATTRIBUTE_LABEL_MAP.values() for item in sublist
|
||||||
]
|
]
|
||||||
|
LABEL_CONSOLIDATION_MAP = {
|
||||||
|
"car": 0.8,
|
||||||
|
"face": 0.5,
|
||||||
|
}
|
||||||
|
LABEL_CONSOLIDATION_DEFAULT = 0.9
|
||||||
|
|
||||||
# Audio Consts
|
# Audio Consts
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@ import numpy as np
|
|||||||
from peewee import DoesNotExist
|
from peewee import DoesNotExist
|
||||||
|
|
||||||
from frigate.config import DetectConfig, ModelConfig
|
from frigate.config import DetectConfig, ModelConfig
|
||||||
|
from frigate.const import LABEL_CONSOLIDATION_DEFAULT, LABEL_CONSOLIDATION_MAP
|
||||||
from frigate.detectors.detector_config import PixelFormatEnum
|
from frigate.detectors.detector_config import PixelFormatEnum
|
||||||
from frigate.models import Event, Regions, Timeline
|
from frigate.models import Event, Regions, Timeline
|
||||||
from frigate.util.image import (
|
from frigate.util.image import (
|
||||||
@ -426,18 +427,21 @@ def get_consolidated_object_detections(detected_object_groups):
|
|||||||
sorted_by_area = sorted(group, key=lambda g: g[3])
|
sorted_by_area = sorted(group, key=lambda g: g[3])
|
||||||
|
|
||||||
for current_detection_idx in range(0, len(sorted_by_area)):
|
for current_detection_idx in range(0, len(sorted_by_area)):
|
||||||
current_detection = sorted_by_area[current_detection_idx][2]
|
current_detection = sorted_by_area[current_detection_idx]
|
||||||
|
current_label = current_detection[0]
|
||||||
|
current_box = current_detection[2]
|
||||||
overlap = 0
|
overlap = 0
|
||||||
for to_check_idx in range(
|
for to_check_idx in range(
|
||||||
min(current_detection_idx + 1, len(sorted_by_area)),
|
min(current_detection_idx + 1, len(sorted_by_area)),
|
||||||
len(sorted_by_area),
|
len(sorted_by_area),
|
||||||
):
|
):
|
||||||
to_check = sorted_by_area[to_check_idx][2]
|
to_check = sorted_by_area[to_check_idx][2]
|
||||||
intersect_box = intersection(current_detection, to_check)
|
intersect_box = intersection(current_box, to_check)
|
||||||
# if 90% of smaller detection is inside of another detection, consolidate
|
# if 90% of smaller detection is inside of another detection, consolidate
|
||||||
if (
|
if intersect_box is not None and area(intersect_box) / area(
|
||||||
intersect_box is not None
|
current_box
|
||||||
and area(intersect_box) / area(current_detection) > 0.9
|
) > LABEL_CONSOLIDATION_MAP.get(
|
||||||
|
current_label, LABEL_CONSOLIDATION_DEFAULT
|
||||||
):
|
):
|
||||||
overlap = 1
|
overlap = 1
|
||||||
break
|
break
|
||||||
|
Loading…
Reference in New Issue
Block a user