SuriRaja commited on
Commit
8f7a4e6
·
1 Parent(s): f2da774

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +48 -36
app.py CHANGED
@@ -1,62 +1,74 @@
1
  import gradio as gr
2
  import cv2
3
- import numpy as np
4
  from services.video_service import get_random_video_frame
5
- from services.overlay_service import overlay_boxes
6
  from services.thermal_service import detect_thermal_anomalies
 
7
  from services.metrics_service import update_metrics
8
 
9
- # Control Variables
10
- frame_rate = 1
11
  paused = False
 
12
 
13
- # Temp image path (optional, depends if thermal needs)
14
  TEMP_IMAGE_PATH = "temp.jpg"
15
 
 
16
  def monitor_feed():
17
  global paused
 
18
  if paused:
19
- frame = np.zeros((480, 640, 3), dtype=np.uint8)
20
- detected_boxes = []
 
21
  else:
22
  frame = get_random_video_frame()
23
- cv2.imwrite(TEMP_IMAGE_PATH, frame)
24
- detected_boxes = detect_thermal_anomalies(TEMP_IMAGE_PATH)
25
  frame = overlay_boxes(frame, detected_boxes)
26
-
27
- metrics = update_metrics(detected_boxes)
28
- return frame[:, :, ::-1], metrics
29
 
30
- def loop_monitor():
31
- while True:
32
- yield monitor_feed()
33
 
34
- def toggle_pause():
35
- global paused
36
- paused = not paused
 
 
 
 
 
 
37
 
38
- def update_frame_rate(value):
39
- global frame_rate
40
- frame_rate = value
 
41
 
42
- def build_interface():
43
- with gr.Blocks() as app:
44
- gr.Markdown("# \ud83d\ude80 Surveillance Monitor Dashboard")
45
- with gr.Row():
46
- video_output = gr.Image(label="Live Video Feed")
47
- metrics_output = gr.JSON(label="Metrics")
48
 
49
- with gr.Row():
50
- pause_button = gr.Button("\u23f8\ufe0f Pause / Resume")
51
- frame_rate_slider = gr.Slider(minimum=0.1, maximum=5.0, value=1.0, label="Frame Rate (sec)")
 
52
 
53
- pause_button.click(toggle_pause)
54
- frame_rate_slider.change(update_frame_rate, inputs=[frame_rate_slider])
 
 
55
 
56
- app.load(fn=loop_monitor, outputs=[video_output, metrics_output], every=1)
 
 
57
 
58
- return app
 
 
 
 
59
 
60
  if __name__ == "__main__":
61
- demo = build_interface()
62
- demo.launch()
 
1
  import gradio as gr
2
  import cv2
3
+ import os
4
  from services.video_service import get_random_video_frame
 
5
  from services.thermal_service import detect_thermal_anomalies
6
+ from services.overlay_service import overlay_boxes
7
  from services.metrics_service import update_metrics
8
 
9
+ # Globals
 
10
  paused = False
11
+ frame_rate = 1
12
 
13
+ # Constants
14
  TEMP_IMAGE_PATH = "temp.jpg"
15
 
16
+ # Core monitor function
17
  def monitor_feed():
18
  global paused
19
+
20
  if paused:
21
+ frame = cv2.imread(TEMP_IMAGE_PATH)
22
+ if frame is None:
23
+ frame = get_random_video_frame()
24
  else:
25
  frame = get_random_video_frame()
26
+ detected_boxes = detect_thermal_anomalies(frame)
 
27
  frame = overlay_boxes(frame, detected_boxes)
28
+ cv2.imwrite(TEMP_IMAGE_PATH, frame)
 
 
29
 
30
+ metrics = update_metrics()
31
+ return frame[:, :, ::-1], metrics # Convert BGR to RGB for Gradio
 
32
 
33
+ # Gradio UI
34
+ with gr.Blocks() as app:
35
+ gr.Markdown("# \ud83c\udf10 Thermal Anomaly Monitoring Dashboard")
36
+
37
+ with gr.Row():
38
+ with gr.Column(scale=3):
39
+ video_output = gr.Image(label="Live Video Feed", elem_id="video-feed")
40
+ with gr.Column(scale=1):
41
+ metrics_output = gr.Label(label="Live Metrics", elem_id="metrics")
42
 
43
+ with gr.Row():
44
+ pause_btn = gr.Button("\u23F8\ufe0f Pause")
45
+ resume_btn = gr.Button("\u25b6\ufe0f Resume")
46
+ frame_slider = gr.Slider(0.2, 5, value=1, label="Frame Interval (seconds)")
47
 
48
+ def toggle_pause():
49
+ global paused
50
+ paused = True
51
+ return gr.update()
 
 
52
 
53
+ def toggle_resume():
54
+ global paused
55
+ paused = False
56
+ return gr.update()
57
 
58
+ def set_frame_rate(val):
59
+ global frame_rate
60
+ frame_rate = val
61
+ return gr.update()
62
 
63
+ pause_btn.click(toggle_pause)
64
+ resume_btn.click(toggle_resume)
65
+ frame_slider.change(set_frame_rate, inputs=[frame_slider])
66
 
67
+ app.stream(
68
+ monitor_feed,
69
+ outputs=[video_output, metrics_output],
70
+ every=lambda: frame_rate
71
+ )
72
 
73
  if __name__ == "__main__":
74
+ app.launch()