import os import gradio as gr from services.aws_service import AwsService from dotenv import load_dotenv import cv2 import face_recognition import numpy as np load_dotenv() def find_face_encodings(image_path): # reading image image = cv2.imread(image_path) # get face encodings from the image face_enc = face_recognition.face_encodings(image) # return face encodings return face_enc[0] def face_similarity(img1, img2): image_1 = find_face_encodings(img1) image_2 = find_face_encodings(img2) # checking both images are same is_same = face_recognition.compare_faces([image_1], image_2)[0] accuracy = 0 if is_same: # finding the distance level between images distance = face_recognition.face_distance([image_1], image_2) distance = round(distance[0] * 100) # calcuating accuracy level between images accuracy = 100 - round(distance) return {"is_same": is_same, "accuracy": accuracy} def convert_pil_to_open_cv(pil_image): open_cv_image = np.array(pil_image) open_cv_image = open_cv_image[:, :, ::-1].copy() return open_cv_image def check_image_similarity(main_image_folder, compare_image_folder): main_image = AwsService.get_image_from_s3(os.environ.get('AWS_S3_BUCKET'), main_image_folder) compare_image = AwsService.get_image_from_s3(os.environ.get('AWS_S3_BUCKET'), compare_image_folder) # download image to local storage main_image["pil"].save("main_image.jpg") compare_image["pil"].save("compare_image.jpg") result = face_similarity("main_image.jpg", "compare_image.jpg") os.remove("main_image.jpg") os.remove("compare_image.jpg") return result iface = gr.Interface( fn=check_image_similarity, inputs=[ gr.Textbox(lines=1, placeholder="Main Image Key", value="PhotoShoots/653fea0aad75f4caca672886/Croppeds/IMG-1698687849160-2.jpg"), gr.Textbox(lines=1, placeholder="Compare Image Key", value="PhotoShoots/653fea0aad75f4caca672886/Croppeds/IMG-1698687855097-1.jpg") ], outputs="text" ) iface.launch()