netra / backend /app /tests /test_face_engine.py
093xpku
Clean project layout deployment
9bc686b
Raw
History Blame Contribute Delete
1.73 kB
import pytest
import numpy as np
from app.services.face_engine import FaceEngine
def test_face_engine_initialization():
# Verify that engine initializes and can enter mock mode if files are missing
engine = FaceEngine()
assert hasattr(engine, 'mock_mode')
def test_face_engine_mock_mode_detection():
engine = FaceEngine()
engine.mock_mode = True
# Create blank dummy image
dummy_image = np.zeros((480, 640, 3), dtype=np.uint8)
faces = engine.detect_faces(dummy_image)
assert len(faces) == 1
assert "bbox" in faces[0]
assert "confidence" in faces[0]
assert "landmarks" in faces[0]
assert len(faces[0]["landmarks"]) == 5
def test_face_engine_mock_mode_embedding():
engine = FaceEngine()
engine.mock_mode = True
dummy_face = np.zeros((112, 112, 3), dtype=np.uint8)
embedding = engine.extract_embedding(dummy_face)
assert embedding.shape == (512,)
# Verify it is L2 normalized
norm = np.linalg.norm(embedding)
assert pytest.approx(norm, abs=1e-5) == 1.0
def test_face_engine_liveness():
engine = FaceEngine()
engine.mock_mode = True
dummy_image = np.zeros((480, 640, 3), dtype=np.uint8)
score, is_live = engine.check_liveness(dummy_image, [100, 100, 200, 200])
assert score >= 0.0 and score <= 1.0
assert isinstance(is_live, bool)
def test_cosine_similarity():
engine = FaceEngine()
v1 = np.array([1.0, 0.0, 0.0], dtype=np.float32)
v2 = np.array([1.0, 0.0, 0.0], dtype=np.float32)
v3 = np.array([0.0, 1.0, 0.0], dtype=np.float32)
assert pytest.approx(engine.cosine_similarity(v1, v2)) == 1.0
assert pytest.approx(engine.cosine_similarity(v1, v3)) == 0.0