mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-16 08:05:22 +03:00
backend score filtering and sorting
This commit is contained in:
parent
e836523bc3
commit
1d0ae52046
@ -45,6 +45,9 @@ class EventsSearchQueryParams(BaseModel):
|
|||||||
before: Optional[float] = None
|
before: Optional[float] = None
|
||||||
time_range: Optional[str] = DEFAULT_TIME_RANGE
|
time_range: Optional[str] = DEFAULT_TIME_RANGE
|
||||||
timezone: Optional[str] = "utc"
|
timezone: Optional[str] = "utc"
|
||||||
|
min_score: Optional[float] = None
|
||||||
|
max_score: Optional[float] = None
|
||||||
|
sort: Optional[str] = None
|
||||||
|
|
||||||
|
|
||||||
class EventsSummaryQueryParams(BaseModel):
|
class EventsSummaryQueryParams(BaseModel):
|
||||||
|
|||||||
@ -348,6 +348,7 @@ def events_search(request: Request, params: EventsSearchQueryParams = Depends())
|
|||||||
search_type = params.search_type
|
search_type = params.search_type
|
||||||
include_thumbnails = params.include_thumbnails
|
include_thumbnails = params.include_thumbnails
|
||||||
limit = params.limit
|
limit = params.limit
|
||||||
|
sort = params.sort
|
||||||
|
|
||||||
# Filters
|
# Filters
|
||||||
cameras = params.cameras
|
cameras = params.cameras
|
||||||
@ -355,6 +356,8 @@ def events_search(request: Request, params: EventsSearchQueryParams = Depends())
|
|||||||
zones = params.zones
|
zones = params.zones
|
||||||
after = params.after
|
after = params.after
|
||||||
before = params.before
|
before = params.before
|
||||||
|
min_score = params.min_score
|
||||||
|
max_score = params.max_score
|
||||||
time_range = params.time_range
|
time_range = params.time_range
|
||||||
|
|
||||||
# for similarity search
|
# for similarity search
|
||||||
@ -430,6 +433,14 @@ def events_search(request: Request, params: EventsSearchQueryParams = Depends())
|
|||||||
if before:
|
if before:
|
||||||
event_filters.append((Event.start_time < before))
|
event_filters.append((Event.start_time < before))
|
||||||
|
|
||||||
|
if min_score is not None and max_score is not None:
|
||||||
|
event_filters.append((Event.data["score"].between(min_score, max_score)))
|
||||||
|
else:
|
||||||
|
if min_score is not None:
|
||||||
|
event_filters.append((Event.data["score"] >= min_score))
|
||||||
|
if max_score is not None:
|
||||||
|
event_filters.append((Event.data["score"] <= max_score))
|
||||||
|
|
||||||
if time_range != DEFAULT_TIME_RANGE:
|
if time_range != DEFAULT_TIME_RANGE:
|
||||||
tz_name = params.timezone
|
tz_name = params.timezone
|
||||||
hour_modifier, minute_modifier, _ = get_tz_modifiers(tz_name)
|
hour_modifier, minute_modifier, _ = get_tz_modifiers(tz_name)
|
||||||
@ -554,11 +565,19 @@ def events_search(request: Request, params: EventsSearchQueryParams = Depends())
|
|||||||
|
|
||||||
processed_events.append(processed_event)
|
processed_events.append(processed_event)
|
||||||
|
|
||||||
# Sort by search distance if search_results are available, otherwise by start_time
|
# Sort by search distance if search_results are available, otherwise by start_time as default
|
||||||
if search_results:
|
if search_results:
|
||||||
processed_events.sort(key=lambda x: x.get("search_distance", float("inf")))
|
processed_events.sort(key=lambda x: x.get("search_distance", float("inf")))
|
||||||
else:
|
else:
|
||||||
processed_events.sort(key=lambda x: x["start_time"], reverse=True)
|
if sort == "score_asc":
|
||||||
|
processed_events.sort(key=lambda x: x["score"])
|
||||||
|
elif sort == "score_desc":
|
||||||
|
processed_events.sort(key=lambda x: x["score"], reverse=True)
|
||||||
|
elif sort == "date_asc":
|
||||||
|
processed_events.sort(key=lambda x: x["start_time"])
|
||||||
|
else:
|
||||||
|
# "date_desc" default
|
||||||
|
processed_events.sort(key=lambda x: x["start_time"], reverse=True)
|
||||||
|
|
||||||
# Limit the number of events returned
|
# Limit the number of events returned
|
||||||
processed_events = processed_events[:limit]
|
processed_events = processed_events[:limit]
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user