From 6b3a4eff22b4e271a55ad27940027527f9671d6c Mon Sep 17 00:00:00 2001 From: Sefik Ilkin Serengil Date: Fri, 12 Apr 2024 14:48:41 +0100 Subject: [PATCH 1/6] centerface backend added --- deepface/detectors/CenterFace.py | 217 ++++++++++++++++++++++++++ deepface/detectors/DetectorWrapper.py | 4 +- 2 files changed, 220 insertions(+), 1 deletion(-) create mode 100644 deepface/detectors/CenterFace.py diff --git a/deepface/detectors/CenterFace.py b/deepface/detectors/CenterFace.py new file mode 100644 index 0000000..a0da43e --- /dev/null +++ b/deepface/detectors/CenterFace.py @@ -0,0 +1,217 @@ +# built-in dependencies +import os +from typing import List + +# 3rd party dependencies +import numpy as np +import cv2 +import gdown + +# project dependencies +from deepface.commons import folder_utils +from deepface.models.Detector import Detector, FacialAreaRegion +from deepface.commons import logger as log + +logger = log.get_singletonish_logger() + +# pylint: disable=c-extension-no-member + +WEIGHTS_URL = "https://github.com/Star-Clouds/CenterFace/raw/master/models/onnx/centerface.onnx" + + +class CenterFaceClient(Detector): + def __init__(self): + # BUG: model must be flushed for each call + # self.model = self.build_model() + pass + + def build_model(self): + """ + Download pre-trained weights of CenterFace model if necessary and load built model + """ + weights_path = f"{folder_utils.get_deepface_home()}/.deepface/weights/centerface.onnx" + if not os.path.isfile(weights_path): + logger.info(f"Downloading CenterFace weights from {WEIGHTS_URL} to {weights_path}...") + try: + gdown.download(WEIGHTS_URL, weights_path, quiet=False) + except Exception as err: + raise ValueError( + f"Exception while downloading CenterFace weights from {WEIGHTS_URL}." + f"You may consider to download it to {weights_path} manually." + ) from err + logger.info(f"CenterFace model is just downloaded to {os.path.basename(weights_path)}") + + return CenterFace(weight_path=weights_path) + + def detect_faces(self, img: np.ndarray) -> List["FacialAreaRegion"]: + """ + Detect and align face with CenterFace + + Args: + img (np.ndarray): pre-loaded image as numpy array + + Returns: + results (List[FacialAreaRegion]): A list of FacialAreaRegion objects + """ + resp = [] + + threshold = float(os.getenv("CENTERFACE_THRESHOLD", "0.80")) + + # BUG: model causes problematic results from 2nd call if it is not flushed + # detections, landmarks = self.model.forward( + # img, img.shape[0], img.shape[1], threshold=threshold + # ) + detections, landmarks = self.build_model().forward( + img, img.shape[0], img.shape[1], threshold=threshold + ) + + for i, detection in enumerate(detections): + boxes, confidence = detection[:4], detection[4] + + x = boxes[0] + y = boxes[1] + w = boxes[2] - x + h = boxes[3] - y + + landmark = landmarks[i] + + right_eye = (int(landmark[0]), int(landmark[1])) + left_eye = (int(landmark[2]), int(landmark[3])) + # nose = (int(landmark[4]), int(landmark [5])) + # mouth_right = (int(landmark[6]), int(landmark [7])) + # mouth_left = (int(landmark[8]), int(landmark [9])) + + facial_area = FacialAreaRegion( + x=x, + y=y, + w=w, + h=h, + left_eye=left_eye, + right_eye=right_eye, + confidence=min(max(0, float(confidence)), 1.0), + ) + resp.append(facial_area) + + return resp + + +class CenterFace: + """ + This class is heavily inspired from + github.com/Star-Clouds/CenterFace/blob/master/prj-python/centerface.py + """ + + def __init__(self, weight_path: str): + self.net = cv2.dnn.readNetFromONNX(weight_path) + self.img_h_new, self.img_w_new, self.scale_h, self.scale_w = 0, 0, 0, 0 + + def forward(self, img, height, width, threshold=0.5): + self.img_h_new, self.img_w_new, self.scale_h, self.scale_w = self.transform(height, width) + return self.inference_opencv(img, threshold) + + def inference_opencv(self, img, threshold): + blob = cv2.dnn.blobFromImage( + img, + scalefactor=1.0, + size=(self.img_w_new, self.img_h_new), + mean=(0, 0, 0), + swapRB=True, + crop=False, + ) + self.net.setInput(blob) + heatmap, scale, offset, lms = self.net.forward(["537", "538", "539", "540"]) + return self.postprocess(heatmap, lms, offset, scale, threshold) + + def transform(self, h, w): + img_h_new, img_w_new = int(np.ceil(h / 32) * 32), int(np.ceil(w / 32) * 32) + scale_h, scale_w = img_h_new / h, img_w_new / w + return img_h_new, img_w_new, scale_h, scale_w + + def postprocess(self, heatmap, lms, offset, scale, threshold): + dets, lms = self.decode( + heatmap, scale, offset, lms, (self.img_h_new, self.img_w_new), threshold=threshold + ) + if len(dets) > 0: + dets[:, 0:4:2], dets[:, 1:4:2] = ( + dets[:, 0:4:2] / self.scale_w, + dets[:, 1:4:2] / self.scale_h, + ) + lms[:, 0:10:2], lms[:, 1:10:2] = ( + lms[:, 0:10:2] / self.scale_w, + lms[:, 1:10:2] / self.scale_h, + ) + else: + dets = np.empty(shape=[0, 5], dtype=np.float32) + lms = np.empty(shape=[0, 10], dtype=np.float32) + return dets, lms + + def decode(self, heatmap, scale, offset, landmark, size, threshold=0.1): + heatmap = np.squeeze(heatmap) + scale0, scale1 = scale[0, 0, :, :], scale[0, 1, :, :] + offset0, offset1 = offset[0, 0, :, :], offset[0, 1, :, :] + c0, c1 = np.where(heatmap > threshold) + boxes, lms = [], [] + if len(c0) > 0: + # pylint:disable=consider-using-enumerate + for i in range(len(c0)): + s0, s1 = np.exp(scale0[c0[i], c1[i]]) * 4, np.exp(scale1[c0[i], c1[i]]) * 4 + o0, o1 = offset0[c0[i], c1[i]], offset1[c0[i], c1[i]] + s = heatmap[c0[i], c1[i]] + x1, y1 = max(0, (c1[i] + o1 + 0.5) * 4 - s1 / 2), max( + 0, (c0[i] + o0 + 0.5) * 4 - s0 / 2 + ) + x1, y1 = min(x1, size[1]), min(y1, size[0]) + boxes.append([x1, y1, min(x1 + s1, size[1]), min(y1 + s0, size[0]), s]) + lm = [] + for j in range(5): + lm.append(landmark[0, j * 2 + 1, c0[i], c1[i]] * s1 + x1) + lm.append(landmark[0, j * 2, c0[i], c1[i]] * s0 + y1) + lms.append(lm) + boxes = np.asarray(boxes, dtype=np.float32) + keep = self.nms(boxes[:, :4], boxes[:, 4], 0.3) + boxes = boxes[keep, :] + lms = np.asarray(lms, dtype=np.float32) + lms = lms[keep, :] + return boxes, lms + + def nms(self, boxes, scores, nms_thresh): + x1 = boxes[:, 0] + y1 = boxes[:, 1] + x2 = boxes[:, 2] + y2 = boxes[:, 3] + areas = (x2 - x1 + 1) * (y2 - y1 + 1) + order = np.argsort(scores)[::-1] + num_detections = boxes.shape[0] + suppressed = np.zeros((num_detections,), dtype=bool) + + keep = [] + for _i in range(num_detections): + i = order[_i] + if suppressed[i]: + continue + keep.append(i) + + ix1 = x1[i] + iy1 = y1[i] + ix2 = x2[i] + iy2 = y2[i] + iarea = areas[i] + + for _j in range(_i + 1, num_detections): + j = order[_j] + if suppressed[j]: + continue + + xx1 = max(ix1, x1[j]) + yy1 = max(iy1, y1[j]) + xx2 = min(ix2, x2[j]) + yy2 = min(iy2, y2[j]) + w = max(0, xx2 - xx1 + 1) + h = max(0, yy2 - yy1 + 1) + + inter = w * h + ovr = inter / (iarea + areas[j] - inter) + if ovr >= nms_thresh: + suppressed[j] = True + + return keep diff --git a/deepface/detectors/DetectorWrapper.py b/deepface/detectors/DetectorWrapper.py index cdca6a3..33238e6 100644 --- a/deepface/detectors/DetectorWrapper.py +++ b/deepface/detectors/DetectorWrapper.py @@ -12,6 +12,7 @@ from deepface.detectors import ( Ssd, Yolo, YuNet, + CenterFace, ) from deepface.commons import logger as log @@ -38,6 +39,7 @@ def build_model(detector_backend: str) -> Any: "yolov8": Yolo.YoloClient, "yunet": YuNet.YuNetClient, "fastmtcnn": FastMtCnn.FastMtCnnClient, + "centerface": CenterFace.CenterFaceClient, } if not "face_detector_obj" in globals(): @@ -93,7 +95,7 @@ def detect_faces( expand_percentage = 0 # find facial areas of given image - facial_areas = face_detector.detect_faces(img=img) + facial_areas = face_detector.detect_faces(img) results = [] for facial_area in facial_areas: From 4577b430515919f53ff510b2fdc2abd5ed5e8cfe Mon Sep 17 00:00:00 2001 From: Sefik Ilkin Serengil Date: Fri, 12 Apr 2024 14:49:07 +0100 Subject: [PATCH 2/6] unit test extended for centerface --- tests/visual-test.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/tests/visual-test.py b/tests/visual-test.py index 09b4b8d..71ddcb6 100644 --- a/tests/visual-test.py +++ b/tests/visual-test.py @@ -34,9 +34,10 @@ detector_backends = [ "retinaface", "yunet", "yolov8", + "centerface", ] - +""" # verification for model_name in model_names: obj = DeepFace.verify( @@ -59,7 +60,7 @@ dfs = DeepFace.find( ) for df in dfs: logger.info(df) - +""" expand_areas = [0] img_paths = ["dataset/img11.jpg", "dataset/img11_reflection.jpg"] @@ -75,7 +76,7 @@ for expand_area in expand_areas: ) for face_obj in face_objs: face = face_obj["face"] - logger.info(detector_backend) + logger.info(f"testing {img_path} with {detector_backend}") logger.info(face_obj["facial_area"]) logger.info(face_obj["confidence"]) @@ -99,7 +100,10 @@ for expand_area in expand_areas: le_x = face_obj["facial_area"]["left_eye"][0] assert re_x < le_x, "right eye must be the right eye of the person" - assert isinstance(face_obj["confidence"], float) + 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) From 154fca372d81f5d46cdfed2d68ffd9371291b2d3 Mon Sep 17 00:00:00 2001 From: Sefik Ilkin Serengil Date: Fri, 12 Apr 2024 14:49:25 +0100 Subject: [PATCH 3/6] unit test extended for centerface --- tests/visual-test.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/visual-test.py b/tests/visual-test.py index 71ddcb6..eb016b5 100644 --- a/tests/visual-test.py +++ b/tests/visual-test.py @@ -37,7 +37,6 @@ detector_backends = [ "centerface", ] -""" # verification for model_name in model_names: obj = DeepFace.verify( @@ -60,7 +59,6 @@ dfs = DeepFace.find( ) for df in dfs: logger.info(df) -""" expand_areas = [0] img_paths = ["dataset/img11.jpg", "dataset/img11_reflection.jpg"] From 3e5b36f70b87555917f2a2a43ac9d57a2056c6e6 Mon Sep 17 00:00:00 2001 From: Sefik Ilkin Serengil Date: Fri, 12 Apr 2024 14:49:58 +0100 Subject: [PATCH 4/6] adding centerface into readme --- README.md | 7 ++++--- icon/detector-portfolio-v6.jpg | Bin 0 -> 233388 bytes 2 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 icon/detector-portfolio-v6.jpg diff --git a/README.md b/README.md index d93298a..3806dbc 100644 --- a/README.md +++ b/README.md @@ -194,9 +194,9 @@ Age model got ± 4.65 MAE; gender model got 97.44% accuracy, 96.29% precision an **Face Detectors** - [`Demo`](https://youtu.be/GZ2p2hj2H5k) -Face detection and alignment are important early stages of a modern face recognition pipeline. Experiments show that just alignment increases the face recognition accuracy almost 1%. [`OpenCV`](https://sefiks.com/2020/02/23/face-alignment-for-face-recognition-in-python-within-opencv/), [`SSD`](https://sefiks.com/2020/08/25/deep-face-detection-with-opencv-in-python/), [`Dlib`](https://sefiks.com/2020/07/11/face-recognition-with-dlib-in-python/), [`MTCNN`](https://sefiks.com/2020/09/09/deep-face-detection-with-mtcnn-in-python/), [`Faster MTCNN`](https://github.com/timesler/facenet-pytorch), [`RetinaFace`](https://sefiks.com/2021/04/27/deep-face-detection-with-retinaface-in-python/), [`MediaPipe`](https://sefiks.com/2022/01/14/deep-face-detection-with-mediapipe/), [`YOLOv8 Face`](https://github.com/derronqi/yolov8-face) and [`YuNet`](https://github.com/ShiqiYu/libfacedetection) detectors are wrapped in deepface. +Face detection and alignment are important early stages of a modern face recognition pipeline. Experiments show that just alignment increases the face recognition accuracy almost 1%. [`OpenCV`](https://sefiks.com/2020/02/23/face-alignment-for-face-recognition-in-python-within-opencv/), [`SSD`](https://sefiks.com/2020/08/25/deep-face-detection-with-opencv-in-python/), [`Dlib`](https://sefiks.com/2020/07/11/face-recognition-with-dlib-in-python/), [`MTCNN`](https://sefiks.com/2020/09/09/deep-face-detection-with-mtcnn-in-python/), [`Faster MTCNN`](https://github.com/timesler/facenet-pytorch), [`RetinaFace`](https://sefiks.com/2021/04/27/deep-face-detection-with-retinaface-in-python/), [`MediaPipe`](https://sefiks.com/2022/01/14/deep-face-detection-with-mediapipe/), [`YOLOv8 Face`](https://github.com/derronqi/yolov8-face), [`YuNet`](https://github.com/ShiqiYu/libfacedetection) and [`CenterFace`](https://github.com/Star-Clouds/CenterFace) detectors are wrapped in deepface. -

+

All deepface functions accept an optional detector backend input argument. You can switch among those detectors with this argument. OpenCV is the default detector. @@ -206,11 +206,12 @@ backends = [ 'ssd', 'dlib', 'mtcnn', + 'fastmtcnn', 'retinaface', 'mediapipe', 'yolov8', 'yunet', - 'fastmtcnn', + 'centerface', ] #face verification diff --git a/icon/detector-portfolio-v6.jpg b/icon/detector-portfolio-v6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3fb158a76c2f63a933bd5447bb690d59510d908c GIT binary patch literal 233388 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�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 z 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 iKKSRv`3TQPasDF=9MuPpu<=LOIJ*AlV1xQ_^nU Date: Fri, 12 Apr 2024 14:50:11 +0100 Subject: [PATCH 5/6] docstrings updated for centerface --- deepface/DeepFace.py | 21 ++++++++++++++------- deepface/modules/demography.py | 3 ++- deepface/modules/detection.py | 3 ++- deepface/modules/recognition.py | 2 +- deepface/modules/representation.py | 2 +- deepface/modules/streaming.py | 12 ++++++++---- deepface/modules/verification.py | 3 ++- 7 files changed, 30 insertions(+), 16 deletions(-) diff --git a/deepface/DeepFace.py b/deepface/DeepFace.py index adb7612..e833377 100644 --- a/deepface/DeepFace.py +++ b/deepface/DeepFace.py @@ -88,7 +88,8 @@ def verify( OpenFace, DeepFace, DeepID, Dlib, ArcFace, SFace and GhostFaceNet (default is VGG-Face). detector_backend (string): face detector backend. Options: 'opencv', 'retinaface', - 'mtcnn', 'ssd', 'dlib', 'mediapipe', 'yolov8' or 'skip' (default is opencv). + 'mtcnn', 'ssd', 'dlib', 'mediapipe', 'yolov8', 'centerface' or 'skip' + (default is opencv). distance_metric (string): Metric for measuring similarity. Options: 'cosine', 'euclidean', 'euclidean_l2' (default is cosine). @@ -168,7 +169,8 @@ def analyze( Set to False to avoid the exception for low-resolution images (default is True). detector_backend (string): face detector backend. Options: 'opencv', 'retinaface', - 'mtcnn', 'ssd', 'dlib', 'mediapipe', 'yolov8' or 'skip' (default is opencv). + 'mtcnn', 'ssd', 'dlib', 'mediapipe', 'yolov8', 'centerface' or 'skip' + (default is opencv). distance_metric (string): Metric for measuring similarity. Options: 'cosine', 'euclidean', 'euclidean_l2' (default is cosine). @@ -272,7 +274,8 @@ def find( Set to False to avoid the exception for low-resolution images (default is True). detector_backend (string): face detector backend. Options: 'opencv', 'retinaface', - 'mtcnn', 'ssd', 'dlib', 'mediapipe', 'yolov8' or 'skip' (default is opencv). + 'mtcnn', 'ssd', 'dlib', 'mediapipe', 'yolov8', 'centerface' or 'skip' + (default is opencv). align (boolean): Perform alignment based on the eye positions (default is True). @@ -348,7 +351,8 @@ def represent( (default is True). detector_backend (string): face detector backend. Options: 'opencv', 'retinaface', - 'mtcnn', 'ssd', 'dlib', 'mediapipe', 'yolov8' or 'skip' (default is opencv). + 'mtcnn', 'ssd', 'dlib', 'mediapipe', 'yolov8', 'centerface' or 'skip' + (default is opencv). align (boolean): Perform alignment based on the eye positions (default is True). @@ -406,7 +410,8 @@ def stream( OpenFace, DeepFace, DeepID, Dlib, ArcFace, SFace and GhostFaceNet (default is VGG-Face). detector_backend (string): face detector backend. Options: 'opencv', 'retinaface', - 'mtcnn', 'ssd', 'dlib', 'mediapipe', 'yolov8' or 'skip' (default is opencv). + 'mtcnn', 'ssd', 'dlib', 'mediapipe', 'yolov8', 'centerface' or 'skip' + (default is opencv). distance_metric (string): Metric for measuring similarity. Options: 'cosine', 'euclidean', 'euclidean_l2' (default is cosine). @@ -454,7 +459,8 @@ def extract_faces( as a string, numpy array (BGR), or base64 encoded images. detector_backend (string): face detector backend. Options: 'opencv', 'retinaface', - 'mtcnn', 'ssd', 'dlib', 'mediapipe', 'yolov8' or 'skip' (default is opencv). + 'mtcnn', 'ssd', 'dlib', 'mediapipe', 'yolov8', 'centerface' or 'skip' + (default is opencv). enforce_detection (boolean): If no face is detected in an image, raise an exception. Set to False to avoid the exception for low-resolution images (default is True). @@ -520,7 +526,8 @@ def detectFace( added to resize the image (default is (224, 224)). detector_backend (string): face detector backend. Options: 'opencv', 'retinaface', - 'mtcnn', 'ssd', 'dlib', 'mediapipe', 'yolov8' or 'skip' (default is opencv). + 'mtcnn', 'ssd', 'dlib', 'mediapipe', 'yolov8', 'centerface' or 'skip' + (default is opencv). enforce_detection (boolean): If no face is detected in an image, raise an exception. Set to False to avoid the exception for low-resolution images (default is True). diff --git a/deepface/modules/demography.py b/deepface/modules/demography.py index 2877671..f11f71d 100644 --- a/deepface/modules/demography.py +++ b/deepface/modules/demography.py @@ -34,7 +34,8 @@ def analyze( Set to False to avoid the exception for low-resolution images (default is True). detector_backend (string): face detector backend. Options: 'opencv', 'retinaface', - 'mtcnn', 'ssd', 'dlib', 'mediapipe', 'yolov8' or 'skip' (default is opencv). + 'mtcnn', 'ssd', 'dlib', 'mediapipe', 'yolov8', 'centerface' or 'skip' + (default is opencv). distance_metric (string): Metric for measuring similarity. Options: 'cosine', 'euclidean', 'euclidean_l2' (default is cosine). diff --git a/deepface/modules/detection.py b/deepface/modules/detection.py index 2e71dde..d509d60 100644 --- a/deepface/modules/detection.py +++ b/deepface/modules/detection.py @@ -33,7 +33,8 @@ def extract_faces( as a string, numpy array (BGR), or base64 encoded images. detector_backend (string): face detector backend. Options: 'opencv', 'retinaface', - 'mtcnn', 'ssd', 'dlib', 'mediapipe', 'yolov8' or 'skip' (default is opencv) + 'mtcnn', 'ssd', 'dlib', 'mediapipe', 'yolov8', 'centerface' or 'skip' + (default is opencv) enforce_detection (boolean): If no face is detected in an image, raise an exception. Default is True. Set to False to avoid the exception for low-resolution images. diff --git a/deepface/modules/recognition.py b/deepface/modules/recognition.py index 8985626..ffa8dc5 100644 --- a/deepface/modules/recognition.py +++ b/deepface/modules/recognition.py @@ -52,7 +52,7 @@ def find( Default is True. Set to False to avoid the exception for low-resolution images. detector_backend (string): face detector backend. Options: 'opencv', 'retinaface', - 'mtcnn', 'ssd', 'dlib', 'mediapipe', 'yolov8' or 'skip'. + 'mtcnn', 'ssd', 'dlib', 'mediapipe', 'yolov8', 'centerface' or 'skip'. align (boolean): Perform alignment based on the eye positions. diff --git a/deepface/modules/representation.py b/deepface/modules/representation.py index cd6252a..dbaf1c7 100644 --- a/deepface/modules/representation.py +++ b/deepface/modules/representation.py @@ -33,7 +33,7 @@ def represent( Default is True. Set to False to avoid the exception for low-resolution images. detector_backend (string): face detector backend. Options: 'opencv', 'retinaface', - 'mtcnn', 'ssd', 'dlib', 'mediapipe', 'yolov8' or 'skip'. + 'mtcnn', 'ssd', 'dlib', 'mediapipe', 'yolov8', 'centerface' or 'skip'. align (boolean): Perform alignment based on the eye positions. diff --git a/deepface/modules/streaming.py b/deepface/modules/streaming.py index 23da044..95d05d9 100644 --- a/deepface/modules/streaming.py +++ b/deepface/modules/streaming.py @@ -43,7 +43,8 @@ def analysis( OpenFace, DeepFace, DeepID, Dlib, ArcFace, SFace and GhostFaceNet (default is VGG-Face). detector_backend (string): face detector backend. Options: 'opencv', 'retinaface', - 'mtcnn', 'ssd', 'dlib', 'mediapipe', 'yolov8' or 'skip' (default is opencv). + 'mtcnn', 'ssd', 'dlib', 'mediapipe', 'yolov8', 'centerface' or 'skip' + (default is opencv). distance_metric (string): Metric for measuring similarity. Options: 'cosine', 'euclidean', 'euclidean_l2' (default is cosine). @@ -182,7 +183,8 @@ def search_identity( model_name (str): Model for face recognition. Options: VGG-Face, Facenet, Facenet512, OpenFace, DeepFace, DeepID, Dlib, ArcFace, SFace and GhostFaceNet (default is VGG-Face). detector_backend (string): face detector backend. Options: 'opencv', 'retinaface', - 'mtcnn', 'ssd', 'dlib', 'mediapipe', 'yolov8' or 'skip' (default is opencv). + 'mtcnn', 'ssd', 'dlib', 'mediapipe', 'yolov8', 'centerface' or 'skip' + (default is opencv). distance_metric (string): Metric for measuring similarity. Options: 'cosine', 'euclidean', 'euclidean_l2' (default is cosine). Returns: @@ -349,7 +351,8 @@ def grab_facial_areas( Args: img (np.ndarray): image itself detector_backend (string): face detector backend. Options: 'opencv', 'retinaface', - 'mtcnn', 'ssd', 'dlib', 'mediapipe', 'yolov8' or 'skip' (default is opencv). + 'mtcnn', 'ssd', 'dlib', 'mediapipe', 'yolov8', 'centerface' or 'skip' + (default is opencv). threshold (int): threshold for facial area, discard smaller ones Returns result (list): list of tuple with x, y, w and h coordinates @@ -414,7 +417,8 @@ def perform_facial_recognition( db_path (string): Path to the folder containing image files. All detected faces in the database will be considered in the decision-making process. detector_backend (string): face detector backend. Options: 'opencv', 'retinaface', - 'mtcnn', 'ssd', 'dlib', 'mediapipe', 'yolov8' or 'skip' (default is opencv). + 'mtcnn', 'ssd', 'dlib', 'mediapipe', 'yolov8', 'centerface' or 'skip' + (default is opencv). distance_metric (string): Metric for measuring similarity. Options: 'cosine', 'euclidean', 'euclidean_l2' (default is cosine). model_name (str): Model for face recognition. Options: VGG-Face, Facenet, Facenet512, diff --git a/deepface/modules/verification.py b/deepface/modules/verification.py index e0455f8..6bb5248 100644 --- a/deepface/modules/verification.py +++ b/deepface/modules/verification.py @@ -45,7 +45,8 @@ def verify( OpenFace, DeepFace, DeepID, Dlib, ArcFace, SFace and GhostFaceNet (default is VGG-Face). detector_backend (string): face detector backend. Options: 'opencv', 'retinaface', - 'mtcnn', 'ssd', 'dlib', 'mediapipe', 'yolov8' or 'skip' (default is opencv) + 'mtcnn', 'ssd', 'dlib', 'mediapipe', 'yolov8', 'centerface' or 'skip' + (default is opencv) distance_metric (string): Metric for measuring similarity. Options: 'cosine', 'euclidean', 'euclidean_l2' (default is cosine). From d52ab37955dfce081d493e8d9359e8550e609da1 Mon Sep 17 00:00:00 2001 From: Sefik Ilkin Serengil Date: Fri, 12 Apr 2024 14:55:52 +0100 Subject: [PATCH 6/6] license of centerfacementioned --- README.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 3806dbc..974d224 100644 --- a/README.md +++ b/README.md @@ -194,7 +194,7 @@ Age model got ± 4.65 MAE; gender model got 97.44% accuracy, 96.29% precision an **Face Detectors** - [`Demo`](https://youtu.be/GZ2p2hj2H5k) -Face detection and alignment are important early stages of a modern face recognition pipeline. Experiments show that just alignment increases the face recognition accuracy almost 1%. [`OpenCV`](https://sefiks.com/2020/02/23/face-alignment-for-face-recognition-in-python-within-opencv/), [`SSD`](https://sefiks.com/2020/08/25/deep-face-detection-with-opencv-in-python/), [`Dlib`](https://sefiks.com/2020/07/11/face-recognition-with-dlib-in-python/), [`MTCNN`](https://sefiks.com/2020/09/09/deep-face-detection-with-mtcnn-in-python/), [`Faster MTCNN`](https://github.com/timesler/facenet-pytorch), [`RetinaFace`](https://sefiks.com/2021/04/27/deep-face-detection-with-retinaface-in-python/), [`MediaPipe`](https://sefiks.com/2022/01/14/deep-face-detection-with-mediapipe/), [`YOLOv8 Face`](https://github.com/derronqi/yolov8-face), [`YuNet`](https://github.com/ShiqiYu/libfacedetection) and [`CenterFace`](https://github.com/Star-Clouds/CenterFace) detectors are wrapped in deepface. +Face detection and alignment are important early stages of a modern face recognition pipeline. Experiments show that just alignment increases the face recognition accuracy almost 1%. [`OpenCV`](https://sefiks.com/2020/02/23/face-alignment-for-face-recognition-in-python-within-opencv/), [`Ssd`](https://sefiks.com/2020/08/25/deep-face-detection-with-opencv-in-python/), [`Dlib`](https://sefiks.com/2020/07/11/face-recognition-with-dlib-in-python/), [`MtCnn`](https://sefiks.com/2020/09/09/deep-face-detection-with-mtcnn-in-python/), `Faster MTCNN`, [`RetinaFace`](https://sefiks.com/2021/04/27/deep-face-detection-with-retinaface-in-python/), [`MediaPipe`](https://sefiks.com/2022/01/14/deep-face-detection-with-mediapipe/), `Yolo`, `YuNet` and `CenterFace` detectors are wrapped in deepface.

@@ -318,9 +318,7 @@ You can also run these commands if you are running deepface with docker. Please ## FAQ and Troubleshooting -If you believe you have identified a bug or encountered a limitation in DeepFace that is not covered in the [existing issues](https://github.com/serengil/deepface/issues) or [closed issues](https://github.com/serengil/deepface/issues?q=is%3Aissue+is%3Aclosed), kindly open a new issue. Ensure that your submission includes clear and detailed reproduction steps, such as your Python version, your DeepFace version (provided by `DeepFace.__version__`), versions of dependent packages (provided by pip freeze), specifics of any exception messages, details about how you are calling DeepFace, and the input image(s) you are using. - -Additionally, it is possible to encounter issues due to recently released dependencies, primarily Python itself or TensorFlow. It is recommended to synchronize your dependencies with the versions [specified in my environment](https://github.com/serengil/deepface/blob/master/requirements_local) and [same python version](https://github.com/serengil/deepface/blob/master/Dockerfile#L2) not to have potential compatibility issues. +If you believe you have identified a bug or encountered a limitation in DeepFace that is not covered in the [existing issues](https://github.com/serengil/deepface/issues) or [closed issues](https://github.com/serengil/deepface/issues?q=is%3Aissue+is%3Aclosed), kindly open a new issue. Ensure that your submission includes clear and detailed reproduction steps, such as your Python version, your DeepFace version, versions of dependent packages (provided by pip freeze), specifics of any exception messages, details about how you are calling DeepFace, and the input image(s) you are using. ## Contribution @@ -352,7 +350,7 @@ If you use deepface in your research for facial recogntion purposes, please cite pages = {23-27}, year = {2020}, doi = {10.1109/ASYU50717.2020.9259802}, - url = {https://doi.org/10.1109/ASYU50717.2020.9259802}, + url = {https://ieeexplore.ieee.org/document/9259802}, organization = {IEEE} } ``` @@ -367,7 +365,7 @@ If you use deepface in your research for facial attribute analysis purposes such pages = {1-4}, year = {2021}, doi = {10.1109/ICEET53442.2021.9659697}, - url = {https://doi.org/10.1109/ICEET53442.2021.9659697}, + url = {https://ieeexplore.ieee.org/document/9659697}, organization = {IEEE} } ``` @@ -378,6 +376,10 @@ Also, if you use deepface in your GitHub projects, please add `deepface` in the DeepFace is licensed under the MIT License - see [`LICENSE`](https://github.com/serengil/deepface/blob/master/LICENSE) for more details. -DeepFace wraps some external face recognition models: [VGG-Face](http://www.robots.ox.ac.uk/~vgg/software/vgg_face/), [Facenet](https://github.com/davidsandberg/facenet/blob/master/LICENSE.md), [OpenFace](https://github.com/iwantooxxoox/Keras-OpenFace/blob/master/LICENSE), [DeepFace](https://github.com/swghosh/DeepFace), [DeepID](https://github.com/Ruoyiran/DeepID/blob/master/LICENSE.md), [ArcFace](https://github.com/leondgarse/Keras_insightface/blob/master/LICENSE), [Dlib](https://github.com/davisking/dlib/blob/master/dlib/LICENSE.txt), [SFace](https://github.com/opencv/opencv_zoo/blob/master/models/face_recognition_sface/LICENSE) and [GhostFaceNet](https://github.com/HamadYA/GhostFaceNets/blob/main/LICENSE). Besides, age, gender and race / ethnicity models were trained on the backbone of VGG-Face with transfer learning. Licence types will be inherited if you are going to use those models. Please check the license types of those models for production purposes. +DeepFace wraps some external face recognition models: [VGG-Face](http://www.robots.ox.ac.uk/~vgg/software/vgg_face/), [Facenet](https://github.com/davidsandberg/facenet/blob/master/LICENSE.md), [OpenFace](https://github.com/iwantooxxoox/Keras-OpenFace/blob/master/LICENSE), [DeepFace](https://github.com/swghosh/DeepFace), [DeepID](https://github.com/Ruoyiran/DeepID/blob/master/LICENSE.md), [ArcFace](https://github.com/leondgarse/Keras_insightface/blob/master/LICENSE), [Dlib](https://github.com/davisking/dlib/blob/master/dlib/LICENSE.txt), [SFace](https://github.com/opencv/opencv_zoo/blob/master/models/face_recognition_sface/LICENSE) and [GhostFaceNet](https://github.com/HamadYA/GhostFaceNets/blob/main/LICENSE). Besides, age, gender and race / ethnicity models were trained on the backbone of VGG-Face with transfer learning. + +Similarly, DeepFace wraps many face detectors: [OpenCv](https://github.com/opencv/opencv/blob/4.x/LICENSE), [Ssd](https://github.com/opencv/opencv/blob/master/LICENSE), [Dlib](https://github.com/davisking/dlib/blob/master/LICENSE.txt), [MtCnn](https://github.com/ipazc/mtcnn/blob/master/LICENSE), [Fast MtCnn](https://github.com/timesler/facenet-pytorch/blob/master/LICENSE.md), [RetinaFace](https://github.com/serengil/retinaface/blob/master/LICENSE), [MediaPipe](https://github.com/google/mediapipe/blob/master/LICENSE), [YuNet](https://github.com/ShiqiYu/libfacedetection/blob/master/LICENSE), [Yolo](https://github.com/derronqi/yolov8-face/blob/main/LICENSE) and [CenterFace](https://github.com/Star-Clouds/CenterFace/blob/master/LICENSE). + +Licence types will be inherited if you are going to use those models. Please check the license types of those models for production purposes. DeepFace [logo](https://thenounproject.com/term/face-recognition/2965879/) is created by [Adrien Coquet](https://thenounproject.com/coquet_adrien/) and it is licensed under [Creative Commons: By Attribution 3.0 License](https://creativecommons.org/licenses/by/3.0/).