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