From 799f83cd7bb4696ed5d208d8000656aab06f0d67 Mon Sep 17 00:00:00 2001 From: galthran-wq Date: Thu, 13 Feb 2025 12:43:54 +0000 Subject: [PATCH] true batching on detect_faces --- deepface/modules/detection.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/deepface/modules/detection.py b/deepface/modules/detection.py index 21d09f5..9fa2c83 100644 --- a/deepface/modules/detection.py +++ b/deepface/modules/detection.py @@ -230,8 +230,10 @@ def detect_faces( face_detector: Detector = modeling.build_model( task="face_detector", model_name=detector_backend ) - all_detected_faces = [] + preprocessed_images = [] + width_borders = [] + height_borders = [] for single_img in img: height, width, _ = single_img.shape @@ -258,8 +260,20 @@ def detect_faces( value=[0, 0, 0], # Color of the border (black) ) - # find facial areas of given image - facial_areas = face_detector.detect_faces(single_img) + preprocessed_images.append(single_img) + width_borders.append(width_border) + height_borders.append(height_border) + + # Detect faces in all preprocessed images + all_facial_areas = face_detector.detect_faces(preprocessed_images) + + if len(preprocessed_images) == 1: + all_facial_areas = [all_facial_areas] + + all_detected_faces = [] + for single_img, facial_areas, width_border, height_border in zip(preprocessed_images, all_facial_areas, width_borders, height_borders): + if not isinstance(facial_areas, list): + facial_areas = [facial_areas] if max_faces is not None and max_faces < len(facial_areas): facial_areas = nlargest( @@ -275,7 +289,7 @@ def detect_faces( width_border=width_border, height_border=height_border, ) - for facial_area in facial_areas + for facial_area in facial_areas if isinstance(facial_area, FacialAreaRegion) ] all_detected_faces.append(detected_faces)