in src/parsers/unoc_parser.py [0:0]
def batch_convert_frames(self, p, r, occlusions, out_of_views, too_close):
p_converted = np.empty((len(p), len(self.KeyframeIdx.all), 3))
r_converted = np.empty((len(p), len(self.KeyframeIdx.all), 3))
parent_idx = self.Skeleton.parent_idx_vector()
for our_joint_name, bvh_joint_name in self.joint_mappings.items():
id_keyframe = self.KeyframeIdx.all[our_joint_name]
if bvh_joint_name in self.added_joint_offsets:
p_idx = parent_idx[id_keyframe]
offset = np.repeat(self.added_joint_offsets[bvh_joint_name][None, :], len(p_converted), axis=0)
q = quaternion.euler_to_quaternion(np.deg2rad(r_converted[:, p_idx]))
p_converted[:, id_keyframe] = p_converted[:, p_idx] + quaternion.qrot_np(q, offset)
r_converted[:, id_keyframe] = r_converted[:, p_idx].copy()
else:
id_bvh = list(self.joints.keys()).index(bvh_joint_name)
p_converted[:, id_keyframe] = p[:, id_bvh] / self.scale
r_converted[:, id_keyframe] = r[:, id_bvh]
r_local = self.Keyframe.batch_torch_recover_local_rotations(self.Skeleton,
torch.from_numpy(r_converted)).numpy()
result = np.zeros((len(p), len(self.KeyframeIdx.all), 10), dtype=np.float32)
result[:, :, :3] = p_converted
result[:, :, 3:6] = r_converted
result[:, :, 6:9] = r_local
result[:, 0, 9] = np.linspace(0.0, len(p) / float(self.fps), len(p))
use_out_of_view = True
use_too_close = True
occ_mask = np.array(occlusions)
if use_out_of_view and len(occlusions) > 0:
occ_mask |= np.array(out_of_views)
if use_too_close and len(occlusions) > 0:
occ_mask |= np.array(too_close)
if len(occlusions) > 0:
for occlusion_joint_idx, joint_name in enumerate(self.file_occlusions_joints):
if joint_name not in self.KeyframeIdx.all:
continue
joint_bit_mask = 1 << occlusion_joint_idx
result_joint_index = self.KeyframeIdx.all[joint_name]
result[:, result_joint_index, 9][occ_mask & joint_bit_mask == joint_bit_mask] += 1.
return result