SuriRaja commited on
Commit
62ae84e
1 Parent(s): 0b21e00

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +31 -43
app.py CHANGED
@@ -1,74 +1,62 @@
1
  import gradio as gr
2
  import cv2
 
3
  from services.video_service import get_random_video_frame
4
- from services.thermal_service import detect_thermal_anomalies
5
  from services.overlay_service import overlay_boxes
 
6
  from services.metrics_service import update_metrics
7
- from PIL import Image
8
- import numpy as np
9
 
10
- # Global control variables
 
11
  paused = False
12
- frame_rate = 1 # seconds
13
 
14
- # Monitoring logic
 
 
15
  def monitor_feed():
16
  global paused
17
  if paused:
18
- yield None, update_metrics()
19
- return
20
-
21
- frame = get_random_video_frame()
22
-
23
- # Convert OpenCV BGR to PIL RGB
24
- frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
25
- pil_image = Image.fromarray(frame_rgb)
26
-
27
- detected_boxes = detect_thermal_anomalies(pil_image) # Pass PIL image
28
-
29
- frame = overlay_boxes(frame, detected_boxes)
30
 
31
- update_metrics()
32
-
33
- yield frame, update_metrics()
34
 
35
- # Helper functions for controls
36
  def toggle_pause():
37
  global paused
38
  paused = not paused
39
- return "鈻讹笍 Resume" if paused else "鈴革笍 Pause"
40
 
41
- def set_fps(new_rate):
42
  global frame_rate
43
- frame_rate = max(0.1, new_rate) # prevent too fast
44
- return frame_rate
45
-
46
- def loop_monitor():
47
- while True:
48
- yield from monitor_feed()
49
 
50
  def build_interface():
51
- global paused
52
-
53
  with gr.Blocks() as app:
54
- gr.Markdown("# Solar Surveillance Monitor")
55
-
56
  with gr.Row():
57
- video_output = gr.Image(label="Surveillance Video")
58
- metrics_output = gr.JSON(label="Live Metrics")
59
 
60
  with gr.Row():
61
- pause_resume_btn = gr.Button("鈴革笍 Pause")
62
- fps_slider = gr.Slider(0.1, 5, value=frame_rate, label="Frame Update Interval (seconds)")
63
 
64
- # Events
65
- pause_resume_btn.click(toggle_pause, outputs=pause_resume_btn)
66
- fps_slider.change(set_fps, inputs=fps_slider, outputs=fps_slider)
67
 
68
- app.load(loop_monitor, outputs=[video_output, metrics_output])
69
 
70
  return app
71
 
72
  if __name__ == "__main__":
73
  demo = build_interface()
74
- demo.launch(share=True) # Automatically create public link if running on Spaces
 
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()