Spaces:
Running
Running
# Copyright (c) Meta Platforms, Inc. and affiliates. | |
# All rights reserved. | |
# | |
# This source code is licensed under the BSD-style license found in the | |
# LICENSE file in the root directory of this source tree. | |
import unittest | |
import torch | |
from pytorch3d.implicitron.tools.eval_video_trajectory import ( | |
generate_eval_video_cameras, | |
) | |
from pytorch3d.renderer.cameras import look_at_view_transform, PerspectiveCameras | |
from pytorch3d.transforms import axis_angle_to_matrix | |
from tests.common_testing import TestCaseMixin | |
class TestEvalCameras(TestCaseMixin, unittest.TestCase): | |
def setUp(self): | |
torch.manual_seed(42) | |
def test_circular(self): | |
n_train_cameras = 10 | |
n_test_cameras = 100 | |
R, T = look_at_view_transform(azim=torch.rand(n_train_cameras) * 360) | |
amplitude = 0.01 | |
R_jiggled = torch.bmm( | |
R, axis_angle_to_matrix(torch.rand(n_train_cameras, 3) * amplitude) | |
) | |
cameras_train = PerspectiveCameras(R=R_jiggled, T=T) | |
cameras_test = generate_eval_video_cameras( | |
cameras_train, trajectory_type="circular_lsq_fit", trajectory_scale=1.0 | |
) | |
positions_test = cameras_test.get_camera_center() | |
center = positions_test.mean(0) | |
self.assertClose(center, torch.zeros(3), atol=0.1) | |
self.assertClose( | |
(positions_test - center).norm(dim=[1]), | |
torch.ones(n_test_cameras), | |
atol=0.1, | |
) | |