Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -81,10 +81,17 @@ def estimate_trajectory(ball_positions, frames, detection_frames):
|
|
81 |
pitch_point = ball_positions[0]
|
82 |
pitch_frame = detection_frames[0]
|
83 |
|
|
|
84 |
impact_idx = None
|
85 |
impact_frame = None
|
86 |
for i in range(1, len(y_coords)):
|
87 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
88 |
impact_idx = i
|
89 |
impact_frame = detection_frames[i]
|
90 |
break
|
@@ -109,7 +116,13 @@ def estimate_trajectory(ball_positions, frames, detection_frames):
|
|
109 |
pitch_point_3d = pixel_to_3d(pitch_point[0], pitch_point[1], frame_height, frame_width)
|
110 |
impact_point_3d = pixel_to_3d(impact_point[0], impact_point[1], frame_height, frame_width)
|
111 |
|
112 |
-
debug_log =
|
|
|
|
|
|
|
|
|
|
|
|
|
113 |
return trajectory_2d, pitch_point, impact_point, pitch_frame, impact_frame, detections_3d, trajectory_3d, pitch_point_3d, impact_point_3d, debug_log
|
114 |
|
115 |
def lbw_decision(ball_positions, trajectory, frames, pitch_point, impact_point):
|
@@ -193,7 +206,7 @@ def create_3d_plot(detections_3d, trajectory_3d, pitch_point_3d, impact_point_3d
|
|
193 |
impact_scatter = go.Scatter3d(
|
194 |
x=[impact_point_3d[0]] if impact_point_3d else [],
|
195 |
y=[impact_point_3d[1]] if impact_point_3d else [],
|
196 |
-
z=[impact_point_3d[2]] if
|
197 |
mode='markers', marker=dict(size=8, color='yellow'), name='Impact Point'
|
198 |
)
|
199 |
data = [trajectory_line, pitch_scatter, impact_scatter] + stump_traces + bail_traces
|
|
|
81 |
pitch_point = ball_positions[0]
|
82 |
pitch_frame = detection_frames[0]
|
83 |
|
84 |
+
# Prioritize sudden y-change for impact detection
|
85 |
impact_idx = None
|
86 |
impact_frame = None
|
87 |
for i in range(1, len(y_coords)):
|
88 |
+
delta_y = abs(y_coords[i] - y_coords[i-1])
|
89 |
+
if delta_y > IMPACT_DELTA_Y:
|
90 |
+
impact_idx = i
|
91 |
+
impact_frame = detection_frames[i]
|
92 |
+
break
|
93 |
+
elif y_coords[i] > frame_height * IMPACT_ZONE_Y:
|
94 |
+
# Fallback to y-position if no significant y-change
|
95 |
impact_idx = i
|
96 |
impact_frame = detection_frames[i]
|
97 |
break
|
|
|
116 |
pitch_point_3d = pixel_to_3d(pitch_point[0], pitch_point[1], frame_height, frame_width)
|
117 |
impact_point_3d = pixel_to_3d(impact_point[0], impact_point[1], frame_height, frame_width)
|
118 |
|
119 |
+
debug_log = (
|
120 |
+
f"Trajectory estimated successfully\n"
|
121 |
+
f"Pitch point at frame {pitch_frame + 1}: ({pitch_point[0]:.1f}, {pitch_point[1]:.1f})\n"
|
122 |
+
f"Impact point at frame {impact_frame + 1}: ({impact_point[0]:.1f}, {impact_point[1]:.1f})\n"
|
123 |
+
f"Detections in frames: {detection_frames}\n"
|
124 |
+
f"Y-coordinate changes: {[abs(y_coords[i] - y_coords[i-1]) for i in range(1, len(y_coords))]}"
|
125 |
+
)
|
126 |
return trajectory_2d, pitch_point, impact_point, pitch_frame, impact_frame, detections_3d, trajectory_3d, pitch_point_3d, impact_point_3d, debug_log
|
127 |
|
128 |
def lbw_decision(ball_positions, trajectory, frames, pitch_point, impact_point):
|
|
|
206 |
impact_scatter = go.Scatter3d(
|
207 |
x=[impact_point_3d[0]] if impact_point_3d else [],
|
208 |
y=[impact_point_3d[1]] if impact_point_3d else [],
|
209 |
+
z=[impact_point_3d[2]] if pitch_point_3d else [],
|
210 |
mode='markers', marker=dict(size=8, color='yellow'), name='Impact Point'
|
211 |
)
|
212 |
data = [trajectory_line, pitch_scatter, impact_scatter] + stump_traces + bail_traces
|