Spaces:
Running
on
L40S
Running
on
L40S
File size: 1,259 Bytes
bdd549c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
import os
import sys
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
sys.path.append(BASE_DIR)
import torch
from src.dataset.face_align.yoloface import YoloFace
class AlignImage(object):
def __init__(self, device='cuda', det_path='checkpoints/yoloface_v5m.pt'):
self.facedet = YoloFace(pt_path=det_path, confThreshold=0.5, nmsThreshold=0.45, device=device)
@torch.no_grad()
def __call__(self, im, maxface=False):
bboxes, kpss, scores = self.facedet.detect(im)
face_num = bboxes.shape[0]
five_pts_list = []
scores_list = []
bboxes_list = []
for i in range(face_num):
five_pts_list.append(kpss[i].reshape(5,2))
scores_list.append(scores[i])
bboxes_list.append(bboxes[i])
if maxface and face_num>1:
max_idx = 0
max_area = (bboxes[0, 2])*(bboxes[0, 3])
for i in range(1, face_num):
area = (bboxes[i,2])*(bboxes[i,3])
if area>max_area:
max_idx = i
five_pts_list = [five_pts_list[max_idx]]
scores_list = [scores_list[max_idx]]
bboxes_list = [bboxes_list[max_idx]]
return five_pts_list, scores_list, bboxes_list |