-
-
Notifications
You must be signed in to change notification settings - Fork 2.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
128 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |