|
import gradio as gr |
|
import cv2 |
|
import numpy as np |
|
from face_recognition_system import FaceRecognitionSystem |
|
import os |
|
import tempfile |
|
|
|
|
|
face_system = FaceRecognitionSystem() |
|
|
|
def process_image(image, confidence_threshold=0.5, similarity_threshold=2.0): |
|
"""Process a single image and return the annotated result""" |
|
|
|
image_bgr = cv2.cvtColor(image, cv2.COLOR_RGB2BGR) |
|
|
|
|
|
face_system.confidence_threshold = confidence_threshold |
|
face_system.similarity_threshold = similarity_threshold |
|
|
|
|
|
processed_frame = face_system.process_frame(image_bgr) |
|
|
|
|
|
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" |
|
|
|
|
|
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" |
|
|
|
|
|
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") |
|
|
|
|
|
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 |
|
) |
|
|
|
|
|
if __name__ == "__main__": |
|
demo.launch() |