From f74e944dc66a7b984b64edd629f35ac26a4b9134 Mon Sep 17 00:00:00 2001 From: Rodrigo Andrade Date: Sun, 8 May 2022 21:19:41 -0300 Subject: [PATCH] sface wrapper --- deepface/basemodels/sface_opencv_wrapper.py | 55 +++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 deepface/basemodels/sface_opencv_wrapper.py diff --git a/deepface/basemodels/sface_opencv_wrapper.py b/deepface/basemodels/sface_opencv_wrapper.py new file mode 100644 index 0000000..3c6ea0e --- /dev/null +++ b/deepface/basemodels/sface_opencv_wrapper.py @@ -0,0 +1,55 @@ +import os + +import cv2 as cv +import gdown + +from deepface.commons import functions + +_url = "https://github.com/opencv/opencv_zoo/raw/master/models/face_recognition_sface/face_recognition_sface_2021dec.onnx" + + +class _Layer: + input_shape = (None, 112, 122, 3) + + +class SFace: + def __init__(self, model_path, backend_id=0, target_id=0): + self._modelPath = model_path + self._backendId = backend_id + self._targetId = target_id + self._model = cv.FaceRecognizerSF.create( + model=self._modelPath, + config="", + backend_id=self._backendId, + target_id=self._targetId) + + self.layers = [_Layer()] + + def _preprocess(self, image, bbox): + if bbox is None: + return image + else: + return self._model.alignCrop(image, bbox) + + def predict(self, image, bbox=None, **kwargs): + # Preprocess + # print(image.max()) + # input_blob = self._preprocess(image, bbox) + + # Forward + features = self._model.feature(image[0]) + return features + + +def load_model(*args, **kwargs): + home = functions.get_deepface_home() + + file_name = home + '/.deepface/weights/face_recognition_sface_2021dec.onnx' + if not os.path.isfile(file_name): + print("sface weights will be downloaded...") + + output = file_name + gdown.download(_url, output, quiet=False) + + model = SFace(file_name, 0, 0) + return model