From 84cfa7cc9528d154a4def131c575f9df8871f929 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aleix=20Conchillo=20Flaqu=C3=A9?= Date: Tue, 9 Apr 2024 22:16:25 -0700 Subject: [PATCH] services: added VisionService --- src/dailyai/services/ai_services.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/dailyai/services/ai_services.py b/src/dailyai/services/ai_services.py index d4ecebee4..d620be3d2 100644 --- a/src/dailyai/services/ai_services.py +++ b/src/dailyai/services/ai_services.py @@ -100,6 +100,31 @@ class ImageGenService(AIService): yield URLImageFrame(url, image_data, image_size) +class VisionService(AIService): + """VisionService is a base class for vision services.""" + + def __init__(self, **kwargs): + super().__init__(**kwargs) + self._describe_text = None + + @abstractmethod + async def run_vision(self, describe_text: str, frame: ImageFrame) -> str: + pass + + async def process_frame(self, frame: Frame) -> AsyncGenerator[Frame, None]: + if isinstance(frame, TextFrame): + self._describe_text = frame.text + elif isinstance(frame, ImageFrame): + if self._describe_text: + description = await self.run_vision(self._describe_text, frame) + self._describe_text = None + yield TextFrame(description) + else: + yield frame + else: + yield frame + + class STTService(AIService): """STTService is a base class for speech-to-text services."""