(self, dataset, subjects, subset=1, parse_3d_poses=True)
| 112 | return keypoints, keypoints_GT |
| 113 | |
| 114 | def fetch(self, dataset, subjects, subset=1, parse_3d_poses=True): |
| 115 | out_poses_3d = {} |
| 116 | out_poses_2d = {} |
| 117 | out_poses_2d_GT = {} |
| 118 | out_camera_params = {} |
| 119 | |
| 120 | for subject in subjects: |
| 121 | for action in self.keypoints[subject].keys(): |
| 122 | if self.action_filter is not None: |
| 123 | found = False |
| 124 | for a in self.action_filter: |
| 125 | if action.startswith(a): |
| 126 | found = True |
| 127 | break |
| 128 | if not found: |
| 129 | continue |
| 130 | |
| 131 | poses_2d = self.keypoints[subject][action] |
| 132 | poses_2d_GT = self.keypoints_GT[subject][action] |
| 133 | |
| 134 | for i in range(len(poses_2d)): |
| 135 | out_poses_2d[(subject, action, i)] = poses_2d[i] |
| 136 | out_poses_2d_GT[(subject, action, i)] = poses_2d_GT[i] |
| 137 | |
| 138 | if subject in dataset.cameras(): |
| 139 | cams = dataset.cameras()[subject] |
| 140 | assert len(cams) == len(poses_2d), 'Camera count mismatch' |
| 141 | for i, cam in enumerate(cams): |
| 142 | if 'intrinsic' in cam: |
| 143 | out_camera_params[(subject, action, i)] = cam['intrinsic'] |
| 144 | |
| 145 | if parse_3d_poses and 'positions_3d' in dataset[subject][action]: |
| 146 | poses_3d = dataset[subject][action]['positions_3d'] |
| 147 | assert len(poses_3d) == len(poses_2d), 'Camera count mismatch' |
| 148 | for i in range(len(poses_3d)): |
| 149 | out_poses_3d[(subject, action, i)] = poses_3d[i] |
| 150 | |
| 151 | if len(out_camera_params) == 0: |
| 152 | out_camera_params = None |
| 153 | if len(out_poses_3d) == 0: |
| 154 | out_poses_3d = None |
| 155 | |
| 156 | stride = self.downsample |
| 157 | if subset < 1: |
| 158 | for key in out_poses_2d.keys(): |
| 159 | n_frames = int(round(len(out_poses_2d[key]) // stride * subset) * stride) |
| 160 | start = deterministic_random(0, len(out_poses_2d[key]) - n_frames + 1, str(len(out_poses_2d[key]))) |
| 161 | out_poses_2d[key] = out_poses_2d[key][start:start + n_frames:stride] |
| 162 | out_poses_2d_GT[key] = out_poses_2d_GT[key][start:start + n_frames:stride] |
| 163 | |
| 164 | if out_poses_3d is not None: |
| 165 | out_poses_3d[key] = out_poses_3d[key][start:start + n_frames:stride] |
| 166 | elif stride > 1: |
| 167 | for key in out_poses_2d.keys(): |
| 168 | out_poses_2d[key] = out_poses_2d[key][::stride] |
| 169 | out_poses_2d_GT[key] = out_poses_2d_GT[key][::stride] |
| 170 | |
| 171 | if out_poses_3d is not None: |
no test coverage detected