|
|
|
|
|
import matplotlib.pyplot as plt |
|
|
|
|
|
|
|
|
from deepface import DeepFace |
|
|
from deepface.commons import logger as log |
|
|
|
|
|
logger = log.get_singletonish_logger() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
model_names = [ |
|
|
"VGG-Face", |
|
|
"Facenet", |
|
|
"Facenet512", |
|
|
"OpenFace", |
|
|
"DeepFace", |
|
|
"DeepID", |
|
|
"Dlib", |
|
|
"ArcFace", |
|
|
"SFace", |
|
|
"GhostFaceNet", |
|
|
] |
|
|
|
|
|
detector_backends = [ |
|
|
"opencv", |
|
|
"ssd", |
|
|
"dlib", |
|
|
"mtcnn", |
|
|
"fastmtcnn", |
|
|
|
|
|
"retinaface", |
|
|
"yunet", |
|
|
"yolov8", |
|
|
"centerface", |
|
|
] |
|
|
|
|
|
|
|
|
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("---------------------") |
|
|
|
|
|
|
|
|
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") |
|
|
|
|
|
|
|
|
|
|
|
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: |
|
|
|
|
|
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"]) |
|
|
|
|
|
|
|
|
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) |
|
|
|
|
|
|
|
|
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("-----------") |
|
|
|