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

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +49 -35
app.py CHANGED
@@ -1,65 +1,79 @@
1
- import gradio as gr
2
- import cv2
3
  import os
4
  import random
5
- import time
 
6
  from services.video_service import get_random_video_frame
7
- from services.metrics_service import update_metrics
8
  from services.overlay_service import overlay_boxes
 
 
9
 
10
- # Constants
11
  TEMP_IMAGE_PATH = "temp_frame.jpg"
12
- VIDEO_FOLDER = "data/sample_videos"
13
-
14
- # State Variables
15
  paused = False
16
- frame_rate = 1 # Default 1 FPS
 
 
 
17
 
18
- # Helper Functions
19
  def monitor_feed():
20
  global paused
 
 
 
 
21
  frame = get_random_video_frame()
 
22
  if frame is None:
23
- return None, update_metrics()
24
- if not paused:
25
- frame = overlay_boxes(frame)
26
- cv2.imwrite(TEMP_IMAGE_PATH, frame)
27
- return TEMP_IMAGE_PATH, update_metrics()
28
 
29
- def toggle_pause():
30
- global paused
31
- paused = not paused
 
32
 
33
- def set_frame_rate(value):
34
- global frame_rate
35
- frame_rate = int(value)
36
 
37
  def loop_monitor():
38
  while True:
39
- time.sleep(1 / frame_rate if frame_rate > 0 else 1)
40
  yield monitor_feed()
41
 
42
- # Gradio App
 
 
 
 
 
 
 
 
 
 
 
43
  def build_interface():
44
- with gr.Blocks() as app:
 
 
45
  with gr.Row():
46
- with gr.Column():
47
- video_output = gr.Image(label="Live Drone Feed")
48
- with gr.Column():
49
- metrics_output = gr.Label(label="Live Metrics")
50
 
51
  with gr.Row():
52
- pause_button = gr.Button("Pause / Resume")
53
- frame_rate_slider = gr.Slider(1, 10, value=1, step=1, label="Frame Rate (Frames per second)")
 
 
 
54
 
55
- pause_button.click(toggle_pause)
56
- frame_rate_slider.change(set_frame_rate, inputs=[frame_rate_slider])
 
57
 
58
- app.load(fn=loop_monitor, outputs=[video_output, metrics_output])
59
 
60
  return app
61
 
62
- # Launch
63
  if __name__ == "__main__":
64
  demo = build_interface()
65
- demo.queue().launch()
 
 
 
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
 
75
  return app
76
 
 
77
  if __name__ == "__main__":
78
  demo = build_interface()
79
+ demo.launch(server_name="0.0.0.0", server_port=7860)