surveillance / app.py
SuriRaja's picture
Update app.py
4e2d873
raw
history blame
2.16 kB
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()