def test_compose(self):
     expected = Pose3(self.pose.rotation(), Vector3(1, 5, 1))
     translate = Pose3(t=Vector3(0, 0, 4))  # translate Z axis, which is Y
     actual = self.pose.compose(translate)
     actual.assert_equal(expected)
     actual2 = self.pose * translate
     actual2.assert_equal(expected)
    def example(cls):
        """Create a simple ProjectObjectDict."""

        pose1 = Pose3()
        pose2 = Pose3(t=Vector3(2, 2, 0))
        pose3 = Pose3(t=Vector3(4, 2, 0))

        # Be explicit about unicode literal in case this code is called from python 2
        data_path = parutil.get_dir_path(
            u"sumo/threedee/test_data")

        model1 = GltfModel.load_from_glb(os.path.join(data_path, "bed.glb"))
        model2 = GltfModel.load_from_glb(os.path.join(data_path, "bed.glb"))
        model3 = GltfModel.load_from_glb(os.path.join(data_path, "bed.glb"))

        obj1 = ProjectObject.gen_meshes_object(
            meshes=model1, id="1", pose=pose1, category="bed"
        )
        obj2 = ProjectObject.gen_meshes_object(
            meshes=model2, id="2", pose=pose2, category="chair"
        )
        obj3 = ProjectObject.gen_meshes_object(
            meshes=model3, id="3", pose=pose3, category="bed"
        )

        project_object_dict = ProjectObjectDict()
        project_object_dict[obj1.id] = obj1
        project_object_dict[obj2.id] = obj2
        project_object_dict[obj3.id] = obj3

        return project_object_dict
Exemple #3
0
    def test_from_gltf_model(self):
        """Verify bounding box computed from a GltfModel."""
        object = GltfModel.example()

        box = ComputeBbox().from_gltf_object(object)
        np.testing.assert_array_equal(box.min_corner, Vector3(-1, -1, -1))
        np.testing.assert_array_equal(box.max_corner, Vector3(1, 1, 1))
Exemple #4
0
    def test_mesh(self):
        box = Box3d(corner1=Vector3(0, 0, 0), corner2=Vector3(1, 1, 1))
        mesh = box.to_mesh()
        self.assertIsInstance(mesh, Mesh)
        self._check_mesh_helper(mesh)

        tex_mesh = box.to_textured_mesh(color=np.array([71, 57, 8], dtype=np.uint8))
        self.assertIsInstance(tex_mesh, TexturedMesh)
        self._check_mesh_helper(tex_mesh)
    def test_unitize(self):
        v = unitize(Vector3(2, 2, 2))
        expected_v = Vector3(1, 1, 1) * (math.sqrt(3) / 3)
        np.testing.assert_array_almost_equal(v, expected_v)

        v = unitize(Vector3(100, 201, 50))
        self.assertEqual(np.linalg.norm(v), 1)

        v = unitize(Vector3(0, 0, 0))
        np.testing.assert_array_almost_equal(v, Vector3(0, 0, 0))
Exemple #6
0
 def test_register(self):
     ''' Test registering point clouds in different frames. '''
     t = Vector3(1, 1, 1)
     R = Rot3()
     T = Pose3(R, t).inverse()
     cloud = PointCloud(np.zeros((3, 1)))
     registred_cloud = PointCloud.register([(Pose3(), cloud), (T, cloud)])
     np.testing.assert_array_equal(
         registred_cloud.points(),
         np.column_stack([Vector3(0, 0, 0),
                          Vector3(-1.0, -1.0, -1.0)]))
Exemple #7
0
 def test_xml(self):
     """
     Test conversion to and from xml.  This is just a basic functionality
     test of a round trip from Box3d to xml and back.
     """
     box = Box3d(corner1=Vector3(1.5, 2.6, 3.7),
                 corner2=Vector3(5.1, 6.2, 7.9))
     box_xml = box.to_xml()
     assert (box_xml.tag == 'box3d')
     box_rt = Box3d.from_xml(box_xml)
     assert (box.almost_equal(box_rt))
 def test_transform(self):
     cP = Vector3(0, 0, 5)
     wP = self.pose.transform_from(cP)
     np.testing.assert_array_equal(wP, Vector3(1, 6, 1))
     np.testing.assert_array_equal(self.pose.transform_to(wP), cP)
     np.testing.assert_array_equal(wP, self.pose * cP)
     w_points = np.stack([wP, wP], axis=1)
     c_points = np.stack([cP, cP], axis=1)
     np.testing.assert_array_equal(c_points,
                                   self.pose.transform_all_to(w_points))
     np.testing.assert_array_equal(w_points,
                                   self.pose.transform_all_from(c_points))
     np.testing.assert_array_equal(w_points, self.pose * c_points)
Exemple #9
0
 def test_random_points(self):
     """ Make two random points and verify the bounding box's corners
         are correct
     """
     corner1 = Vector3(-1, -2, -3)
     corner2 = Vector3(1, 2, 3)
     box = Box3d(corner1, corner2)
     corners = box.corners()
     corners_target = np.column_stack([[-1.0, -2.0, 3.0], [1.0, -2.0, 3.0],
                                       [1.0, 2.0, 3.0], [-1.0, 2.0, 3.0],
                                       [-1.0, -2.0, -3.0],
                                       [1.0, -2.0, -3.0], [1.0, 2.0, -3.0],
                                       [-1.0, 2.0, -3.0]])
     np.testing.assert_array_equal(corners, corners_target)
Exemple #10
0
 def test_unit_cube(self):
     """ Make two points inside a unit cube and verify the bounding box's
         corners are correct
     """
     corner1 = Vector3(0, 0, 0)
     corner2 = Vector3(1, 1, 1)
     box = Box3d(corner1, corner2)
     corners = box.corners()
     corners_target = np.column_stack([[0.0, 0.0, 1.0], [1.0, 0.0, 1.0],
                                       [1.0, 1.0, 1.0], [0.0, 1.0, 1.0],
                                       [0.0, 0.0, 0.0], [1.0, 0.0, 0.0],
                                       [1.0, 1.0, 0.0], [0.0, 1.0, 0.0]])
     np.testing.assert_array_almost_equal(corners, corners_target)
     np.testing.assert_array_almost_equal(box.min_corner, corner1)
     np.testing.assert_array_almost_equal(box.max_corner, corner2)
Exemple #11
0
 def test_transform_from(self):
     '''Test transform_from.'''
     t = Vector3(1, 1, 1)
     R = Rot3()
     T = Pose3(R, t).inverse()
     cloud = PointCloud(np.zeros((3, 1)))
     new_cloud = cloud.transform_from(T)
     np.testing.assert_array_equal(new_cloud.points(),
                                   [[-1.0], [-1.0], [-1.0]])
 def test_update_textured_material(self):
     mesh = TexturedMesh.example()
     model = GltfModel.from_textured_mesh(mesh)
     self.assertEqual(model.num_images(), 2)
     uri = "Cube_BaseColor.png"
     base_dir = TEST_PATH
     material = {"color": Vector3(0, 0, 0), "uri": uri}
     model.update_materials(base_dir, [material])
     self.assertEqual(model.num_images(), 3)
Exemple #13
0
 def example(cls, id="1"):
     """Create a simple ProjectObject of project_type = meshes."""
     meshes = GltfModel.example()
     pose = Pose3(t=Vector3(1, 2, 3))
     symmetry = ObjectSymmetry.example()
     return cls.gen_meshes_object(id=id,
                                  pose=pose,
                                  category="chair",
                                  meshes=meshes,
                                  symmetry=symmetry,
                                  score=0.57)
 def test_xml(self):
     """
     Test conversion to and from xml.  This is just a basic functionality
     test of a round trip from Pose3 to xml and back.
     """
     pose = Pose3(t=Vector3(1.5, 2.6, 3.7),
                  R=np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]))
     pose_xml = pose.to_xml()
     self.assertEqual(pose_xml.tag, 'pose')
     pose_rt = Pose3.from_xml(pose_xml)
     pose.assert_almost_equal(pose_rt)
 def test_unit_cube(self):
     """ Make three points inside a unit cube and verify the bounding box's
         corners are correct
     """
     point1 = Vector3(1, 0, 0)
     point2 = Vector3(0, 1, 0)
     point3 = Vector3(0, 0, 1)
     points = np.column_stack([point1, point2, point3])
     box = ComputeBbox().from_point_cloud(points)
     corners = box.corners()
     corners_target = np.column_stack([
         [0.0, 0.0, 1.0],
         [1.0, 0.0, 1.0],
         [1.0, 1.0, 1.0],
         [0.0, 1.0, 1.0],
         [0.0, 0.0, 0.0],
         [1.0, 0.0, 0.0],
         [1.0, 1.0, 0.0],
         [0.0, 1.0, 0.0],
     ])
     np.testing.assert_array_equal(corners, corners_target)
    def test_surreal(self):
        """Read from a Surreal json file."""

        # Expected pose.
        expected_pose = Pose3(t=Vector3(1, 2, 3))

        # Read json file
        path_to_json_linear = os.path.join(PATH, 'pose3_test.json')
        data = json.load(open(path_to_json_linear))
        pose = Pose3.from_surreal(data['T_cr'])

        # Test pose
        pose.assert_almost_equal(expected_pose)
Exemple #17
0
    def test_equal(self):
        """
        Test == operator.
        """

        box1 = Box3d(Vector3(1, 2, 3), Vector3(0, 4, 2))
        box2 = Box3d(Vector3(1, 2, 3), Vector3(0, 4, 2))
        box3 = Box3d(Vector3(1, 2.1, 3), Vector3(0, 4, 2))

        assert (box1 == box2)
        assert (box2 != box3)
Exemple #18
0
    def test_almost_equal(self):
        """
        Test almost_equal function.
        """

        box1 = Box3d(Vector3(1.000000001, 2.000000001, 3.000001),
                     Vector3(-0.00000001, 3.99999999, 2.000001))
        box2 = Box3d(Vector3(1.0, 2, 3), Vector3(0, 4, 2))

        box3 = Box3d(Vector3(-1, -1, -1), Vector3(1, 1, 1))

        self.assertTrue(box1.almost_equal(box2, atol=0.01))
        self.assertFalse(box1.almost_equal(box2, atol=0.000000000001))
        self.assertFalse(box1.almost_equal(box3))
Exemple #19
0
from sumo.base.colored_category import ColoredCategory
import matplotlib.pyplot as plt

CSV_PATH = parutil.get_file_path(
    '/mnt/lustre/sunjiankai/Dataset/sample_data/metadata/categories.csv')
colored_category = ColoredCategory(CSV_PATH)
print('colored_category.category_id_to_rgb(133):\n',
      colored_category.category_id_to_rgb(133))
print('colored_category.category_name_to_rgb(\'shoes\'):\n',
      colored_category.category_name_to_rgb('shoes'))
print('colored_category.LUT:\n', colored_category.LUT)
lut = colored_category.LUT
print('lut.shape[0]: ', lut.shape[0], 'lut.shape[1]: ', lut.shape[1])

from sumo.base.vector import Vector2, Vector2f, Vector3, Vector3f, on_left, unitize
print('unitize(Vector3(100, 201, 50)): ', unitize(Vector3(100, 201, 50)))

# rot3_tests
from sumo.geometry.rot3 import Rot3, ENU_R_CAMERA
import numpy as np
wRc = np.transpose(np.array([[1, 0, 0], [0, 0, -1], [0, 1, 0]], dtype=float))
rot = Rot3(wRc)
print(rot.matrix())

# MultiImageTiff
from sumo.geometry.inverse_depth import depth_image_of_inverse_depth_map
from sumo.images.multi_image_tiff import MultiImageTiff, MultiImagePageType

tiff_path = parutil.get_file_path(
    '/mnt/lustre/sunjiankai/Dataset/sample_data/sumo-input/sumo-input.tif')
multi = MultiImageTiff.load(tiff_path)
 def test_update_material(self):
     mesh = TexturedMesh.example()
     model = GltfModel.from_textured_mesh(mesh)
     material = {"color": Vector3(0.5, 0.5, 0.5), "uri": ""}
     model.update_materials("", [material])
Exemple #21
0
 def test_rotate(self):
     cP = Vector3(0, 0, 5)
     wP = self.rot.rotate(cP)
     np.testing.assert_array_equal(wP, Vector3(0, 5, 0))
     np.testing.assert_array_equal(self.rot * cP, Vector3(0, 5, 0))
     np.testing.assert_array_equal(self.rot.unrotate(wP), cP)
Exemple #22
0
This source code is licensed under the MIT license found in the
LICENSE file in the root directory of this source tree.


Rot3 unit tests.
'''

import unittest
import numpy as np
import xml.etree.cElementTree as ET

from sumo.base.vector import Vector3
from sumo.geometry.rot3 import Rot3, ENU_R_CAMERA

UNIT_X = Vector3(1, 0, 0)
UNIT_Y = Vector3(0, 1, 0)
UNIT_Z = Vector3(0, 0, 1)


class TestRot3(unittest.TestCase):
    def setUp(self):
        # Camera with z-axis looking at world y-axis
        wRc = np.transpose(
            np.array([[1, 0, 0], [0, 0, -1], [0, 1, 0]], dtype=float)
        )
        self.rot = Rot3(wRc)

    def test_RollPitchYaw(self):
        roll, pitch, yaw = 0.1, 0.2, 0.3
        np.testing.assert_array_equal(
 def test_Vector3(self):
     vector = Vector3(1, 2, 3)
     self.assertEqual(vector.shape, (3, ))
     self.assertEqual(vector.dtype, np.float64)
 def test_on_left(self):
     N = Vector3(0, 0, 1)
     p = Vector3(0, 2, 0)
     a = Vector3(0, 0, 0)
     b = Vector3(1, 0, 0)
     self.assertTrue(on_left(N, p, a, b))
Exemple #25
0
 def test_merge(self):
     box1 = Box3d(corner1=Vector3f(0, 1, 0), corner2=Vector3f(1, 2, 1))
     box2 = Box3d(corner1=Vector3f(1, 0, 0), corner2=Vector3f(2, 1, 2))
     merged = Box3d.merge([box1, box2])
     np.testing.assert_array_equal(merged.min_corner, Vector3(0, 0, 0))
     np.testing.assert_array_equal(merged.max_corner, Vector3(2, 2, 2))
 def setUp(self):
     # Camera with z-axis looking at world y-axis
     wRc = np.transpose(
         np.array([[1, 0, 0], [0, 0, -1], [0, 1, 0]], dtype=float))
     t = Vector3(1, 1, 1)
     self.pose = Pose3(wRc, t)
 def test_ENU_camera(self):
     Pose3.ENU_camera(position=Vector3(1, 1, 1)).assert_equal(self.pose)