import gradio as gr import numpy as np import time import threading # Global flag to control detection detection_active = False def process_video_frame(frame): """ Placeholder function for processing each video frame Replace this with your actual face spoofing detection logic """ if frame is None: return "No frame received", "", "" # Simulate processing time (remove this in production) time.sleep(0.1) # Placeholder result - replace with your actual detection is_real = np.random.choice([True, False], p=[0.7, 0.3]) confidence = np.random.uniform(0.8, 1.0) result = "Real Face" if is_real else "Spoof Detected" status = "Processing live feed..." conf_text = f"{confidence:.2%}" return status, result, conf_text def start_detection(): """ Start the detection process """ global detection_active detection_active = True return "Processing live feed..." def stop_detection(): """ Stop the detection process """ global detection_active detection_active = False return "Detection stopped" def process_frames(video_feed, status_text, result_text, confidence_text): """ Continuously process frames when detection is active """ while detection_active: if video_feed is not None: status, result, conf = process_video_frame(video_feed) status_text.update(value=status) result_text.update(value=result) confidence_text.update(value=conf) time.sleep(0.1) # Adjust the sleep time as needed with gr.Blocks() as demo: gr.Markdown("# Real-Time Face Spoofing Detection") with gr.Row(): with gr.Column(scale=2): # Main video feed video_feed = gr.Image(label="Live Camera Feed", streaming=True) with gr.Column(scale=1): # Status and results status_text = gr.Textbox(label="Status", value="Waiting for camera...") result_text = gr.Textbox(label="Detection Result") confidence_text = gr.Textbox(label="Confidence Score") # Control buttons start_button = gr.Button("Start Detection", variant="primary") stop_button = gr.Button("Stop", variant="secondary") gr.Markdown(""" ### Instructions: 1. Allow camera access when prompted 2. Click 'Start Detection' to begin real-time analysis 3. Click 'Stop' to pause the detection ### Note: - Keep your face centered and well-lit - Maintain a stable position for better results - Detection results update in real-time """) # Event handlers start_button.click( fn=start_detection, outputs=status_text ) stop_button.click( fn=stop_detection, outputs=status_text ) # Start a thread to process frames when detection is active threading.Thread( target=process_frames, args=(video_feed, status_text, result_text, confidence_text), daemon=True ).start() if __name__ == "__main__": demo.launch() # import gradio as gr # import numpy as np # import time # def process_image(img): # """Placeholder function - replace with your backend integration""" # if img is None: # return "No image provided", "", "" # time.sleep(1) # Simulate processing # return "Processing Complete", "Real Face", "Confidence: 95%" # with gr.Blocks() as demo: # gr.Markdown("# Face Spoofing Detection System") # with gr.Tabs(): # with gr.Tab("Webcam Detection"): # webcam = gr.Image(label="Webcam Feed") # webcam_status = gr.Textbox(label="Status", value="Ready") # webcam_result = gr.Textbox(label="Detection Result") # webcam_conf = gr.Textbox(label="Confidence Score") # webcam_button = gr.Button("Analyze") # webcam_button.click( # fn=process_image, # inputs=webcam, # outputs=[webcam_status, webcam_result, webcam_conf] # ) # with gr.Tab("Image Upload"): # image_input = gr.Image(label="Upload Image") # image_status = gr.Textbox(label="Status", value="Ready") # image_result = gr.Textbox(label="Detection Result") # image_conf = gr.Textbox(label="Confidence Score") # image_button = gr.Button("Analyze") # image_button.click( # fn=process_image, # inputs=image_input, # outputs=[image_status, image_result, image_conf] # ) # gr.Markdown(""" # ### Instructions: # 1. Choose either Webcam or Image Upload tab # 2. For webcam: Allow camera access and take a photo # 3. For images: Upload an image from your device # 4. Click Analyze to process the image # """) # if __name__ == "__main__": # demo.launch()