File size: 935 Bytes
5d3f355
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from facenet_pytorch import InceptionResnetV1, MTCNN as FACE_DETECTOR
import torch 
import numpy as np 

device = 'cuda:0' if torch.cuda.is_available() else 'cpu'
print('running device: ', device)

class FacenetPytorch:

    def __init__(self):
        self.face_detector = FACE_DETECTOR(keep_all=True, device=device, margin=20, thresholds=[0.6, 0.9, 0.9])
        self.resnet = InceptionResnetV1(pretrained='vggface2').eval()
    
    def get_embedding(self, image):
        faces = self.extract_faces(image)
        assert len(faces) == 1, f"total face should be 1, instead of {len(faces)}"
        return np.squeeze(self.resnet(faces[0]).detach().numpy())

    def extract_faces(self, image):
        result = []
        faces = self.face_detector(image)
        if faces is not None:
            print('total face: ', len(faces))
            for face in faces:
                result.append(face.unsqueeze(0))
        return result