| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- # Copyright (c) 2018-present, Facebook, Inc.
- # All rights reserved.
- #
- # This source code is licensed under the license found in the
- # LICENSE file in the root directory of this source tree.
- #
- import numpy as np
- import copy
- from video_pose.common.skeleton import Skeleton
- from video_pose.common.mocap_dataset import MocapDataset
- from video_pose.common.camera import normalize_screen_coordinates, image_coordinates
- from video_pose.common.h36m_dataset import h36m_skeleton
-
- custom_camera_params = {
- 'id': None,
- 'res_w': None, # Pulled from metadata
- 'res_h': None, # Pulled from metadata
-
- # Dummy camera parameters (taken from Human3.6M), only for visualization purposes
- 'azimuth': 70, # Only used for visualization
- 'orientation': [0.1407056450843811, -0.1500701755285263, -0.755240797996521, 0.6223280429840088],
- 'translation': [1841.1070556640625, 4955.28466796875, 1563.4454345703125],
- }
- class CustomDataset(MocapDataset):
- def __init__(self, detections_path, remove_static_joints=True):
- super().__init__(fps=None, skeleton=h36m_skeleton)
-
- # Load serialized dataset
- data = np.load(detections_path, allow_pickle=True)
- resolutions = data['metadata'].item()['video_metadata']
-
- self._cameras = {}
- self._data = {}
- for video_name, res in resolutions.items():
- cam = {}
- cam.update(custom_camera_params)
- cam['orientation'] = np.array(cam['orientation'], dtype='float32')
- cam['translation'] = np.array(cam['translation'], dtype='float32')
- cam['translation'] = cam['translation']/1000 # mm to meters
-
- cam['id'] = video_name
- cam['res_w'] = res['w']
- cam['res_h'] = res['h']
-
- self._cameras[video_name] = [cam]
-
- self._data[video_name] = {
- 'custom': {
- 'cameras': cam
- }
- }
-
- if remove_static_joints:
- # Bring the skeleton to 17 joints instead of the original 32
- self.remove_joints([4, 5, 9, 10, 11, 16, 20, 21, 22, 23, 24, 28, 29, 30, 31])
-
- # Rewire shoulders to the correct parents
- self._skeleton._parents[11] = 8
- self._skeleton._parents[14] = 8
-
- def supports_semi_supervised(self):
- return False
-
|