forked from Github/frigate
Review improvements (#11879)
* Update segment even when number of active objects is the same * add score to frigate+ chip * Add support for selecting zones * Add api support for filtering on zones * Adjust UI * Update filtering logic * Clean up
This commit is contained in:
@@ -22,6 +22,7 @@ ReviewBp = Blueprint("reviews", __name__)
|
||||
def review():
|
||||
cameras = request.args.get("cameras", "all")
|
||||
labels = request.args.get("labels", "all")
|
||||
zones = request.args.get("zones", "all")
|
||||
reviewed = request.args.get("reviewed", type=int, default=0)
|
||||
limit = request.args.get("limit", type=int, default=None)
|
||||
severity = request.args.get("severity", None)
|
||||
@@ -60,6 +61,20 @@ def review():
|
||||
label_clause = reduce(operator.or_, label_clauses)
|
||||
clauses.append((label_clause))
|
||||
|
||||
if zones != "all":
|
||||
# use matching so segments with multiple zones
|
||||
# still match on a search where any zone matches
|
||||
zone_clauses = []
|
||||
filtered_zones = zones.split(",")
|
||||
|
||||
for zone in filtered_zones:
|
||||
zone_clauses.append(
|
||||
(ReviewSegment.data["zones"].cast("text") % f'*"{zone}"*')
|
||||
)
|
||||
|
||||
zone_clause = reduce(operator.or_, zone_clauses)
|
||||
clauses.append((zone_clause))
|
||||
|
||||
if reviewed == 0:
|
||||
clauses.append((ReviewSegment.has_been_reviewed == False))
|
||||
|
||||
@@ -96,6 +111,7 @@ def review_summary():
|
||||
|
||||
cameras = request.args.get("cameras", "all")
|
||||
labels = request.args.get("labels", "all")
|
||||
zones = request.args.get("zones", "all")
|
||||
|
||||
clauses = [(ReviewSegment.start_time > day_ago)]
|
||||
|
||||
@@ -118,6 +134,20 @@ def review_summary():
|
||||
label_clause = reduce(operator.or_, label_clauses)
|
||||
clauses.append((label_clause))
|
||||
|
||||
if zones != "all":
|
||||
# use matching so segments with multiple zones
|
||||
# still match on a search where any zone matches
|
||||
zone_clauses = []
|
||||
filtered_zones = zones.split(",")
|
||||
|
||||
for zone in filtered_zones:
|
||||
zone_clauses.append(
|
||||
(ReviewSegment.data["zones"].cast("text") % f'*"{zone}"*')
|
||||
)
|
||||
|
||||
zone_clause = reduce(operator.or_, zone_clauses)
|
||||
clauses.append((zone_clause))
|
||||
|
||||
last_24 = (
|
||||
ReviewSegment.select(
|
||||
fn.SUM(
|
||||
|
||||
@@ -242,6 +242,8 @@ class ReviewSegmentMaintainer(threading.Thread):
|
||||
active_objects = get_active_objects(frame_time, camera_config, objects)
|
||||
|
||||
if len(active_objects) > 0:
|
||||
should_update = False
|
||||
|
||||
if frame_time > segment.last_update:
|
||||
segment.last_update = frame_time
|
||||
|
||||
@@ -270,12 +272,16 @@ class ReviewSegmentMaintainer(threading.Thread):
|
||||
)
|
||||
):
|
||||
segment.severity = SeverityEnum.alert
|
||||
should_update = True
|
||||
|
||||
# keep zones up to date
|
||||
if len(object["current_zones"]) > 0:
|
||||
segment.zones.update(object["current_zones"])
|
||||
|
||||
if len(active_objects) > segment.frame_active_count:
|
||||
should_update = True
|
||||
|
||||
if should_update:
|
||||
try:
|
||||
frame_id = f"{camera_config.name}{frame_time}"
|
||||
yuv_frame = self.frame_manager.get(
|
||||
|
||||
Reference in New Issue
Block a user