| 24 | |
| 25 | |
| 26 | class BaseDataset: |
| 27 | |
| 28 | def __init__(self, *args, **kwargs): |
| 29 | super().__init__() |
| 30 | self.data =[] |
| 31 | self.num_repeat = 1 |
| 32 | |
| 33 | def _preprocess_data(self, data_chunk): |
| 34 | processed = [] |
| 35 | for data in data_chunk: |
| 36 | processed.append( |
| 37 | dict( |
| 38 | vertices = np.asarray(data['vertices']), |
| 39 | faces = np.asarray(data['faces']), |
| 40 | ) |
| 41 | ) |
| 42 | return processed |
| 43 | |
| 44 | def _fetch_data(self, idx): |
| 45 | idx = idx % len(self.data) |
| 46 | return deepcopy(self.data[idx]) |
| 47 | |
| 48 | def __len__(self): |
| 49 | return len(self.data) * self.num_repeat |
| 50 | |
| 51 | def __getitem__(self, idx): |
| 52 | data = self._fetch_data(idx) |
| 53 | data['vertices'] = np.asarray(data['vertices']) |
| 54 | data['faces'] = np.asarray(data['faces']) |
| 55 | |
| 56 | num_vertices = len(data['vertices']) |
| 57 | num_faces = len(data['faces']) |
| 58 | |
| 59 | vertices = np.ones((self.max_vertices, 3)) * self.pad_id |
| 60 | faces = np.ones((self.max_triangles, 3)) * self.pad_id |
| 61 | |
| 62 | if self.augment is True: |
| 63 | data['vertices'] = scale_mesh(data['vertices']) |
| 64 | data['vertices'] = normalize_mesh(data['vertices']) |
| 65 | |
| 66 | vertices[:num_vertices] = data['vertices'] |
| 67 | faces[:num_faces] = data['faces'] |
| 68 | |
| 69 | gt_vertices = vertices[faces.clip(0).astype(np.int64)] # nface x 3 x 3 |
| 70 | gt_vertices[faces[:, 0] == self.pad_id] = float('nan') |
| 71 | |
| 72 | data_dict = {} |
| 73 | data_dict['shape_idx'] = np.asarray(idx).astype(np.int64) |
| 74 | data_dict['vertices'] = np.asarray(vertices).astype(np.float32) |
| 75 | data_dict['faces'] = np.asarray(faces).astype(np.int64) |
| 76 | data_dict['gt_vertices'] = np.asarray(gt_vertices).astype(np.float32) |
| 77 | |
| 78 | return data_dict |
nothing calls this directly
no outgoing calls
no test coverage detected