surveillance143 / app.py
SuriRaja's picture
Update app.py
8f7a4e6
raw
history blame
2.03 kB
import gradio as gr
import cv2
import os
from services.video_service import get_random_video_frame
from services.thermal_service import detect_thermal_anomalies
from services.overlay_service import overlay_boxes
from services.metrics_service import update_metrics
# Globals
paused = False
frame_rate = 1
# Constants
TEMP_IMAGE_PATH = "temp.jpg"
# Core monitor function
def monitor_feed():
global paused
if paused:
frame = cv2.imread(TEMP_IMAGE_PATH)
if frame is None:
frame = get_random_video_frame()
else:
frame = get_random_video_frame()
detected_boxes = detect_thermal_anomalies(frame)
frame = overlay_boxes(frame, detected_boxes)
cv2.imwrite(TEMP_IMAGE_PATH, frame)
metrics = update_metrics()
return frame[:, :, ::-1], metrics # Convert BGR to RGB for Gradio
# Gradio UI
with gr.Blocks() as app:
gr.Markdown("# \ud83c\udf10 Thermal Anomaly Monitoring Dashboard")
with gr.Row():
with gr.Column(scale=3):
video_output = gr.Image(label="Live Video Feed", elem_id="video-feed")
with gr.Column(scale=1):
metrics_output = gr.Label(label="Live Metrics", elem_id="metrics")
with gr.Row():
pause_btn = gr.Button("\u23F8\ufe0f Pause")
resume_btn = gr.Button("\u25b6\ufe0f Resume")
frame_slider = gr.Slider(0.2, 5, value=1, label="Frame Interval (seconds)")
def toggle_pause():
global paused
paused = True
return gr.update()
def toggle_resume():
global paused
paused = False
return gr.update()
def set_frame_rate(val):
global frame_rate
frame_rate = val
return gr.update()
pause_btn.click(toggle_pause)
resume_btn.click(toggle_resume)
frame_slider.change(set_frame_rate, inputs=[frame_slider])
app.stream(
monitor_feed,
outputs=[video_output, metrics_output],
every=lambda: frame_rate
)
if __name__ == "__main__":
app.launch()