Spaces:
Sleeping
Sleeping
File size: 2,027 Bytes
1a1d215 80bd48b 8f7a4e6 e8452a3 62ae84e 8f7a4e6 80bd48b c92e309 8f7a4e6 06a815f 8f7a4e6 a421f1e 8f7a4e6 62ae84e 8f7a4e6 e8452a3 8f7a4e6 1a1d215 8f7a4e6 62ae84e 8f7a4e6 62ae84e 8f7a4e6 1a1d215 8f7a4e6 1a1d215 8f7a4e6 80bd48b 8f7a4e6 1a1d215 8f7a4e6 e8452a3 8f7a4e6 e8452a3 8f7a4e6 e8452a3 8f7a4e6 4e2d873 8f7a4e6 8db9899 06a815f 8f7a4e6 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
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()
|