broadfield-dev commited on
Commit
4020008
·
verified ·
1 Parent(s): 0b2ce51

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +41 -15
app.py CHANGED
@@ -59,7 +59,7 @@ def detect_circles(frame_diff, image_center, center_tolerance, param1, param2, m
59
  return None
60
 
61
  def analyze_gif(gif_file, lower_bound, upper_bound, param1, param2, center_tolerance, morph_iterations):
62
- """Analyze a GIF for growing concentric circles of mid-to-light pixels."""
63
  try:
64
  # Handle Gradio file input
65
  gif_path = gif_file.name if hasattr(gif_file, 'name') else gif_file
@@ -105,33 +105,59 @@ def analyze_gif(gif_file, lower_bound, upper_bound, param1, param2, center_toler
105
  "output_frame": frames[i + 1] # Store the frame for visualization
106
  })
107
 
108
- # Filter frames where the circle is growing
109
  growing_circle_data = []
 
110
  if all_circle_data:
111
- # Start with the first detection
112
- growing_circle_data.append(all_circle_data[0])
113
  for i in range(1, len(all_circle_data)):
114
- # Compare radius with the last growing circle
115
- if all_circle_data[i]["radius"] > growing_circle_data[-1]["radius"]:
116
- growing_circle_data.append(all_circle_data[i])
 
 
 
 
 
 
 
 
 
 
 
117
 
118
  # Generate output frames and report
119
  results = []
120
- report = "Analysis Report (as of 07:44 PM PDT, May 24, 2025):\n"
121
- if growing_circle_data:
122
- report += f"Detected {len(growing_circle_data)} frames with growing concentric circles of mid-to-light pixels:\n"
123
- for c in growing_circle_data:
124
- # Visualize the frame with detected circle
 
 
125
  output_frame = cv2.cvtColor(c["output_frame"], cv2.COLOR_GRAY2RGB)
126
  cv2.circle(output_frame, (c["center"][0], c["center"][1]), c["radius"], (0, 255, 0), 2)
 
 
 
 
 
127
  # Convert to PIL Image for Gradio
128
  output_frame = Image.fromarray(output_frame)
129
  results.append(output_frame)
130
 
 
 
 
 
 
 
 
 
131
  report += f"Frame {c['frame']}: Center at {c['center']}, Radius {c['radius']} pixels\n"
132
  report += "\nConclusion: Growing concentric circles of mid-to-light pixels detected, indicative of a potential Earth-directed CME."
133
  else:
134
- report += "No growing concentric circles of mid-to-light pixels detected. CME may not be Earth-directed."
135
 
136
  return report, results
137
  except Exception as e:
@@ -151,10 +177,10 @@ iface = gr.Interface(
151
  ],
152
  outputs=[
153
  gr.Textbox(label="Analysis Report"),
154
- gr.Gallery(label="Frames with Growing Circles")
155
  ],
156
  title="Solar CME Detection",
157
- description="Upload a GIF of solar images to detect growing concentric circles of mid-to-light pixels indicative of Earth-directed coronal mass ejections (CMEs). Adjust the sliders to fine-tune detection."
158
  )
159
 
160
  if __name__ == "__main__":
 
59
  return None
60
 
61
  def analyze_gif(gif_file, lower_bound, upper_bound, param1, param2, center_tolerance, morph_iterations):
62
+ """Analyze a GIF for concentric circles, highlighting growing series."""
63
  try:
64
  # Handle Gradio file input
65
  gif_path = gif_file.name if hasattr(gif_file, 'name') else gif_file
 
105
  "output_frame": frames[i + 1] # Store the frame for visualization
106
  })
107
 
108
+ # Find the longest series of frames where the circle is growing
109
  growing_circle_data = []
110
+ current_series = []
111
  if all_circle_data:
112
+ current_series.append(all_circle_data[0])
 
113
  for i in range(1, len(all_circle_data)):
114
+ if all_circle_data[i]["radius"] > current_series[-1]["radius"]:
115
+ current_series.append(all_circle_data[i])
116
+ else:
117
+ # If the radius doesn't increase, check if the current series is the longest
118
+ if len(current_series) > len(growing_circle_data):
119
+ growing_circle_data = current_series.copy()
120
+ current_series = [all_circle_data[i]]
121
+
122
+ # Check the last series
123
+ if len(current_series) > len(growing_circle_data):
124
+ growing_circle_data = current_series.copy()
125
+
126
+ # Mark frames that are part of the growing series
127
+ growing_frames = set(c["frame"] for c in growing_circle_data)
128
 
129
  # Generate output frames and report
130
  results = []
131
+ report = "Analysis Report (as of 08:07 PM PDT, May 24, 2025):\n"
132
+
133
+ # Report all detected circles
134
+ if all_circle_data:
135
+ report += f"\nAll Frames with Detected Circles ({len(all_circle_data)} frames):\n"
136
+ for c in all_circle_data:
137
+ # Visualize the frame with detected circle (green)
138
  output_frame = cv2.cvtColor(c["output_frame"], cv2.COLOR_GRAY2RGB)
139
  cv2.circle(output_frame, (c["center"][0], c["center"][1]), c["radius"], (0, 255, 0), 2)
140
+
141
+ # If the frame is part of the growing series, add a red circle
142
+ if c["frame"] in growing_frames:
143
+ cv2.circle(output_frame, (c["center"][0], c["center"][1]), c["radius"] + 2, (255, 0, 0), 2)
144
+
145
  # Convert to PIL Image for Gradio
146
  output_frame = Image.fromarray(output_frame)
147
  results.append(output_frame)
148
 
149
+ report += f"Frame {c['frame']}: Center at {c['center']}, Radius {c['radius']} pixels\n"
150
+ else:
151
+ report += "No circles detected.\n"
152
+
153
+ # Report the growing series
154
+ if growing_circle_data:
155
+ report += f"\nSeries of Frames with Growing Circles ({len(growing_circle_data)} frames):\n"
156
+ for c in growing_circle_data:
157
  report += f"Frame {c['frame']}: Center at {c['center']}, Radius {c['radius']} pixels\n"
158
  report += "\nConclusion: Growing concentric circles of mid-to-light pixels detected, indicative of a potential Earth-directed CME."
159
  else:
160
+ report += "\nNo growing concentric circles detected. CME may not be Earth-directed."
161
 
162
  return report, results
163
  except Exception as e:
 
177
  ],
178
  outputs=[
179
  gr.Textbox(label="Analysis Report"),
180
+ gr.Gallery(label="Frames with Detected Circles (Green: Detected, Red: Growing Series)")
181
  ],
182
  title="Solar CME Detection",
183
+ description="Upload a GIF of solar images to detect concentric circles of mid-to-light pixels. All detected circles are shown in green, and the series of growing circles (indicating an Earth-directed CME) are highlighted in red. Adjust the sliders to fine-tune detection."
184
  )
185
 
186
  if __name__ == "__main__":