This commit is contained in:
Josh Hawkins 2024-09-23 17:07:27 -05:00
parent 0e312af43b
commit 164f1b8545
4 changed files with 73 additions and 77 deletions

View File

@ -947,19 +947,18 @@ def set_description(id):
@EventBp.route("/events/<id>/description/regenerate", methods=["PUT"]) @EventBp.route("/events/<id>/description/regenerate", methods=["PUT"])
def regenerate_description(id): def regenerate_description(id):
# try: try:
# event: Event = Event.get(Event.id == id) event: Event = Event.get(Event.id == id)
# except DoesNotExist: except DoesNotExist:
# return make_response( return make_response(
# jsonify({"success": False, "message": "Event " + id + " not found"}), 404 jsonify({"success": False, "message": "Event " + id + " not found"}), 404
# ) )
# if ( if (
# current_app.frigate_config.semantic_search.enabled current_app.frigate_config.semantic_search.enabled
# and current_app.frigate_config.genai.enabled and current_app.frigate_config.genai.enabled
# ): ):
logger.info(id) current_app.event_metadata_updater.publish(event.id)
current_app.event_metadata_updater.publish(id)
return make_response( return make_response(
jsonify( jsonify(

View File

@ -376,7 +376,9 @@ class FrigateApp:
def init_inter_process_communicator(self) -> None: def init_inter_process_communicator(self) -> None:
self.inter_process_communicator = InterProcessCommunicator() self.inter_process_communicator = InterProcessCommunicator()
self.inter_config_updater = ConfigPublisher() self.inter_config_updater = ConfigPublisher()
self.event_metadata_updater = EventMetadataPublisher(EventMetadataTypeEnum.all) self.event_metadata_updater = EventMetadataPublisher(
EventMetadataTypeEnum.regenerate_description
)
self.inter_zmq_proxy = ZmqProxy() self.inter_zmq_proxy = ZmqProxy()
def init_web_server(self) -> None: def init_web_server(self) -> None:

View File

@ -37,9 +37,11 @@ class EventMetadataSubscriber(Subscriber):
def check_for_update( def check_for_update(
self, timeout: float = None self, timeout: float = None
) -> Optional[tuple[EventMetadataTypeEnum, any]]: ) -> Optional[tuple[EventMetadataTypeEnum, any]]:
print(f"checking for update, timeout {timeout}")
return super().check_for_update(timeout) return super().check_for_update(timeout)
def _return_object(self, topic: str, payload: any) -> any: def _return_object(self, topic: str, payload: any) -> any:
print(topic, payload)
if payload is None: if payload is None:
return (None, None) return (None, None)
return (EventMetadataTypeEnum[topic[len(self.topic_base) :]], payload) return (EventMetadataTypeEnum[topic[len(self.topic_base) :]], payload)

View File

@ -70,14 +70,11 @@ class EmbeddingMaintainer(threading.Thread):
def _process_updates(self) -> None: def _process_updates(self) -> None:
"""Process event updates""" """Process event updates"""
logger.info("processing event updates") update = self.event_subscriber.check_for_update()
update = self.event_subscriber.check_for_update(timeout=1)
if update is None: if update is None:
return return
logger.info("not returning from _process_updates")
source_type, _, camera, data = update source_type, _, camera, data = update
if not camera or source_type != EventTypeEnum.tracked_object: if not camera or source_type != EventTypeEnum.tracked_object:
@ -101,14 +98,12 @@ class EmbeddingMaintainer(threading.Thread):
def _process_finalized(self) -> None: def _process_finalized(self) -> None:
"""Process the end of an event.""" """Process the end of an event."""
while True:
ended = self.event_end_subscriber.check_for_update()
logger.info("processing finalized") if ended == None:
ended = self.event_end_subscriber.check_for_update(timeout=1) break
if ended is None:
return
logger.info("not returning from _process_finalized")
event_id, camera, updated_db = ended event_id, camera, updated_db = ended
camera_config = self.config.cameras[camera] camera_config = self.config.cameras[camera]
@ -116,11 +111,11 @@ class EmbeddingMaintainer(threading.Thread):
try: try:
event: Event = Event.get(Event.id == event_id) event: Event = Event.get(Event.id == event_id)
except DoesNotExist: except DoesNotExist:
return continue
# Skip the event if not an object # Skip the event if not an object
if event.data.get("type") != "object": if event.data.get("type") != "object":
return continue
# Extract valid event metadata # Extract valid event metadata
metadata = get_metadata(event) metadata = get_metadata(event)
@ -141,7 +136,10 @@ class EmbeddingMaintainer(threading.Thread):
daemon=True, daemon=True,
args=( args=(
event, event,
[data["thumbnail"] for data in self.tracked_events[event_id]] [
data["thumbnail"]
for data in self.tracked_events[event_id]
]
if len(self.tracked_events.get(event_id, [])) > 0 if len(self.tracked_events.get(event_id, [])) > 0
else [thumbnail], else [thumbnail],
metadata, metadata,
@ -154,18 +152,13 @@ class EmbeddingMaintainer(threading.Thread):
def _process_event_metadata(self): def _process_event_metadata(self):
# Check for regenerate description requests # Check for regenerate description requests
logger.info("processing event metadata") (topic, event_id) = self.event_metadata_subscriber.check_for_update()
(topic, event_id) = self.event_metadata_subscriber.check_for_update(timeout=1)
logger.info(f"in init in maintainer, {topic} {event_id}")
if topic is None: if topic is None:
return return
logger.info("not returning from _process_event_metadata")
if event_id: if event_id:
logger.info(f"in maintainer: {event_id}") self.handle_regenerate_description(event_id)
# self.handle_regenerate_description(event_id)
def _create_thumbnail(self, yuv_frame, box, height=500) -> Optional[bytes]: def _create_thumbnail(self, yuv_frame, box, height=500) -> Optional[bytes]:
"""Return jpg thumbnail of a region of the frame.""" """Return jpg thumbnail of a region of the frame."""