in long_term/locomotion_utils.py [0:0]
def compute_splines(dataset):
"""
For each animation in the dataset, this method computes its equal-segment-length spline,
along with its interpolated tracks (e.g. local speed, footstep frequency).
"""
for subject in dataset.subjects():
for action in dataset[subject].keys():
xy = dataset[subject][action]['positions_world'][:, 0, [0, 2]]
spline = Spline(xy, closed=False)
# Add extra tracks (facing direction, phase/amplitude)
xy_orientation = dataset[subject][action]['rotations_euler'][:, 0, 1]
y_rot = np.array([np.sin(xy_orientation), np.cos(xy_orientation)]).T
spline.add_track('direction', y_rot, interp_mode='circular')
phase = dataset[subject][action]['extra_features'][:, [2, 3]]
amplitude, _, frequency = phase_to_features(np.expand_dims(phase, 0))
spline.add_track('amplitude', amplitude[0], interp_mode='linear')
spline.add_track('frequency', frequency[0], interp_mode='linear')
spline = spline.reparameterize(5, smoothing_factor=1)
avg_speed_track = spline.get_track('amplitude')
avg_speed_track[:] = np.mean(avg_speed_track)
spline.add_track('average_speed', avg_speed_track, interp_mode='linear')
dataset[subject][action]['spline'] = spline