switch timeline events to x,y,w,h

This commit is contained in:
Blake Blackshear 2023-04-23 15:00:17 -05:00
parent ce7f908fbb
commit edd80bb81c
3 changed files with 34 additions and 69 deletions

View File

@ -12,6 +12,8 @@ from frigate.models import Timeline
from multiprocessing.queues import Queue from multiprocessing.queues import Queue
from multiprocessing.synchronize import Event as MpEvent from multiprocessing.synchronize import Event as MpEvent
from frigate.util import to_relative_box
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -64,77 +66,36 @@ class TimelineProcessor(threading.Thread):
"""Handle object detection.""" """Handle object detection."""
camera_config = self.config.cameras[camera] camera_config = self.config.cameras[camera]
timeline_entry = {
Timeline.timestamp: event_data["frame_time"],
Timeline.camera: camera,
Timeline.source: "tracked_object",
Timeline.source_id: event_data["id"],
Timeline.data: {
"box": to_relative_box(
camera_config.detect.width,
camera_config.detect.height,
event_data["box"],
),
"label": event_data["label"],
"region": to_relative_box(
camera_config.detect.width,
camera_config.detect.height,
event_data["region"],
),
},
}
if event_type == "start": if event_type == "start":
Timeline.insert( timeline_entry[Timeline.class_type] = "visible"
timestamp=event_data["frame_time"], Timeline.insert(timeline_entry).execute()
camera=camera,
source="tracked_object",
source_id=event_data["id"],
class_type="visible",
data={
"box": [
event_data["box"][0] / camera_config.detect.width,
event_data["box"][1] / camera_config.detect.height,
event_data["box"][2] / camera_config.detect.width,
event_data["box"][3] / camera_config.detect.height,
],
"label": event_data["label"],
"region": [
event_data["region"][0] / camera_config.detect.width,
event_data["region"][1] / camera_config.detect.height,
event_data["region"][2] / camera_config.detect.width,
event_data["region"][3] / camera_config.detect.height,
],
},
).execute()
elif ( elif (
event_type == "update" event_type == "update"
and prev_event_data["current_zones"] != event_data["current_zones"] and prev_event_data["current_zones"] != event_data["current_zones"]
and len(event_data["current_zones"]) > 0 and len(event_data["current_zones"]) > 0
): ):
Timeline.insert( timeline_entry[Timeline.class_type] = "entered_zone"
timestamp=event_data["frame_time"], timeline_entry[Timeline.data]["zones"] = event_data["current_zones"]
camera=camera, Timeline.insert(timeline_entry).execute()
source="tracked_object",
source_id=event_data["id"],
class_type="entered_zone",
data={
"box": [
event_data["box"][0] / camera_config.detect.width,
event_data["box"][1] / camera_config.detect.height,
event_data["box"][2] / camera_config.detect.width,
event_data["box"][3] / camera_config.detect.height,
],
"label": event_data["label"],
"region": [
event_data["region"][0] / camera_config.detect.width,
event_data["region"][1] / camera_config.detect.height,
event_data["region"][2] / camera_config.detect.width,
event_data["region"][3] / camera_config.detect.height,
],
"zones": event_data["current_zones"],
},
).execute()
elif event_type == "end": elif event_type == "end":
Timeline.insert( timeline_entry[Timeline.class_type] = "gone"
timestamp=event_data["frame_time"], Timeline.insert(timeline_entry).execute()
camera=camera,
source="tracked_object",
source_id=event_data["id"],
class_type="gone",
data={
"box": [
event_data["box"][0] / camera_config.detect.width,
event_data["box"][1] / camera_config.detect.height,
event_data["box"][2] / camera_config.detect.width,
event_data["box"][3] / camera_config.detect.height,
],
"label": event_data["label"],
"region": [
event_data["region"][0] / camera_config.detect.width,
event_data["region"][1] / camera_config.detect.height,
event_data["region"][2] / camera_config.detect.width,
event_data["region"][3] / camera_config.detect.height,
],
},
).execute()

View File

@ -711,8 +711,12 @@ export default function Events({ path, ...props }) {
style={{ style={{
left: `${Math.round(eventOverlay.data.box[0] * 100)}%`, left: `${Math.round(eventOverlay.data.box[0] * 100)}%`,
top: `${Math.round(eventOverlay.data.box[1] * 100)}%`, top: `${Math.round(eventOverlay.data.box[1] * 100)}%`,
right: `${Math.round((1 - eventOverlay.data.box[2]) * 100)}%`, right: `${Math.round(
bottom: `${Math.round((1 - eventOverlay.data.box[3]) * 100)}%`, (1 - eventOverlay.data.box[2] - eventOverlay.data.box[0]) * 100
)}%`,
bottom: `${Math.round(
(1 - eventOverlay.data.box[3] - eventOverlay.data.box[1]) * 100
)}%`,
}} }}
> >
{eventOverlay.class_type == 'entered_zone' ? ( {eventOverlay.class_type == 'entered_zone' ? (