| --- |
| 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()) |
| |
| |
| ``` |
|
|