Basic implementation for testing review processor

This commit is contained in:
Nicolas Mowen 2025-08-01 12:49:33 -06:00
parent c169e766a5
commit 6b0f425cb0
3 changed files with 33 additions and 1 deletions

View File

@ -0,0 +1,25 @@
"""Post processor for review items to get descriptions."""
import logging
from typing import Any
from frigate.data_processing.types import PostProcessDataEnum
from ..post.api import PostProcessorApi
logger = logging.getLogger(__name__)
class ReviewDescriptionProcessor(PostProcessorApi):
def __init__(self, config, metrics):
super().__init__(config, metrics, None)
self.tracked_review_items: dict[str, list[Any]] = {}
def process_data(self, data, data_type):
if data_type != PostProcessDataEnum.review:
return
logger.info(f"processor is looking at {data}")
def handle_request(self, request_data):
pass

View File

@ -50,6 +50,7 @@ from frigate.data_processing.post.audio_transcription import (
from frigate.data_processing.post.license_plate import (
LicensePlatePostProcessor,
)
from frigate.data_processing.post.review_descriptions import ReviewDescriptionProcessor
from frigate.data_processing.post.semantic_trigger import SemanticTriggerProcessor
from frigate.data_processing.real_time.api import RealTimeProcessorApi
from frigate.data_processing.real_time.bird import BirdRealTimeProcessor
@ -534,7 +535,9 @@ class EmbeddingMaintainer(threading.Thread):
if review_updates == None:
break
logger.info(f"revieved review update {review_updates}")
for processor in self.post_processors:
if isinstance(processor, ReviewDescriptionProcessor):
processor.process_data(review_updates, PostProcessDataEnum.review)
def _process_event_metadata(self):
# Check for regenerate description requests

View File

@ -1,6 +1,7 @@
"""Maintain review segments in db."""
import copy
import datetime
import json
import logging
import os
@ -64,6 +65,7 @@ class PendingReviewSegment:
self.zones = zones
self.audio = audio
self.last_update = frame_time
self.thumb_time: float | None = None
# thumbnail
self._frame = np.zeros((THUMB_HEIGHT * 3 // 2, THUMB_WIDTH), np.uint8)
@ -105,6 +107,7 @@ class PendingReviewSegment:
)
if self._frame is not None:
self.thumb_time = datetime.datetime.now().timestamp()
self.has_frame = True
cv2.imwrite(
self.frame_path, self._frame, [int(cv2.IMWRITE_WEBP_QUALITY), 60]
@ -138,6 +141,7 @@ class PendingReviewSegment:
"sub_labels": list(self.sub_labels.values()),
"zones": self.zones,
"audio": list(self.audio),
"thumb_time": self.thumb_time,
},
}
)