Spaces:
Configuration error
Configuration error
from typing import NamedTuple, Optional, Tuple | |
from insightface.model_zoo import model_zoo | |
import numpy as np | |
from pathlib import Path | |
class Detection(NamedTuple): | |
bbox: Optional[np.ndarray] | |
score: Optional[np.ndarray] | |
key_points: Optional[np.ndarray] | |
class FaceDetector: | |
def __init__( | |
self, | |
model_path: Path, | |
det_thresh: float = 0.5, | |
det_size: Tuple[int, int] = (640, 640), | |
mode: str = "None", | |
device: str = "cpu", | |
): | |
self.det_thresh = det_thresh | |
self.mode = mode | |
self.device = device | |
self.handler = model_zoo.get_model(str(model_path)) | |
ctx_id = -1 if device == "cpu" else 0 | |
self.handler.prepare(ctx_id, input_size=det_size) | |
def __call__(self, img: np.ndarray, max_num: int = 0) -> Detection: | |
bboxes, kpss = self.handler.detect( | |
img, threshold=self.det_thresh, max_num=max_num, metric="default" | |
) | |
if bboxes.shape[0] == 0: | |
return Detection(None, None, None) | |
return Detection(bboxes[..., :-1], bboxes[..., -1], kpss) | |