import gradio as gr import torch from torchvision import transforms from PIL import Image import numpy as np from scipy.spatial.distance import cosine # Constants RECOGNITION_THRESHOLD = 0.8 # Load the model model_path = 'final_modelnew.pth' model = torch.load(model_path, map_location=torch.device('cpu')) model.eval() # Set the model to evaluation mode # Database to store embeddings and user IDs user_embeddings = {} # Preprocess the image def preprocess_image(image): transform = transforms.Compose([ transforms.Resize((224, 224)), transforms.ToTensor(), ]) image = Image.fromarray(image.astype('uint8'), 'RGB') image = transform(image).unsqueeze(0) return image # Generate embedding def generate_embedding(image): preprocessed_image = preprocess_image(image) with torch.no_grad(): # No need to track gradients embedding = model(preprocessed_image) return embedding.numpy()[0] # Register new user def register_user(image, user_id): try: embedding = generate_embedding(image) user_embeddings[user_id] = embedding return f"User {user_id} registered successfully." except Exception as e: return f"Error during registration: {str(e)}" # Recognize user def recognize_user(image): try: new_embedding = generate_embedding(image) min_distance = float('inf') recognized_user_id = "Unknown" for user_id, embedding in user_embeddings.items(): distance = cosine(new_embedding, embedding) if distance < min_distance: min_distance = distance recognized_user_id = user_id if min_distance > RECOGNITION_THRESHOLD: return "User not recognized." else: return f"Recognized User: {recognized_user_id}" except Exception as e: return f"Error during recognition: {str(e)}" def main(): with gr.Blocks() as demo: gr.Markdown("Facial Recognition System") with gr.Tab("Register"): with gr.Row(): img_register = gr.Image() user_id = gr.Textbox(label="User ID") register_button = gr.Button("Register") register_output = gr.Textbox() register_button.click(register_user, inputs=[img_register, user_id], outputs=register_output) with gr.Tab("Recognize"): with gr.Row(): img_recognize = gr.Image() recognize_button = gr.Button("Recognize") recognize_output = gr.Textbox() recognize_button.click(recognize_user, inputs=[img_recognize], outputs=recognize_output) demo.launch(share=True) if __name__ == "__main__": main()