diff --git a/.gitignore b/.gitignore index 85a8183..5593ad3 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,5 @@ db/schema.sql multiai-c9380-firebase-adminsdk-fbsvc-cb6e5ce41b.json db.txt -multiai-c9380-firebase-adminsdk-fbsvc-cb6e5ce41b.json \ No newline at end of file +.venv +multiai-c9380-firebase-adminsdk-fbsvc-cb6e5ce41b.json diff --git a/app/service/face_embedding.py b/app/service/face_embedding.py index 11a0d81..076d29e 100644 --- a/app/service/face_embedding.py +++ b/app/service/face_embedding.py @@ -151,6 +151,39 @@ async def compute_average_embedding( return averaged.astype(float).tolist() + async def compute_event_embedding( + self, + payloads: Sequence[FaceImagePayload], + ) -> dict[str, list[list[float]]]: + + if not payloads: + raise AppException.bad_request( + "At least one image is required" + ) + + results: dict[str, list[list[float]]] = {} + + for payload in payloads: + try: + image = self._decode_image(payload) + image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) + + faces: list[FaceStub] = await asyncio.to_thread( + self.face_embedding.model.get, image_rgb # type: ignore + ) + + results[payload["filename"]] = [ + face.embedding.flatten().tolist() + for face in faces + if face.embedding is not None + ] + + except Exception as e: + print(f"[FaceEmbeddingService] Skipping {payload['filename']}: {e}") + results[payload["filename"]] = [] + + return results + def _decode_image(self, payload: FaceImagePayload) -> np.ndarray: buffer = np.frombuffer(payload["bytes"], dtype=np.uint8) diff --git a/ersLenovoOneDriveDesktopMultiAImultAI-back.venvScriptsActivate.ps1 b/ersLenovoOneDriveDesktopMultiAImultAI-back.venvScriptsActivate.ps1 new file mode 100644 index 0000000..d27c36e --- /dev/null +++ b/ersLenovoOneDriveDesktopMultiAImultAI-back.venvScriptsActivate.ps1 @@ -0,0 +1,7 @@ + Maya/2-ai-face-detection + Maya/3-ai-face-embedding + feat/ai_pipline +* feat/event-face-embeddings + fix/optimize-face-detection + fix/remove-redundant-face-detection + main