Spaces:
Sleeping
Sleeping
| import cv2 | |
| import os | |
| from draw_utils import draw_trajectory | |
| import uuid | |
| def process_video(video_path): | |
| cap = cv2.VideoCapture(video_path) | |
| frames = [] | |
| impact_frame = None | |
| trajectory = [] | |
| frame_count = 0 | |
| while cap.isOpened(): | |
| ret, frame = cap.read() | |
| if not ret: | |
| break | |
| # Simulated detection (replace with real ML model or logic) | |
| if 20 < frame_count < 80: # Simulate ball in motion | |
| trajectory.append((100 + frame_count, 200 + int(frame_count * 0.2))) # fake curve | |
| if frame_count == 70: | |
| impact_frame = frame.copy() | |
| frames.append(frame) | |
| frame_count += 1 | |
| cap.release() | |
| # Draw trajectory | |
| pred_path = f"pred_{uuid.uuid4().hex}.mp4" | |
| draw_trajectory(frames, trajectory, pred_path) | |
| # Save impact frame for analysis | |
| analysis_data = { | |
| "trajectory": trajectory, | |
| "impact_frame": impact_frame | |
| } | |
| replay_path = f"replay_{uuid.uuid4().hex}.mp4" | |
| draw_trajectory(frames, trajectory, replay_path, replay=True) | |
| return pred_path, replay_path, analysis_data | |