Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import cv2 | |
| from insightface.app import FaceAnalysis | |
| import torch | |
| import torch.nn as nn | |
| import numpy as np | |
| np.int = np.int32 | |
| np.float = np.float64 | |
| np.bool = np.bool_ | |
| app = FaceAnalysis(name="buffalo_l", providers=['CUDAExecutionProvider', 'CPUExecutionProvider']) | |
| app.prepare(ctx_id=0, det_size=(640, 640)) | |
| def calculate(photo1, photo2): | |
| if photo1 is None or photo2 is None: | |
| return 0 | |
| image1 = cv2.imread(photo1) | |
| faces1 = app.get(image1) | |
| if len(faces1) < 1: | |
| return 0 | |
| faceid_embeds1 = torch.from_numpy(faces1[0].normed_embedding).unsqueeze(0) | |
| image2 = cv2.imread(photo2) | |
| faces2 = app.get(image2) | |
| if len(faces2) < 1: | |
| return 0 | |
| faceid_embeds2 = torch.from_numpy(faces2[0].normed_embedding).unsqueeze(0) | |
| cos = nn.CosineSimilarity(dim=1, eps=1e-10) | |
| cos_similarity = cos(faceid_embeds1, faceid_embeds2) | |
| return cos_similarity | |
| with gr.Blocks() as demo: | |
| with gr.Row(): | |
| with gr.Column(): | |
| face_photo1 = gr.Image(label="Photo of Person 1", type="filepath") | |
| face_photo2 = gr.Image(label="Photo of Person 2", type="filepath") | |
| greet_btn = gr.Button("Calculate") | |
| with gr.Column(): | |
| output = gr.JSON() | |
| greet_btn.click(fn=calculate, inputs=[face_photo1, face_photo2], outputs=output, api_name="calculate_face_similarity") | |
| if __name__ == "__main__": | |
| demo.launch() |