SuriRaja commited on
Commit
e8452a3
·
1 Parent(s): 8c86000

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +81 -57
app.py CHANGED
@@ -1,78 +1,102 @@
1
  import os
2
- import cv2
3
  import random
4
- import time
5
- import gradio as gr
6
  import numpy as np
7
- from services.video_service import get_random_video_frame
8
  from services.overlay_service import overlay_boxes
 
9
 
10
- # Constants
11
- TEMP_IMAGE_PATH = "temp.jpg"
12
-
13
- # Global control flags
14
- is_paused = False
15
- frame_rate = 1 # Default frame rate (frames per second)
16
-
17
- # Live Metrics
18
- metrics = {
19
- "total_frames": 0,
20
- "detected_objects": 0,
21
- }
22
-
23
- def monitor_feed():
24
- global is_paused, frame_rate, metrics
25
-
26
- while True:
27
- if not is_paused:
28
- frame, anomaly_label = get_random_video_frame()
29
-
30
- if frame is None:
31
- time.sleep(1)
32
- continue
33
-
34
- # Overlay anomaly text
35
- frame = overlay_boxes(frame, anomaly_label)
36
-
37
- # Save temporary image
38
- cv2.imwrite(TEMP_IMAGE_PATH, frame)
39
 
40
- metrics["total_frames"] += 1
41
- metrics["detected_objects"] += random.randint(1, 3) # Simulated detection count
42
 
43
- yield TEMP_IMAGE_PATH, f"Frames: {metrics['total_frames']}, Detections: {metrics['detected_objects']}"
 
 
44
 
45
- time.sleep(1 / max(frame_rate, 1))
 
46
 
47
- def toggle_pause():
48
- global is_paused
49
- is_paused = not is_paused
50
- return "Paused" if is_paused else "Running"
51
 
52
- def set_frame_rate(new_rate):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
  global frame_rate
54
  frame_rate = new_rate
55
- return f"Frame Rate: {frame_rate} fps"
56
 
57
  def build_interface():
58
- with gr.Blocks() as demo:
59
- gr.Markdown("# Solar Surveillance POC")
60
-
61
  with gr.Row():
62
- video_output = gr.Image(label="Live Feed")
63
- metrics_output = gr.Label(label="Live Metrics")
64
 
65
  with gr.Row():
66
- pause_button = gr.Button("Pause / Resume")
67
- frame_rate_slider = gr.Slider(1, 10, value=1, label="Frame Rate (frames/sec)")
 
 
 
 
 
 
 
 
 
 
 
 
68
 
69
- pause_button.click(toggle_pause, outputs=[])
70
- frame_rate_slider.change(set_frame_rate, inputs=frame_rate_slider, outputs=[])
71
 
72
- demo.load(monitor_feed, outputs=[video_output, metrics_output], every=None)
73
 
74
- return demo
75
 
76
- if __name__ == "__main__":
77
- demo = build_interface()
78
- demo.launch(share=True) # Important for Hugging Face Spaces!
 
1
  import os
 
2
  import random
3
+ import cv2
 
4
  import numpy as np
5
+ import gradio as gr
6
  from services.overlay_service import overlay_boxes
7
+ from services.video_service import get_random_video_frame
8
 
9
+ # Global control variables
10
+ paused = False
11
+ frame_rate = 1.0 # seconds between frames
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
 
13
+ # Temporary image path for current frame
14
+ TEMP_IMAGE_PATH = "temp_frame.jpg"
15
 
16
+ # Metrics
17
+ total_detections = 0
18
+ anomaly_counter = {}
19
 
20
+ # Define list of possible anomaly labels for simulation
21
+ possible_labels = ["Panel Crack", "Dust Accumulation", "Human Intrusion", "Overheating"]
22
 
 
 
 
 
23
 
24
+ def monitor_feed():
25
+ global total_detections, anomaly_counter
26
+ if paused:
27
+ frame = np.zeros((480, 640, 3), dtype=np.uint8)
28
+ cv2.putText(frame, "PAUSED", (200, 250), cv2.FONT_HERSHEY_SIMPLEX, 2, (0, 0, 255), 5)
29
+ else:
30
+ frame = get_random_video_frame()
31
+ if frame is None:
32
+ frame = np.zeros((480, 640, 3), dtype=np.uint8)
33
+ else:
34
+ # Simulate random detections
35
+ detections = []
36
+ for _ in range(random.randint(1, 5)):
37
+ label = random.choice(possible_labels)
38
+ x1, y1 = random.randint(0, frame.shape[1]//2), random.randint(0, frame.shape[0]//2)
39
+ x2, y2 = x1 + random.randint(50, 150), y1 + random.randint(50, 150)
40
+ detections.append({"box": [x1, y1, x2, y2], "label": label})
41
+
42
+ frame = overlay_boxes(frame, detections)
43
+
44
+ # Update metrics
45
+ total_detections += len(detections)
46
+ for det in detections:
47
+ anomaly_counter[det["label"]] = anomaly_counter.get(det["label"], 0) + 1
48
+
49
+ cv2.imwrite(TEMP_IMAGE_PATH, frame)
50
+ return TEMP_IMAGE_PATH, generate_metrics_text()
51
+
52
+
53
+ def generate_metrics_text():
54
+ metrics_text = f"Total Detections: {total_detections}\n"
55
+ for label, count in anomaly_counter.items():
56
+ metrics_text += f"{label}: {count}\n"
57
+ return metrics_text
58
+
59
+
60
+ def pause_monitor():
61
+ global paused
62
+ paused = True
63
+
64
+ def resume_monitor():
65
+ global paused
66
+ paused = False
67
+
68
+ def update_frame_rate(new_rate):
69
  global frame_rate
70
  frame_rate = new_rate
71
+
72
 
73
  def build_interface():
74
+ with gr.Blocks() as app:
75
+ gr.Markdown("# Solar Surveillance - Live Monitor \ud83d\ude80")
76
+
77
  with gr.Row():
78
+ video_output = gr.Image(label="Live Feed", show_label=True)
79
+ metrics_output = gr.Textbox(label="Live Metrics", interactive=False)
80
 
81
  with gr.Row():
82
+ with gr.Column():
83
+ pause_btn = gr.Button("Pause")
84
+ resume_btn = gr.Button("Resume")
85
+ frame_rate_slider = gr.Slider(0.1, 5.0, value=1.0, label="Frame Rate (seconds)")
86
+
87
+ pause_btn.click(fn=pause_monitor)
88
+ resume_btn.click(fn=resume_monitor)
89
+ frame_rate_slider.change(fn=update_frame_rate, inputs=frame_rate_slider)
90
+
91
+ def loop_monitor():
92
+ while True:
93
+ yield monitor_feed()
94
+
95
+ app.live(loop_monitor, outputs=[video_output, metrics_output], interval=lambda: frame_rate)
96
 
97
+ return app
 
98
 
 
99
 
100
+ demo = build_interface()
101
 
102
+ demo.launch(server_name="0.0.0.0", server_port=7860)