Spaces:
Sleeping
Sleeping
| 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 |