import gradio as gr import os import shutil import threading import time from PIL import Image import numpy as np from utils import verify_identity registration_dir = "registered_users" os.makedirs(registration_dir, exist_ok=True) # Register user def register_user(name, image): if image is None or not name.strip(): return "โŒ Please provide a name and webcam photo." image = Image.fromarray(image.astype("uint8")) user_path = os.path.join(registration_dir, name) os.makedirs(user_path, exist_ok=True) image.save(os.path.join(user_path, f"{name}_1.jpg")) return f"โœ… User '{name}' registered successfully." # Webcam verify def process_image(frame): if frame is None: return None, "No frame captured." result = verify_identity(None, frame, registration_dir) return frame, result # Gradio UI with gr.Blocks() as demo: gr.Markdown("## ๐Ÿง  Real-Time Face Verification (FaceNet)") with gr.Tab("๐Ÿ‘ค Register"): name = gr.Textbox(label="Enter Your Name") image = gr.Image(label="Capture Image") register_btn = gr.Button("Register") register_out = gr.Textbox(label="Status") register_btn.click(fn=register_user, inputs=[name, image], outputs=register_out) with gr.Tab("๐Ÿ” Live Verify"): with gr.Row(): input_img = gr.Image(label="๐Ÿ“ธ Webcam", streaming=True, sources=["webcam"]) output_img = gr.Image(label="๐Ÿง  Output Frame") result_text = gr.Textbox(label="Prediction", interactive=False) input_img.stream(fn=process_image, inputs=input_img, outputs=[output_img, result_text]) def auto_cleanup(interval=600): while True: if os.path.exists(registration_dir): shutil.rmtree(registration_dir) os.makedirs(registration_dir) print("๐Ÿงน Cleaned up registered_users/") time.sleep(interval) threading.Thread(target=auto_cleanup, daemon=True).start() if __name__ == "__main__": demo.launch()