Spaces:
Runtime error
Runtime error
import os | |
import cv2 | |
import random | |
import time | |
import gradio as gr | |
import numpy as np | |
from services.video_service import get_random_video_frame | |
from services.overlay_service import overlay_boxes | |
# Constants | |
TEMP_IMAGE_PATH = "temp.jpg" | |
# Global control flags | |
is_paused = False | |
frame_rate = 1 # Default frame rate (frames per second) | |
# Live Metrics | |
metrics = { | |
"total_frames": 0, | |
"detected_objects": 0, | |
} | |
def monitor_feed(): | |
global is_paused, frame_rate, metrics | |
while True: | |
if not is_paused: | |
frame, anomaly_label = get_random_video_frame() | |
if frame is None: | |
time.sleep(1) | |
continue | |
# Overlay anomaly text | |
frame = overlay_boxes(frame, anomaly_label) | |
# Save temporary image | |
cv2.imwrite(TEMP_IMAGE_PATH, frame) | |
metrics["total_frames"] += 1 | |
metrics["detected_objects"] += random.randint(1, 3) # Simulated detection count | |
yield TEMP_IMAGE_PATH, f"Frames: {metrics['total_frames']}, Detections: {metrics['detected_objects']}" | |
time.sleep(1 / max(frame_rate, 1)) | |
def toggle_pause(): | |
global is_paused | |
is_paused = not is_paused | |
return "Paused" if is_paused else "Running" | |
def set_frame_rate(new_rate): | |
global frame_rate | |
frame_rate = new_rate | |
return f"Frame Rate: {frame_rate} fps" | |
def build_interface(): | |
with gr.Blocks() as demo: | |
gr.Markdown("# Solar Surveillance POC") | |
with gr.Row(): | |
video_output = gr.Image(label="Live Feed") | |
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, label="Frame Rate (frames/sec)") | |
pause_button.click(toggle_pause, outputs=[]) | |
frame_rate_slider.change(set_frame_rate, inputs=frame_rate_slider, outputs=[]) | |
demo.load(monitor_feed, outputs=[video_output, metrics_output], every=None) | |
return demo | |
if __name__ == "__main__": | |
demo = build_interface() | |
demo.launch(share=True) # Important for Hugging Face Spaces! | |