File size: 1,306 Bytes
0039c14
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import cv2
import insightface
from insightface.app.common import Face
from insightface.model_zoo import model_zoo

import numpy as np

class ImageEmbedding:
    def __init__(self):

        det_model_path = 'models/buffalo_l/det_10g.onnx'
        rec_model_path = 'models/antelopev2/glintr100.onnx'

        self.det_model = model_zoo.get_model(f'{det_model_path}')
        self.rec_model = model_zoo.get_model(f'{rec_model_path}')

        self.det_model.prepare(ctx_id=0, input_size=(640, 640), det_thres=0.5)

    def cosine_similarity(self, embeddings1, embeddings2):
        return np.dot(embeddings1, embeddings2) / (np.linalg.norm(embeddings1) * np.linalg.norm(embeddings2))

    def get_face_embedding(self, img):
        bboxes, kpss = self.det_model.detect(img, max_num=0, metric='defualt')

        bbox = bboxes[0, :4]
        det_score = bboxes[0, 4]
        kps = kpss[0]
        face = Face(bbox=bbox, kps=kps, det_score=det_score)

        self.rec_model.get(img, face)
        embeddings = face.normed_embedding

        bbox = face.bbox
        # Convert float coordinates to integers
        bbox = [int(coord) for coord in bbox]

        # Draw the rectangle on the image
        cv2.rectangle(img, (bbox[0], bbox[1]), (bbox[2], bbox[3]), (0, 255, 0), 2)

        return embeddings, img