diff --git a/frigate/events/maintainer.py b/frigate/events/maintainer.py index 685f47979..b65ca50cb 100644 --- a/frigate/events/maintainer.py +++ b/frigate/events/maintainer.py @@ -106,7 +106,11 @@ class EventProcessor(threading.Thread): self.handle_object_detection(event_type, camera, event_data) - if event_type == "end" and self.config.cameras[camera].gemini.enabled: + if ( + event_type == "end" + and not event_data["false_positive"] + and self.config.cameras[camera].gemini.enabled + ): self.gemini_queue.put( ( camera, diff --git a/frigate/gemini.py b/frigate/gemini.py index 4c2151a19..0097040bb 100644 --- a/frigate/gemini.py +++ b/frigate/gemini.py @@ -46,7 +46,6 @@ class GeminiProcessor(threading.Thread): camera_config = self.config.cameras[camera] - st = time.time() thumbnail = { "mime_type": "image/jpeg", "data": base64.b64decode(event_data["thumbnail"]), @@ -55,6 +54,8 @@ class GeminiProcessor(threading.Thread): event_data["label"], camera_config.gemini.prompt ) + st = time.time() + response = self.model.generate_content( [thumbnail, prompt], generation_config=genai.types.GenerationConfig( @@ -63,11 +64,25 @@ class GeminiProcessor(threading.Thread): ), ) - sub_label = response.text.strip() + logger.info("Generated sub label API took %.4f seconds", time.time() - st) + + try: + sub_label = response.text.split(".")[0].strip() + except ValueError: + logger.warning( + "Failed to generate sub label for %s on %s", + event_data["id"], + camera, + ) + continue try: event = Event.get(Event.id == event_data["id"]) except DoesNotExist: + logger.warning( + "Failed to find event %s", + event_data["id"], + ) continue if camera_config.gemini.override_existing or not event.sub_label: