mirror of
https://github.com/serengil/deepface.git
synced 2025-06-07 03:55:21 +00:00
opencv pseudo batching
This commit is contained in:
parent
737ee793dc
commit
b2d6178bed
@ -1,6 +1,6 @@
|
||||
# built-in dependencies
|
||||
import os
|
||||
from typing import Any, List
|
||||
from typing import Any, List, Union
|
||||
|
||||
# 3rd party dependencies
|
||||
import cv2
|
||||
@ -29,25 +29,26 @@ class OpenCvClient(Detector):
|
||||
detector["eye_detector"] = self.__build_cascade("haarcascade_eye")
|
||||
return detector
|
||||
|
||||
def detect_faces(self, img: np.ndarray) -> List[FacialAreaRegion]:
|
||||
def detect_faces(self, imgs: Union[np.ndarray, List[np.ndarray]]) -> Union[List[FacialAreaRegion], List[List[FacialAreaRegion]]]:
|
||||
"""
|
||||
Detect and align face with opencv
|
||||
|
||||
Args:
|
||||
img (np.ndarray): pre-loaded image as numpy array
|
||||
imgs (Union[np.ndarray, List[np.ndarray]]): pre-loaded image as numpy array or a list of those
|
||||
|
||||
Returns:
|
||||
results (List[FacialAreaRegion]): A list of FacialAreaRegion objects
|
||||
results (Union[List[FacialAreaRegion], List[List[FacialAreaRegion]]]): A list or a list of lists of FacialAreaRegion objects
|
||||
"""
|
||||
if isinstance(imgs, np.ndarray):
|
||||
imgs = [imgs]
|
||||
|
||||
batch_results = []
|
||||
|
||||
for img in imgs:
|
||||
resp = []
|
||||
|
||||
detected_face = None
|
||||
|
||||
faces = []
|
||||
try:
|
||||
# faces = detector["face_detector"].detectMultiScale(img, 1.3, 5)
|
||||
|
||||
# note that, by design, opencv's haarcascade scores are >0 but not capped at 1
|
||||
faces, _, scores = self.model["face_detector"].detectMultiScale3(
|
||||
img, 1.1, 10, outputRejectLevels=True
|
||||
)
|
||||
@ -59,8 +60,6 @@ class OpenCvClient(Detector):
|
||||
detected_face = img[int(y):int(y + h), int(x):int(x + w)]
|
||||
left_eye, right_eye = self.find_eyes(img=detected_face)
|
||||
|
||||
# eyes found in the detected face instead image itself
|
||||
# detected face's coordinates should be added
|
||||
if left_eye is not None:
|
||||
left_eye = (int(x + left_eye[0]), int(y + left_eye[1]))
|
||||
if right_eye is not None:
|
||||
@ -77,7 +76,9 @@ class OpenCvClient(Detector):
|
||||
)
|
||||
resp.append(facial_area)
|
||||
|
||||
return resp
|
||||
batch_results.append(resp)
|
||||
|
||||
return batch_results if len(batch_results) > 1 else batch_results[0]
|
||||
|
||||
def find_eyes(self, img: np.ndarray) -> tuple:
|
||||
"""
|
||||
|
Loading…
x
Reference in New Issue
Block a user