|
|
|
|
|
from typing import Any |
|
|
|
|
|
|
|
|
from deepface.basemodels import ( |
|
|
VGGFace, |
|
|
OpenFace, |
|
|
FbDeepFace, |
|
|
DeepID, |
|
|
ArcFace, |
|
|
SFace, |
|
|
Dlib, |
|
|
Facenet, |
|
|
GhostFaceNet |
|
|
) |
|
|
from deepface.extendedmodels import Age, Gender, Race, Emotion |
|
|
|
|
|
|
|
|
def build_model(model_name: str) -> Any: |
|
|
""" |
|
|
This function builds a deepface model |
|
|
Parameters: |
|
|
model_name (string): face recognition or facial attribute model |
|
|
VGG-Face, Facenet, OpenFace, DeepFace, DeepID for face recognition |
|
|
Age, Gender, Emotion, Race for facial attributes |
|
|
|
|
|
Returns: |
|
|
built model class |
|
|
""" |
|
|
|
|
|
|
|
|
global model_obj |
|
|
|
|
|
models = { |
|
|
"VGG-Face": VGGFace.VggFaceClient, |
|
|
"OpenFace": OpenFace.OpenFaceClient, |
|
|
"Facenet": Facenet.FaceNet128dClient, |
|
|
"Facenet512": Facenet.FaceNet512dClient, |
|
|
"DeepFace": FbDeepFace.DeepFaceClient, |
|
|
"DeepID": DeepID.DeepIdClient, |
|
|
"Dlib": Dlib.DlibClient, |
|
|
"ArcFace": ArcFace.ArcFaceClient, |
|
|
"SFace": SFace.SFaceClient, |
|
|
"GhostFaceNet": GhostFaceNet.GhostFaceNetClient, |
|
|
"Emotion": Emotion.EmotionClient, |
|
|
"Age": Age.ApparentAgeClient, |
|
|
"Gender": Gender.GenderClient, |
|
|
"Race": Race.RaceClient, |
|
|
} |
|
|
|
|
|
if not "model_obj" in globals(): |
|
|
model_obj = {} |
|
|
|
|
|
if not model_name in model_obj.keys(): |
|
|
model = models.get(model_name) |
|
|
if model: |
|
|
model_obj[model_name] = model() |
|
|
else: |
|
|
raise ValueError(f"Invalid model_name passed - {model_name}") |
|
|
|
|
|
return model_obj[model_name] |
|
|
|