faceverification / test /test_face_verification_integration.py
leandrodevai's picture
Sync from GitHub via hub-sync
c628352 verified
Raw
History Blame Contribute Delete
2.35 kB
import importlib
import sys
import uuid
import numpy as np
import pytest
from PIL import Image
from faceverification.core import image_processor as image_processor_module
from faceverification.core import vectordb as vectordb_module
from faceverification.core.vectordb import VectorDB
pytestmark = pytest.mark.integration
class FakeEmbedding:
def __init__(self, value):
self.value = value
def cpu(self):
return self
def numpy(self):
return self.value
class FakeImageProcessor:
def __init__(self):
self.embeddings = []
def detect_faces(self, image):
return image, True
def get_embedding(self, _image):
return FakeEmbedding(self.embeddings.pop(0))
@pytest.fixture
def service_with_real_vectordb(monkeypatch):
fake_image_processor = FakeImageProcessor()
vector_db = VectorDB(
distance_metric="l2",
name_collection=f"test_service_faces_{uuid.uuid4().hex}",
)
monkeypatch.setattr(
image_processor_module,
"ImageProcessor",
lambda: fake_image_processor,
)
monkeypatch.setattr(vectordb_module, "VectorDB", lambda: vector_db)
sys.modules.pop("faceverification.services.face_verification", None)
service = importlib.import_module("faceverification.services.face_verification")
return service, fake_image_processor
def test_add_then_verify_person_with_real_vectordb(service_with_real_vectordb):
service, image_processor = service_with_real_vectordb
image_processor.embeddings = [
np.array([0.1, 0.2, 0.3]),
np.array([0.11, 0.19, 0.31]),
]
image = Image.new("RGB", (10, 10), "white")
service.add_person(image, "Ada")
name, annotated_image = service.verify_person(image)
assert name == "Ada"
assert annotated_image is not None
def test_verify_person_returns_unregistered_when_real_vectordb_match_is_too_far(
service_with_real_vectordb,
):
service, image_processor = service_with_real_vectordb
image_processor.embeddings = [
np.array([0.0, 0.0, 0.0]),
np.array([10.0, 10.0, 10.0]),
]
image = Image.new("RGB", (10, 10), "white")
service.add_person(image, "Ada")
name, annotated_image = service.verify_person(image)
assert name == "Unregistered Person"
assert annotated_image is not None