From 81f75551ccfb0999c495764ed87deb130a0fb13b Mon Sep 17 00:00:00 2001 From: Rui Alves Date: Fri, 18 Oct 2024 19:55:25 +0100 Subject: [PATCH] Drop significant_motion --- frigate/api/defs/review_query_parameters.py | 2 +- frigate/api/defs/review_responses.py | 9 +- frigate/api/defs/severity_enum.py | 7 -- frigate/api/review.py | 115 -------------------- frigate/models.py | 2 +- web/src/pages/Events.tsx | 4 - web/src/types/review.ts | 1 - web/src/views/events/EventView.tsx | 2 - 8 files changed, 3 insertions(+), 139 deletions(-) delete mode 100644 frigate/api/defs/severity_enum.py diff --git a/frigate/api/defs/review_query_parameters.py b/frigate/api/defs/review_query_parameters.py index acc5eb2c9..4361d313c 100644 --- a/frigate/api/defs/review_query_parameters.py +++ b/frigate/api/defs/review_query_parameters.py @@ -3,7 +3,7 @@ from typing import Union from pydantic import BaseModel from pydantic.json_schema import SkipJsonSchema -from frigate.api.defs.severity_enum import SeverityEnum +from frigate.review.maintainer import SeverityEnum class ReviewQueryParams(BaseModel): diff --git a/frigate/api/defs/review_responses.py b/frigate/api/defs/review_responses.py index 0119214dc..bf15c2070 100644 --- a/frigate/api/defs/review_responses.py +++ b/frigate/api/defs/review_responses.py @@ -3,7 +3,7 @@ from typing import Dict from pydantic import BaseModel, Json -from frigate.api.defs.severity_enum import SeverityEnum +from frigate.review.maintainer import SeverityEnum class ReviewSegmentResponse(BaseModel): @@ -20,7 +20,6 @@ class ReviewSegmentResponse(BaseModel): class Last24HoursReview(BaseModel): reviewed_alert: int reviewed_detection: int - reviewed_motion: int total_alert: int total_detection: int total_motion: int @@ -30,7 +29,6 @@ class DayReview(BaseModel): day: datetime reviewed_alert: int reviewed_detection: int - reviewed_motion: int total_alert: int total_detection: int total_motion: int @@ -45,8 +43,3 @@ class ReviewActivityMotionResponse(BaseModel): start_time: int motion: float camera: str - - -class ReviewActivityAudioResponse(BaseModel): - start_time: int - audio: int diff --git a/frigate/api/defs/severity_enum.py b/frigate/api/defs/severity_enum.py deleted file mode 100644 index c32b80018..000000000 --- a/frigate/api/defs/severity_enum.py +++ /dev/null @@ -1,7 +0,0 @@ -from enum import Enum - - -class SeverityEnum(str, Enum): - alert = "alert" - detection = "detection" - significant_motion = "significant_motion" diff --git a/frigate/api/review.py b/frigate/api/review.py index 0a36a99d0..e13b977d8 100644 --- a/frigate/api/review.py +++ b/frigate/api/review.py @@ -1,7 +1,6 @@ """Review apis.""" import datetime -import json import logging from functools import reduce from pathlib import Path @@ -24,7 +23,6 @@ from frigate.api.defs.review_query_parameters import ( ReviewSummaryQueryParams, ) from frigate.api.defs.review_responses import ( - ReviewActivityAudioResponse, ReviewActivityMotionResponse, ReviewSegmentResponse, ReviewSummaryResponse, @@ -185,18 +183,6 @@ def review_summary(params: ReviewSummaryQueryParams = Depends()): 0, ) ).alias("reviewed_detection"), - fn.SUM( - Case( - None, - [ - ( - (ReviewSegment.severity == "significant_motion"), - ReviewSegment.has_been_reviewed, - ) - ], - 0, - ) - ).alias("reviewed_motion"), fn.SUM( Case( None, @@ -221,18 +207,6 @@ def review_summary(params: ReviewSummaryQueryParams = Depends()): 0, ) ).alias("total_detection"), - fn.SUM( - Case( - None, - [ - ( - (ReviewSegment.severity == "significant_motion"), - 1, - ) - ], - 0, - ) - ).alias("total_motion"), ) .where(reduce(operator.and_, clauses)) .dicts() @@ -294,18 +268,6 @@ def review_summary(params: ReviewSummaryQueryParams = Depends()): 0, ) ).alias("reviewed_detection"), - fn.SUM( - Case( - None, - [ - ( - (ReviewSegment.severity == "significant_motion"), - ReviewSegment.has_been_reviewed, - ) - ], - 0, - ) - ).alias("reviewed_motion"), fn.SUM( Case( None, @@ -330,18 +292,6 @@ def review_summary(params: ReviewSummaryQueryParams = Depends()): 0, ) ).alias("total_detection"), - fn.SUM( - Case( - None, - [ - ( - (ReviewSegment.severity == "significant_motion"), - 1, - ) - ], - 0, - ) - ).alias("total_motion"), ) .where(reduce(operator.and_, clauses)) .group_by( @@ -495,71 +445,6 @@ def motion_activity(params: ReviewActivityMotionQueryParams = Depends()): return JSONResponse(content=normalized) -@router.get("/review/activity/audio", response_model=list[ReviewActivityAudioResponse]) -def audio_activity(params: ReviewActivityMotionQueryParams = Depends()): - """Get motion and audio activity.""" - cameras = params.cameras - before = params.before or datetime.datetime.now().timestamp() - after = ( - params.after - or (datetime.datetime.now() - datetime.timedelta(hours=1)).timestamp() - ) - # get scale in seconds - scale = params.scale - - clauses = [(Recordings.start_time > after) & (Recordings.end_time < before)] - - if cameras != "all": - camera_list = cameras.split(",") - clauses.append((Recordings.camera << camera_list)) - - all_recordings: list[Recordings] = ( - Recordings.select( - Recordings.start_time, - Recordings.duration, - Recordings.objects, - Recordings.dBFS, - ) - .where(reduce(operator.and_, clauses)) - .order_by(Recordings.start_time.asc()) - .iterator() - ) - - # format is: { timestamp: segment_start_ts, motion: [0-100], audio: [0 - -100] } - # periods where active objects / audio was detected will cause audio to be scaled down - data: list[dict[str, float]] = [] - - for rec in all_recordings: - data.append( - { - "start_time": rec.start_time, - "audio": rec.dBFS if rec.objects == 0 else 0, - } - ) - - # resample data using pandas to get activity on scaled basis - df = pd.DataFrame(data, columns=["start_time", "audio"]) - df = df.astype(dtype={"audio": "float16"}) - - # set date as datetime index - df["start_time"] = pd.to_datetime(df["start_time"], unit="s") - df.set_index(["start_time"], inplace=True) - - # normalize data - df = df.resample(f"{scale}S").mean().fillna(0.0) - # FIXME: If min/max audio is the same then we get division by 0 and as such audio is 'nan' - df["audio"] = ( - (df["audio"] - df["audio"].max()) - / (df["audio"].min() - df["audio"].max()) - * -100 - ) - - # change types for output - df.index = df.index.astype(int) // (10**9) - normalized = json.loads(df.reset_index().to_json(orient="records")) - return JSONResponse(content=normalized) - - @router.get("/review/event/{event_id}", response_model=ReviewSegmentResponse) def get_review_from_event(event_id: str): try: diff --git a/frigate/models.py b/frigate/models.py index c73033b3e..62bbf0bd3 100644 --- a/frigate/models.py +++ b/frigate/models.py @@ -93,7 +93,7 @@ class ReviewSegment(Model): # type: ignore[misc] start_time = DateTimeField() end_time = DateTimeField() has_been_reviewed = BooleanField(default=False) - severity = CharField(max_length=30) # alert, detection, significant_motion + severity = CharField(max_length=30) # alert, detection thumb_path = CharField(unique=True) data = JSONField() # additional data about detection like list of labels, zone, areas of significant motion diff --git a/web/src/pages/Events.tsx b/web/src/pages/Events.tsx index fa582ca3b..8c6f3cd38 100644 --- a/web/src/pages/Events.tsx +++ b/web/src/pages/Events.tsx @@ -407,10 +407,6 @@ export default function Events() { review.severity == "detection" ? item.reviewed_detection + 1 : item.reviewed_detection, - reviewed_motion: - review.severity == "significant_motion" - ? item.reviewed_motion + 1 - : item.reviewed_motion, }, }; }, diff --git a/web/src/types/review.ts b/web/src/types/review.ts index d1d03e637..3d5f9903e 100644 --- a/web/src/types/review.ts +++ b/web/src/types/review.ts @@ -42,7 +42,6 @@ type ReviewSummaryDay = { day: string; reviewed_alert: number; reviewed_detection: number; - reviewed_motion: number; total_alert: number; total_detection: number; total_motion: number; diff --git a/web/src/views/events/EventView.tsx b/web/src/views/events/EventView.tsx index 6d2d99fe6..d5dd3f41b 100644 --- a/web/src/views/events/EventView.tsx +++ b/web/src/views/events/EventView.tsx @@ -117,13 +117,11 @@ export default function EventView({ return { alert: summary.total_alert ?? 0, detection: summary.total_detection ?? 0, - significant_motion: summary.total_motion ?? 0, }; } else { return { alert: summary.total_alert - summary.reviewed_alert, detection: summary.total_detection - summary.reviewed_detection, - significant_motion: summary.total_motion - summary.reviewed_motion, }; } }, [filter, showReviewed, reviewSummary]);