Spaces:
Runtime error
Runtime error
import gradio as gr | |
import cv2 | |
import os | |
import random | |
import time | |
from services.video_service import get_random_video_frame | |
from services.metrics_service import update_metrics | |
from services.overlay_service import overlay_boxes | |
# Constants | |
TEMP_IMAGE_PATH = "temp_frame.jpg" | |
VIDEO_FOLDER = "data/sample_videos" | |
# State Variables | |
paused = False | |
frame_rate = 1 # Default 1 FPS | |
# Helper Functions | |
def monitor_feed(): | |
global paused | |
frame = get_random_video_frame() | |
if frame is None: | |
return None, update_metrics() | |
if not paused: | |
frame = overlay_boxes(frame) | |
cv2.imwrite(TEMP_IMAGE_PATH, frame) | |
return TEMP_IMAGE_PATH, update_metrics() | |
def toggle_pause(): | |
global paused | |
paused = not paused | |
def set_frame_rate(value): | |
global frame_rate | |
frame_rate = int(value) | |
def loop_monitor(): | |
while True: | |
time.sleep(1 / frame_rate if frame_rate > 0 else 1) | |
yield monitor_feed() | |
# Gradio App | |
def build_interface(): | |
with gr.Blocks() as app: | |
with gr.Row(): | |
with gr.Column(): | |
video_output = gr.Image(label="Live Drone Feed") | |
with gr.Column(): | |
metrics_output = gr.Label(label="Live Metrics") | |
with gr.Row(): | |
pause_button = gr.Button("Pause / Resume") | |
frame_rate_slider = gr.Slider(1, 10, value=1, step=1, label="Frame Rate (Frames per second)") | |
pause_button.click(toggle_pause) | |
frame_rate_slider.change(set_frame_rate, inputs=[frame_rate_slider]) | |
app.load(fn=loop_monitor, outputs=[video_output, metrics_output]) | |
return app | |
# Launch | |
if __name__ == "__main__": | |
demo = build_interface() | |
demo.queue().launch() |