File size: 2,012 Bytes
b16e048
 
b32b2e9
 
 
a8cdc05
b16e048
b32b2e9
b16e048
 
a8cdc05
 
b32b2e9
b16e048
a8cdc05
30e115d
a8cdc05
b32b2e9
b16e048
 
 
a8cdc05
b16e048
b32b2e9
a8cdc05
 
 
b32b2e9
a8cdc05
 
 
b16e048
b32b2e9
a8cdc05
 
b16e048
a8cdc05
 
 
 
 
 
 
 
 
 
 
 
b32b2e9
a8cdc05
 
 
 
 
 
 
 
b16e048
a8cdc05
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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()