Drop significant_motion

This commit is contained in:
Rui Alves 2024-10-18 19:55:25 +01:00
parent be68e3690c
commit 81f75551cc
8 changed files with 3 additions and 139 deletions

View File

@ -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):

View File

@ -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

View File

@ -1,7 +0,0 @@
from enum import Enum
class SeverityEnum(str, Enum):
alert = "alert"
detection = "detection"
significant_motion = "significant_motion"

View File

@ -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:

View File

@ -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

View File

@ -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,
},
};
},

View File

@ -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;

View File

@ -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]);