surveillance / app.py
SuriRaja's picture
Update app.py
931480f
raw
history blame
2.17 kB
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!