(root_trans_offset, root_rot, dof, original_fps=30, target_fps=50)
| 47 | |
| 48 | |
| 49 | def interpolate_motion_data_slerp(root_trans_offset, root_rot, dof, original_fps=30, target_fps=50): |
| 50 | original_frames = root_trans_offset.shape[0] |
| 51 | original_time = np.linspace(0, original_frames / original_fps, original_frames) |
| 52 | |
| 53 | target_frames = int(original_frames * target_fps / original_fps) |
| 54 | target_time = np.linspace(0, original_frames / original_fps, target_frames) |
| 55 | |
| 56 | def interpolate_linear(data, target_time): |
| 57 | result = np.zeros((len(target_time), data.shape[1])) |
| 58 | for i in range(data.shape[1]): |
| 59 | interpolator = interpolate.interp1d(original_time, data[:, i], |
| 60 | kind='linear', |
| 61 | fill_value="extrapolate") |
| 62 | result[:, i] = interpolator(target_time) |
| 63 | return result |
| 64 | |
| 65 | def interpolate_slerp(quaternions, target_time): |
| 66 | rotations = R.from_quat(quaternions) |
| 67 | slerp = Slerp(original_time, rotations) |
| 68 | |
| 69 | interpolated_rotations = slerp(target_time) |
| 70 | |
| 71 | return interpolated_rotations.as_quat() |
| 72 | |
| 73 | interpolated_trans = interpolate_linear(root_trans_offset, target_time) |
| 74 | interpolated_rot = interpolate_slerp(root_rot, target_time) |
| 75 | interpolated_dof = interpolate_linear(dof, target_time) |
| 76 | |
| 77 | return interpolated_trans, interpolated_rot, interpolated_dof |
| 78 | |
| 79 | |
| 80 | def process_pkl_file(input_path, output_path): |
no test coverage detected