--- license: bigscience-openrail-m --- Face verification import os import cv2 from insightface.app import FaceAnalysis import torch # prompt: compare face embediggs ``` import os import cv2 from insightface.app import FaceAnalysis import torch import torch.nn.functional as F # prompt: compare face embediggs class FaceRec: def __init__(self): self.foldername = '/home/emmanuel-nsanga/Pictures/Webcam' self.files = [] self.files_attempt = [] self.embeds = [] self.diff = [] self.ground_mathches = [] self.sample_true = [] self.sample_attemt = [] self.folder_attempt='/home/emmanuel-nsanga/Pictures/Webcam/' self.folder_ground = '/home/emmanuel-nsanga/Pictures/webcam/' self.folder_camera = '/home/emmanuel-nsanga/Pictures/camera/' self.files_ground = [self.folder_ground+files for files in os.listdir(self.folder_ground)] self.files_attempt = [self.folder_attempt+files for files in os.listdir(self.folder_attempt)] self.files_camera = [self.folder_camera+files for files in os.listdir(self.folder_camera)] self.zip_ground = list(zip(self.files_ground, self.files_attempt)) self.zip_attempt = list(zip(self.files_attempt, self.files_camera)) def embeddings(self, image): app = FaceAnalysis(name="buffalo_l", providers=['CUDAExecutionProvider', 'CPUExecutionProvider']) app.prepare(ctx_id=0, det_size=(640, 640)) image1 = cv2.imread(image) faces = app.get(image1) faceid_embeds = torch.from_numpy(faces[0].normed_embedding).unsqueeze(0) return(torch.Tensor(faceid_embeds)) def face_embed(self, face, face1): # Load the two images and get their face embeddings. face_encodings = self.embeddings(face) face_encodings1 = self.embeddings(face1) return(torch.nn.functional.cosine_similarity(face_encodings, face_encodings1)) def expectation(self, sample_data): mean, std = torch.mean(sample_data), torch.std(sample_data) distribute = torch.distributions.Normal(mean, std) return(distribute.sample(sample_shape=(10,))) def sim_distribution(self): attempt_embeddings = self.zip_ground[0::] ground_embeddings = self.zip_attempt[len(self.zip_ground)::] w_r_t_g = self.zip_ground[0::] w_r_t_c = self.zip_attempt w_r_t_g = self.zip_ground[0::len(self.zip_ground)//2] w_r_t_tr = self.zip_ground[len(self.zip_ground)//2::] ground_embeddings = [self.face_embed(attempting, attempt) for attempting, attempt in w_r_t_g] attempt_ground = [self.face_embed(attempting, attempt) for attempting, attempt in w_r_t_tr] ground_embeddings_g = [self.face_embed(attempting, attempt) for attempting, attempt in w_r_t_g] attempt_ground_c = [self.face_embed(attempting, attempt) for attempting, attempt in w_r_t_c] self.sampling_ground = self.expectation(torch.Tensor(ground_embeddings)) self.sampling_attempt_g = self.expectation(torch.Tensor(attempt_ground)) self.sampling_ground = self.expectation(torch.Tensor(ground_embeddings_g)) self.sampling_attempt_c = self.expectation(torch.Tensor(attempt_ground_c)) return(self.sampling_ground, self.sampling_attempt_g, self.sampling_ground, self.sampling_attempt_c) def model(self): sim_distribution = self.sim_distribution() xy = torch.mean(torch.Tensor([x-y for x, y in zip(sim_distribution[2], sim_distribution[3])])) print(xy.item()) if xy.item() < 0.5: print(True) else: print(False) Recognition = FaceRec() print(Recognition.model()) ```