FV-latest / deepface /tests /visual-test.py
songhieng's picture
Upload 195 files
7951466 verified
# 3rd party dependencies
import matplotlib.pyplot as plt
# project dependencies
from deepface import DeepFace
from deepface.commons.logger import Logger
logger = Logger()
# some models (e.g. Dlib) and detectors (e.g. retinaface) do not have test cases
# because they require to install huge packages
# this module is for local runs
model_names = [
"VGG-Face",
"Facenet",
"Facenet512",
"OpenFace",
"DeepFace",
"DeepID",
"Dlib",
"ArcFace",
"SFace",
"GhostFaceNet",
]
detector_backends = [
"opencv",
"ssd",
"dlib",
"mtcnn",
"fastmtcnn",
# "mediapipe", # crashed in mac
"retinaface",
"yunet",
"yolov8",
"centerface",
]
# verification
for model_name in model_names:
obj = DeepFace.verify(
img1_path="dataset/img1.jpg", img2_path="dataset/img2.jpg", model_name=model_name
)
logger.info(obj)
logger.info("---------------------")
# represent
for model_name in model_names:
embedding_objs = DeepFace.represent(img_path="dataset/img1.jpg", model_name=model_name)
for embedding_obj in embedding_objs:
embedding = embedding_obj["embedding"]
logger.info(f"{model_name} produced {len(embedding)}D vector")
# find
dfs = DeepFace.find(
img_path="dataset/img1.jpg", db_path="dataset", model_name="Facenet", detector_backend="mtcnn"
)
for df in dfs:
logger.info(df)
expand_areas = [0]
img_paths = ["dataset/img11.jpg", "dataset/img11_reflection.jpg"]
for expand_area in expand_areas:
for img_path in img_paths:
# extract faces
for detector_backend in detector_backends:
face_objs = DeepFace.extract_faces(
img_path=img_path,
detector_backend=detector_backend,
align=True,
expand_percentage=expand_area,
)
for face_obj in face_objs:
face = face_obj["face"]
logger.info(f"testing {img_path} with {detector_backend}")
logger.info(face_obj["facial_area"])
logger.info(face_obj["confidence"])
# we know opencv sometimes cannot find eyes
if face_obj["facial_area"]["left_eye"] is not None:
assert isinstance(face_obj["facial_area"]["left_eye"], tuple)
assert isinstance(face_obj["facial_area"]["left_eye"][0], int)
assert isinstance(face_obj["facial_area"]["left_eye"][1], int)
if face_obj["facial_area"]["right_eye"] is not None:
assert isinstance(face_obj["facial_area"]["right_eye"], tuple)
assert isinstance(face_obj["facial_area"]["right_eye"][0], int)
assert isinstance(face_obj["facial_area"]["right_eye"][1], int)
# left eye is really the left eye of the person
if (
face_obj["facial_area"]["left_eye"] is not None
and face_obj["facial_area"]["right_eye"] is not None
):
re_x = face_obj["facial_area"]["right_eye"][0]
le_x = face_obj["facial_area"]["left_eye"][0]
assert re_x < le_x, "right eye must be the right eye of the person"
type_conf = type(face_obj["confidence"])
assert isinstance(
face_obj["confidence"], float
), f"confidence type must be float but it is {type_conf}"
assert face_obj["confidence"] <= 1
plt.imshow(face)
plt.axis("off")
plt.show()
logger.info("-----------")