Spaces:
Runtime error
Runtime error
| import numpy as np | |
| def get_camera_dir(idx): | |
| img_scale = self.body['test'].get('img_scale', 1.0) | |
| view_setting = self.body['test'].get('view_setting', 'free') | |
| if view_setting == 'camera': | |
| # training view setting | |
| cam_id = self.body['test']['render_view_idx'] | |
| intr = self.dataset.intr_mats[cam_id].copy() | |
| intr[:2] *= img_scale | |
| extr = self.dataset.extr_mats[cam_id].copy() | |
| img_h, img_w = int(self.dataset.img_heights[cam_id] * img_scale), int(self.dataset.img_widths[cam_id] * img_scale) | |
| elif view_setting.startswith('free'): | |
| # free view setting | |
| # frame_num_per_circle = 360 | |
| # print(self.opt['test'].get('global_orient', False)) | |
| frame_num_per_circle = 360 | |
| rot_Y = (idx % frame_num_per_circle) / float(frame_num_per_circle) * 2 * np.pi | |
| extr = visualize_util.calc_free_mv(object_center, | |
| tar_pos = np.array([0, 0, 2.5]), | |
| rot_Y = rot_Y, | |
| rot_X = 0.3 if view_setting.endswith('bird') else 0., | |
| global_orient = global_orient if self.body['test'].get('global_orient', False) else None) | |
| intr = np.array([[1100, 0, 512], [0, 1100, 512], [0, 0, 1]], np.float32) | |
| intr[:2] *= img_scale | |
| img_h = int(1024 * img_scale) | |
| img_w = int(1024 * img_scale) | |
| extr_list.append(extr) | |
| intr_list.append(intr) | |
| img_h_list.append(img_h) | |
| img_w_list.append(img_w) | |
| elif view_setting.startswith('degree120'): | |
| print('we render 120 degree') | |
| # +- 60 degree | |
| frame_per_cycle = 480 | |
| max_degree = 60 | |
| frame_half_cycle = frame_per_cycle // 2 | |
| if idx%frame_per_cycle < frame_per_cycle/2: | |
| rot_Y = -max_degree + (2 * max_degree / frame_half_cycle) * (idx%frame_half_cycle) | |
| # rot_Y = (idx % frame_per_60) / float(frame_per_60) * 2 * np.pi | |
| else: | |
| rot_Y = max_degree - (2 * max_degree / frame_half_cycle) * (idx%frame_half_cycle) | |
| # to radian | |
| rot_Y = rot_Y * np.pi / 180 | |
| if rot_Y<0: | |
| rot_Y = rot_Y + 2 * np.pi | |
| # print('rot_Y: ', rot_Y) | |
| extr = visualize_util.calc_free_mv(object_center, | |
| tar_pos = np.array([0, 0, 2.5]), | |
| rot_Y = rot_Y, | |
| rot_X = 0.3 if view_setting.endswith('bird') else 0., | |
| global_orient = global_orient if self.body['test'].get('global_orient', False) else None) | |
| intr = np.array([[1100, 0, 512], [0, 1100, 512], [0, 0, 1]], np.float32) | |
| intr[:2] *= img_scale | |
| img_h = int(1024 * img_scale) | |
| img_w = int(1024 * img_scale) | |
| extr_list.append(extr) | |
| intr_list.append(intr) | |
| img_h_list.append(img_h) | |
| img_w_list.append(img_w) | |
| elif view_setting.startswith('degree90'): | |
| print('we render 90 degree') | |
| # +- 60 degree | |
| frame_per_cycle = 360 | |
| max_degree = 45 | |
| frame_half_cycle = frame_per_cycle // 2 | |
| if idx%frame_per_cycle < frame_per_cycle/2: | |
| rot_Y = -max_degree + (2 * max_degree / frame_half_cycle) * (idx%frame_half_cycle) | |
| # rot_Y = (idx % frame_per_60) / float(frame_per_60) * 2 * np.pi | |
| else: | |
| rot_Y = max_degree - (2 * max_degree / frame_half_cycle) * (idx%frame_half_cycle) | |
| # to radian | |
| rot_Y = rot_Y * np.pi / 180 | |
| if rot_Y<0: | |
| rot_Y = rot_Y + 2 * np.pi | |
| # print('rot_Y: ', rot_Y) | |
| extr = visualize_util.calc_free_mv(object_center, | |
| tar_pos = np.array([0, 0, 2.5]), | |
| rot_Y = rot_Y, | |
| rot_X = 0.3 if view_setting.endswith('bird') else 0., | |
| global_orient = global_orient if self.body['test'].get('global_orient', False) else None) | |
| intr = np.array([[1100, 0, 512], [0, 1100, 512], [0, 0, 1]], np.float32) | |
| intr[:2] *= img_scale | |
| img_h = int(1024 * img_scale) | |
| img_w = int(1024 * img_scale) | |
| extr_list.append(extr) | |
| intr_list.append(intr) | |
| img_h_list.append(img_h) | |
| img_w_list.append(img_w) | |
| elif view_setting.startswith('front'): | |
| # front view setting | |
| extr = visualize_util.calc_free_mv(object_center, | |
| tar_pos = np.array([0, 0, 2.5]), | |
| rot_Y = 0., | |
| rot_X = 0.3 if view_setting.endswith('bird') else 0., | |
| global_orient = global_orient if self.body['test'].get('global_orient', False) else None) | |
| intr = np.array([[1100, 0, 512], [0, 1100, 512], [0, 0, 1]], np.float32) | |
| intr[:2] *= img_scale | |
| img_h = int(1024 * img_scale) | |
| img_w = int(1024 * img_scale) | |
| extr_list.append(extr) | |
| intr_list.append(intr) | |
| img_h_list.append(img_h) | |
| img_w_list.append(img_w) | |
| # print('extr: ', extr) | |
| # print('intr: ', intr) | |
| # print('img_h: ', img_h) | |
| # print('img_w: ', img_w) | |
| # exit() | |
| elif view_setting.startswith('back'): | |
| # back view setting | |
| extr = visualize_util.calc_free_mv(object_center, | |
| tar_pos = np.array([0, 0, 2.5]), | |
| rot_Y = np.pi, | |
| rot_X = 0.5 * np.pi / 4. if view_setting.endswith('bird') else 0., | |
| global_orient = global_orient if self.body['test'].get('global_orient', False) else None) | |
| intr = np.array([[1100, 0, 512], [0, 1100, 512], [0, 0, 1]], np.float32) | |
| intr[:2] *= img_scale | |
| img_h = int(1024 * img_scale) | |
| img_w = int(1024 * img_scale) | |
| elif view_setting.startswith('moving'): | |
| # moving camera setting | |
| extr = visualize_util.calc_free_mv(object_center, | |
| # tar_pos = np.array([0, 0, 3.0]), | |
| # rot_Y = -0.3, | |
| tar_pos = np.array([0, 0, 2.5]), | |
| rot_Y = 0., | |
| rot_X = 0.3 if view_setting.endswith('bird') else 0., | |
| global_orient = global_orient if self.body['test'].get('global_orient', False) else None) | |
| intr = np.array([[1100, 0, 512], [0, 1100, 512], [0, 0, 1]], np.float32) | |
| intr[:2] *= img_scale | |
| img_h = int(1024 * img_scale) | |
| img_w = int(1024 * img_scale) | |
| elif view_setting.startswith('cano'): | |
| cano_center = self.dataset.cano_bounds.mean(0) | |
| extr = np.identity(4, np.float32) | |
| extr[:3, 3] = -cano_center | |
| rot_x = np.identity(4, np.float32) | |
| rot_x[:3, :3] = cv.Rodrigues(np.array([np.pi, 0, 0], np.float32))[0] | |
| extr = rot_x @ extr | |
| f_len = 5000 | |
| extr[2, 3] += f_len / 512 | |
| intr = np.array([[f_len, 0, 512], [0, f_len, 512], [0, 0, 1]], np.float32) | |
| # item = self.dataset.getitem(idx, | |
| # training = False, | |
| # extr = extr, | |
| # intr = intr, | |
| # img_w = 1024, | |
| # img_h = 1024) | |
| img_w, img_h = 1024, 1024 | |
| # item['live_smpl_v'] = item['cano_smpl_v'] | |
| # item['cano2live_jnt_mats'] = torch.eye(4, dtype = torch.float32)[None].expand(item['cano2live_jnt_mats'].shape[0], -1, -1) | |
| # item['live_bounds'] = item['cano_bounds'] | |
| else: | |
| raise ValueError('Invalid view setting for animation!') |