49 lines
1.5 KiB
Python
49 lines
1.5 KiB
Python
import warnings
|
|
import cv2
|
|
import dlib
|
|
|
|
from ..core import FaceDetector
|
|
from ...utils import load_file_from_url
|
|
|
|
|
|
class DlibDetector(FaceDetector):
|
|
def __init__(self, device, path_to_detector=None, verbose=False):
|
|
super().__init__(device, verbose)
|
|
|
|
warnings.warn('Warning: this detector is deprecated. Please use a different one, i.e.: S3FD.')
|
|
|
|
# Initialise the face detector
|
|
if 'cuda' in device:
|
|
if path_to_detector is None:
|
|
path_to_detector = load_file_from_url(
|
|
"https://www.adrianbulat.com/downloads/dlib/mmod_human_face_detector.dat")
|
|
|
|
self.face_detector = dlib.cnn_face_detection_model_v1(path_to_detector)
|
|
else:
|
|
self.face_detector = dlib.get_frontal_face_detector()
|
|
|
|
def detect_from_image(self, tensor_or_path):
|
|
image = self.tensor_or_path_to_ndarray(tensor_or_path)
|
|
image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
|
|
|
|
detected_faces = self.face_detector(cv2.cvtColor(image, cv2.COLOR_BGR2GRAY))
|
|
|
|
if 'cuda' not in self.device:
|
|
detected_faces = [[d.left(), d.top(), d.right(), d.bottom()] for d in detected_faces]
|
|
else:
|
|
detected_faces = [[d.rect.left(), d.rect.top(), d.rect.right(), d.rect.bottom()] for d in detected_faces]
|
|
|
|
return detected_faces
|
|
|
|
@property
|
|
def reference_scale(self):
|
|
return 195
|
|
|
|
@property
|
|
def reference_x_shift(self):
|
|
return 0
|
|
|
|
@property
|
|
def reference_y_shift(self):
|
|
return 0
|