import numpy as np def calc_avg_speed(prev_poses: list, current_poses: list) -> float: if not prev_poses or not current_poses: return 0.0 prev_poses = np.array(prev_poses) current_poses = np.array(current_poses) if prev_poses.shape != current_poses.shape: return 0.0 displacement = np.linalg.norm(current_poses - prev_poses, axis=2) return float(np.mean(displacement)) def calc_motion_intensity(prev_poses: list, current_poses: list) -> float: if not prev_poses or not current_poses: return 0.0 prev_poses = np.array(prev_poses) current_poses = np.array(current_poses) if prev_poses.shape != current_poses.shape: return 0.0 displacement = np.linalg.norm(current_poses - prev_poses, axis=2) return float(np.std(displacement)) def calc_sudden_movements(prev_poses: list, current_poses: list) -> int: if not prev_poses or not current_poses: return 0 prev_poses = np.array(prev_poses) current_poses = np.array(current_poses) if prev_poses.shape != current_poses.shape: return 0 displacement = np.linalg.norm(current_poses - prev_poses, axis=2) threshold = np.mean(displacement) + 2 * np.std(displacement) return int(np.sum(displacement > threshold))