mirror of
https://github.com/serengil/deepface.git
synced 2025-06-07 12:05:22 +00:00
adding unit tests for api
This commit is contained in:
parent
53890974ea
commit
78b8198232
128
tests/test_api.py
Normal file
128
tests/test_api.py
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
import sys
|
||||||
|
import unittest
|
||||||
|
from deepface.commons import constant
|
||||||
|
from deepface.commons.logger import Logger
|
||||||
|
|
||||||
|
# api is not available under deepface import
|
||||||
|
sys.path.insert(1, f"{constant.ROOT_DIR}/api/src")
|
||||||
|
# pylint: disable=wrong-import-order, wrong-import-position
|
||||||
|
from app import create_app
|
||||||
|
|
||||||
|
logger = Logger("tests/test_api.py")
|
||||||
|
|
||||||
|
|
||||||
|
class TestVerifyEndpoint(unittest.TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
app = create_app()
|
||||||
|
app.config["DEBUG"] = True
|
||||||
|
app.config["TESTING"] = True
|
||||||
|
self.app = app.test_client()
|
||||||
|
|
||||||
|
def test_tp_verify(self):
|
||||||
|
data = {
|
||||||
|
"img1_path": "dataset/img1.jpg",
|
||||||
|
"img2_path": "dataset/img2.jpg",
|
||||||
|
}
|
||||||
|
response = self.app.post("/verify", json=data)
|
||||||
|
assert response.status_code == 200
|
||||||
|
result = response.json
|
||||||
|
logger.debug(result)
|
||||||
|
|
||||||
|
assert result.get("verified") is not None
|
||||||
|
assert result.get("model") is not None
|
||||||
|
assert result.get("similarity_metric") is not None
|
||||||
|
assert result.get("detector_backend") is not None
|
||||||
|
assert result.get("distance") is not None
|
||||||
|
assert result.get("threshold") is not None
|
||||||
|
assert result.get("facial_areas") is not None
|
||||||
|
|
||||||
|
assert result.get("verified") is True
|
||||||
|
|
||||||
|
logger.info("✅ true-positive verification api test is done")
|
||||||
|
|
||||||
|
def test_tn_verify(self):
|
||||||
|
data = {
|
||||||
|
"img1_path": "dataset/img1.jpg",
|
||||||
|
"img2_path": "dataset/img2.jpg",
|
||||||
|
}
|
||||||
|
response = self.app.post("/verify", json=data)
|
||||||
|
assert response.status_code == 200
|
||||||
|
result = response.json
|
||||||
|
logger.debug(result)
|
||||||
|
|
||||||
|
assert result.get("verified") is not None
|
||||||
|
assert result.get("model") is not None
|
||||||
|
assert result.get("similarity_metric") is not None
|
||||||
|
assert result.get("detector_backend") is not None
|
||||||
|
assert result.get("distance") is not None
|
||||||
|
assert result.get("threshold") is not None
|
||||||
|
assert result.get("facial_areas") is not None
|
||||||
|
|
||||||
|
assert result.get("verified") is True
|
||||||
|
|
||||||
|
logger.info("✅ true-negative verification api test is done")
|
||||||
|
|
||||||
|
def test_represent(self):
|
||||||
|
data = {
|
||||||
|
"img": "dataset/img1.jpg",
|
||||||
|
}
|
||||||
|
response = self.app.post("/represent", json=data)
|
||||||
|
assert response.status_code == 200
|
||||||
|
result = response.json
|
||||||
|
logger.debug(result)
|
||||||
|
assert result.get("results") is not None
|
||||||
|
assert isinstance(result["results"], list) is True
|
||||||
|
assert len(result["results"]) > 0
|
||||||
|
for i in result["results"]:
|
||||||
|
assert i.get("embedding") is not None
|
||||||
|
assert isinstance(i.get("embedding"), list) is True
|
||||||
|
assert len(i.get("embedding")) == 4096
|
||||||
|
assert i.get("face_confidence") is not None
|
||||||
|
assert i.get("facial_area") is not None
|
||||||
|
|
||||||
|
logger.info("✅ representation api test is done")
|
||||||
|
|
||||||
|
def test_analyze(self):
|
||||||
|
data = {
|
||||||
|
"img": "dataset/img1.jpg",
|
||||||
|
}
|
||||||
|
response = self.app.post("/analyze", json=data)
|
||||||
|
assert response.status_code == 200
|
||||||
|
result = response.json
|
||||||
|
logger.debug(result)
|
||||||
|
assert result.get("results") is not None
|
||||||
|
assert isinstance(result["results"], list) is True
|
||||||
|
assert len(result["results"]) > 0
|
||||||
|
for i in result["results"]:
|
||||||
|
assert i.get("age") is not None
|
||||||
|
assert isinstance(i.get("age"), (int, float))
|
||||||
|
assert i.get("dominant_gender") is not None
|
||||||
|
assert i.get("dominant_gender") in ["Man", "Woman"]
|
||||||
|
assert i.get("dominant_emotion") is not None
|
||||||
|
assert i.get("dominant_race") is not None
|
||||||
|
|
||||||
|
logger.info("✅ analyze api test is done")
|
||||||
|
|
||||||
|
def test_invalid_verify(self):
|
||||||
|
data = {
|
||||||
|
"img1_path": "dataset/invalid_1.jpg",
|
||||||
|
"img2_path": "dataset/invalid_2.jpg",
|
||||||
|
}
|
||||||
|
response = self.app.post("/verify", json=data)
|
||||||
|
assert response.status_code == 400
|
||||||
|
logger.info("✅ invalid verification request api test is done")
|
||||||
|
|
||||||
|
def test_invalid_represent(self):
|
||||||
|
data = {
|
||||||
|
"img": "dataset/invalid_1.jpg",
|
||||||
|
}
|
||||||
|
response = self.app.post("/represent", json=data)
|
||||||
|
assert response.status_code == 400
|
||||||
|
logger.info("✅ invalid represent request api test is done")
|
||||||
|
|
||||||
|
def test_invalid_analyze(self):
|
||||||
|
data = {
|
||||||
|
"img": "dataset/invalid.jpg",
|
||||||
|
}
|
||||||
|
response = self.app.post("/analyze", json=data)
|
||||||
|
assert response.status_code == 400
|
Loading…
x
Reference in New Issue
Block a user