54 lines
1.6 KiB
Python
54 lines
1.6 KiB
Python
import os
|
|
import numpy as np
|
|
import torch
|
|
|
|
from ..core import FaceDetector
|
|
|
|
|
|
class FolderDetector(FaceDetector):
|
|
'''This is a simple helper module that assumes the faces were detected already
|
|
(either previously or are provided as ground truth).
|
|
|
|
The class expects to find the bounding boxes in the same format used by
|
|
the rest of face detectors, mainly ``list[(x1,y1,x2,y2),...]``.
|
|
For each image the detector will search for a file with the same name and with one of the
|
|
following extensions: .npy, .t7 or .pth
|
|
|
|
'''
|
|
|
|
def __init__(self, device, path_to_detector=None, verbose=False):
|
|
super(FolderDetector, self).__init__(device, verbose)
|
|
|
|
def detect_from_image(self, tensor_or_path):
|
|
# Only strings supported
|
|
if not isinstance(tensor_or_path, str):
|
|
raise ValueError
|
|
|
|
base_name = os.path.splitext(tensor_or_path)[0]
|
|
|
|
if os.path.isfile(base_name + '.npy'):
|
|
detected_faces = np.load(base_name + '.npy')
|
|
elif os.path.isfile(base_name + '.t7'):
|
|
detected_faces = torch.load(base_name + '.t7')
|
|
elif os.path.isfile(base_name + '.pth'):
|
|
detected_faces = torch.load(base_name + '.pth')
|
|
else:
|
|
raise FileNotFoundError
|
|
|
|
if not isinstance(detected_faces, list):
|
|
raise TypeError
|
|
|
|
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
|