face_id.py
2.71 KB
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import MNN
import cv2
import numpy as np
import logging
class Face_Recognizer(object):
def __init__(self, model_path):
logging.info('******** Start Init Face ID ********')
self.reg_interpreter = MNN.Interpreter(model_path)
self.reg_session = self.reg_interpreter.createSession()
self.reg_input_tensor = self.reg_interpreter.getSessionInput(self.reg_session)
logging.info('******** Success Init Face ID ********')
# def recognize(self, imgs):
#
# new_imgs = []
# for i in range(len(imgs)):
# img = imgs[i]
# img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# img = (img / 255. - 0.5) / 0.5
# img = img.transpose(2, 0, 1)
# img = np.expand_dims(img, axis=0)
#
# new_imgs.append(img)
#
# new_imgs = np.array(new_imgs)
# new_imgs = new_imgs.astype(np.float32)
#
# self.reg_interpreter.resizeTensor(self.reg_input_tensor, (len(imgs), 3, 112, 112))
# self.reg_interpreter.resizeSession(self.reg_session)
#
# input_tensor = MNN.Tensor((len(imgs), 3, 112, 112), MNN.Halide_Type_Float, new_imgs, MNN.Tensor_DimensionType_Caffe)
# self.reg_input_tensor.copyFrom(input_tensor)
# self.reg_interpreter.runSession(self.reg_session)
# output_tensor = self.reg_interpreter.getSessionOutput(self.reg_session, 'output0')
# output = output_tensor.getData()
#
# # feats.append(output[0])
# # feats.append(output)
#
# embeddings = list()
# num = int(len(output)/512)
# for i in range(num):
# if i < num:
# embeddings.append(output[i*512:(i+1)*512])
#
# feats_np = np.array(embeddings)
# return feats_np
def recognize(self, imgs):
feats = []
for i in range(len(imgs)):
img = imgs[i]
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = img.astype(np.float)
img = (img / 255. - 0.5) / 0.5
img = img.transpose(2, 0, 1)
img = np.expand_dims(img, axis=0)
img = img.astype(np.float32)
input_tensor = MNN.Tensor((1, 3, 112, 112), MNN.Halide_Type_Float, img, MNN.Tensor_DimensionType_Caffe)
self.reg_input_tensor.copyFrom(input_tensor)
self.reg_interpreter.runSession(self.reg_session)
output_tensor = self.reg_interpreter.getSessionOutput(self.reg_session, 'output0')
output = output_tensor.getData()
# feats.append(output[0])
feats.append(output)
feats_np = np.array(feats)
return feats_np