Abhi-22's picture
Update app.py
149db20 verified
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()