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.overlay_service import overlay_boxes | |
# Constants | |
TEMP_IMAGE_PATH = "temp_frame.jpg" | |
VIDEOS_FOLDER = "videos" | |
# App states | |
app_state = {"paused": False} | |
# Live metrics | |
live_metrics = { | |
"Frames Processed": 0, | |
"Current FPS": 1, | |
"Detections": 0, | |
} | |
def monitor_feed(frame_rate=1): | |
while True: | |
if not app_state["paused"]: | |
frame, label = get_random_video_frame() | |
if frame is not None: | |
frame_with_overlay = overlay_boxes(frame, label) | |
cv2.imwrite(TEMP_IMAGE_PATH, frame_with_overlay) | |
live_metrics["Frames Processed"] += 1 | |
live_metrics["Current FPS"] = frame_rate | |
else: | |
continue # Skip if frame is None | |
time.sleep(1.0 / frame_rate) | |
yield TEMP_IMAGE_PATH, format_metrics() | |
def format_metrics(): | |
return (f"Frames Processed: {live_metrics['Frames Processed']}\n" | |
f"Current FPS: {live_metrics['Current FPS']}\n" | |
f"Detections: {live_metrics['Detections']}") | |
def toggle_pause(): | |
app_state["paused"] = not app_state["paused"] | |
return "鈻讹笍 Resume" if app_state["paused"] else "鈴革笍 Pause" | |
def build_interface(): | |
with gr.Blocks() as app: | |
gr.Markdown("# Solar Surveillance System \ud83c\udf0c") | |
with gr.Row(): | |
video_output = gr.Image(label="Live Feed", elem_id="video-stream") | |
metrics_output = gr.Textbox(label="Live Metrics") | |
with gr.Row(): | |
with gr.Column(): | |
pause_button = gr.Button("鈴革笍 Pause") | |
frame_slider = gr.Slider(1, 10, value=1, step=1, label="Frame Rate (FPS)") | |
runner = gr.Interface( | |
fn=monitor_feed, | |
inputs=frame_slider, | |
outputs=[video_output, metrics_output], | |
live=True, | |
concurrency_limit=1 | |
) | |
pause_button.click(toggle_pause, outputs=pause_button) | |
return app | |
if __name__ == "__main__": | |
demo = build_interface() | |
demo.launch() | |