SuriRaja commited on
Commit
80bd48b
·
1 Parent(s): 1a1d215

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +39 -44
app.py CHANGED
@@ -1,74 +1,69 @@
1
- import os
2
- import random
3
- import cv2
4
  import gradio as gr
 
5
  from services.video_service import get_random_video_frame
6
- from services.overlay_service import overlay_boxes
7
  from services.thermal_service import detect_thermal_anomalies
8
- from services.metrics_service import update_metrics, get_metrics_text
 
 
 
9
 
10
- # Global Configurations
11
- TEMP_IMAGE_PATH = "temp_frame.jpg"
12
  paused = False
13
- frame_rate = 1 # Default frames per second
14
-
15
- # Gradio state variables
16
- global_frame_rate = frame_rate
17
 
 
18
  def monitor_feed():
19
  global paused
20
-
21
  if paused:
22
- return TEMP_IMAGE_PATH, get_metrics_text()
 
23
 
24
  frame = get_random_video_frame()
25
 
26
- if frame is None:
27
- return TEMP_IMAGE_PATH, get_metrics_text()
 
 
 
28
 
29
- detected_boxes = detect_thermal_anomalies(frame)
30
  frame = overlay_boxes(frame, detected_boxes)
31
 
32
- update_metrics(detected=bool(detected_boxes), anomaly_name="Anomaly")
33
 
34
- cv2.imwrite(TEMP_IMAGE_PATH, frame)
35
 
36
- return TEMP_IMAGE_PATH, get_metrics_text()
 
 
 
 
 
 
 
 
 
37
 
38
  def loop_monitor():
39
  while True:
40
- yield monitor_feed()
41
-
42
- def pause_stream():
43
- global paused
44
- paused = True
45
 
46
- def resume_stream():
47
  global paused
48
- paused = False
49
-
50
- def update_frame_rate(new_rate):
51
- global global_frame_rate
52
- global_frame_rate = int(new_rate)
53
 
54
- def build_interface():
55
- with gr.Blocks(title="Solar Surveillance Thermal Detection") as app:
56
- gr.Markdown("# ✨ Solar Surveillance Thermal Anomaly Detection")
57
 
58
  with gr.Row():
59
- video_output = gr.Image(label="Video Feed", elem_id="video-feed")
60
- metrics_output = gr.Textbox(label="Live Metrics", elem_id="metrics-box")
61
 
62
  with gr.Row():
63
- with gr.Column():
64
- pause_button = gr.Button("Pause")
65
- resume_button = gr.Button("Resume")
66
- with gr.Column():
67
- frame_rate_slider = gr.Slider(1, 10, step=1, value=global_frame_rate, label="Frame Rate (fps)")
68
 
69
- pause_button.click(pause_stream)
70
- resume_button.click(resume_stream)
71
- frame_rate_slider.change(update_frame_rate, inputs=[frame_rate_slider])
72
 
73
  app.load(loop_monitor, outputs=[video_output, metrics_output])
74
 
@@ -76,4 +71,4 @@ def build_interface():
76
 
77
  if __name__ == "__main__":
78
  demo = build_interface()
79
- demo.launch(server_name="0.0.0.0", server_port=7860)
 
 
 
 
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
 
 
71
 
72
  if __name__ == "__main__":
73
  demo = build_interface()
74
+ demo.launch(share=True) # Automatically create public link if running on Spaces