You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

55 lines
2.0 KiB

from pathlib import Path
import gradio as gr
import numpy as np
from typing import Optional, Tuple, List
import cv2
from datetime import datetime
import asyncio
from concurrent.futures import ThreadPoolExecutor
from src.domain.entities import Face, VerificationResult, IdentificationResult
from src.domain.repositories import FaceRepository
from src.infrastructure.database.mongodb import MongoDBFaceRepository
from src.infrastructure.storage.chromadb import ChromaDBVectorStore
from src.infrastructure.storage.filesystem import FileSystemStorage
from src.application.use_cases import (
RegisterFaceUseCase,
VerifyFaceUseCase,
IdentifyFaceUseCase
)
from src.application.services import FaceRecognitionService
from src.infrastructure.ml.detectors import RetinaFaceDetector
from src.infrastructure.ml.recognizers import SFaceRecognizer
from src.presentation.gradio_app import create_gradio_interface
from src.infrastructure.config import Settings
settings = Settings()
async def initialize_app():
face_repository = MongoDBFaceRepository(settings.MONGODB_URL, settings.MONGODB_DB)
vector_store = ChromaDBVectorStore(settings.CHROMA_HOST, settings.CHROMA_PORT)
file_storage = FileSystemStorage(settings.UPLOAD_DIR)
detector = RetinaFaceDetector()
recognizer = SFaceRecognizer()
face_service = FaceRecognitionService(
face_repository=face_repository,
vector_store=vector_store,
verification_threshold=settings.VERIFICATION_THRESHOLD,
identification_threshold=settings.IDENTIFICATION_THRESHOLD
)
register_use_case = RegisterFaceUseCase(face_service)
verify_use_case = VerifyFaceUseCase(face_service)
identify_use_case = IdentifyFaceUseCase(face_service)
return create_gradio_interface(
register_use_case=register_use_case,
verify_use_case=verify_use_case,
identify_use_case=identify_use_case
)
if __name__ == "__main__":
app = asyncio.run(initialize_app())
app.launch(server_name="0.0.0.0", server_port=7860)