import gradio as gr import cv2 import numpy as np from face_recognition_system import FaceRecognitionSystem import os import tempfile # Initialize the face recognition system face_system = FaceRecognitionSystem() def process_image(image, confidence_threshold=0.5, similarity_threshold=2.0): """Process a single image and return the annotated result""" # Convert from RGB (Gradio) to BGR (OpenCV) image_bgr = cv2.cvtColor(image, cv2.COLOR_RGB2BGR) # Update thresholds face_system.confidence_threshold = confidence_threshold face_system.similarity_threshold = similarity_threshold # Process the frame processed_frame = face_system.process_frame(image_bgr) # Convert back to RGB for display return cv2.cvtColor(processed_frame, cv2.COLOR_BGR2RGB) def add_face(image, name): """Add a new face to the database""" if not name.strip(): return "Error: Please enter a name" # Convert from RGB (Gradio) to BGR (OpenCV) image_bgr = cv2.cvtColor(image, cv2.COLOR_RGB2BGR) if face_system.add_face_to_database(name, image_bgr): return f"Successfully added {name} to database" return "Failed to add face to database" # Create the Gradio interface with gr.Blocks(title="Face Recognition System") as demo: gr.Markdown("# Face Recognition System") gr.Markdown("Upload an image to detect and recognize faces, or add new faces to the database.") with gr.Tab("Recognize Faces"): with gr.Row(): with gr.Column(): input_image = gr.Image(label="Input Image", type="numpy") confidence_slider = gr.Slider( minimum=0.1, maximum=1.0, value=0.5, step=0.1, label="Confidence Threshold" ) similarity_slider = gr.Slider( minimum=0.5, maximum=5.0, value=2.0, step=0.1, label="Similarity Threshold" ) detect_btn = gr.Button("Detect Faces") with gr.Column(): output_image = gr.Image(label="Output Image") with gr.Tab("Add New Face"): with gr.Row(): with gr.Column(): new_face_image = gr.Image(label="Face Image", type="numpy") name_input = gr.Textbox(label="Name") add_btn = gr.Button("Add Face to Database") with gr.Column(): result_text = gr.Textbox(label="Result") # Set up event handlers detect_btn.click( fn=process_image, inputs=[input_image, confidence_slider, similarity_slider], outputs=output_image ) add_btn.click( fn=add_face, inputs=[new_face_image, name_input], outputs=result_text ) # Launch the app if __name__ == "__main__": demo.launch()