示例#1
0
 def from_point_cloud(cls, point_cloud, angle=0, label=None, id=None):
     try:
         lower_z_boundary = np.min(point_cloud[:, 2])
         height = np.max(point_cloud[:, 2]) - lower_z_boundary
     except IndexError:
         lower_z_boundary = 0
         height = None
     pcloud_2d = point_cloud[:, :2]
     rotated_point_cloud = rotate_point_cloud(pcloud_2d, -angle)
     upper_boundary = np.max(rotated_point_cloud, axis=0)
     lower_boundary = np.min(rotated_point_cloud, axis=0)
     point_array = np.array(
         ((upper_boundary[0], upper_boundary[1]), (upper_boundary[0],
                                                   lower_boundary[1]),
          (lower_boundary[0], lower_boundary[1]), (lower_boundary[0],
                                                   upper_boundary[1])))
     point_array = rotate_point_cloud(point_array, angle)
     position = np.append((upper_boundary + lower_boundary) * .5,
                          lower_z_boundary)
     return cls(point_array,
                label=label,
                id=id,
                angle=angle,
                position=position,
                height=height)
示例#2
0
 def build_scene(self):
     scene_vertices, scene_polygons = [], []
     polygon_count = 0
     for obj in self.scene:
         vertices, polygons = self.models[obj.label]
         vertices = rotate_point_cloud(vertices, obj.angle)
         vertices += obj.position
         scene_vertices.append(vertices)
         scene_polygons.append(polygons + polygon_count)
         polygon_count += len(vertices)
     try:
         scene_vertices = np.vstack(scene_vertices)
         scene_polygons = np.vstack(scene_polygons)
     except ValueError:
         pass
     return scene_vertices, scene_polygons
示例#3
0
def sample_usage_gpu():
    from data_loaders.load_3d_models import load_obj_file
    from utilities.geometry_calculations import rotate_point_cloud
    import os

    vertices, polygons = load_obj_file(
        os.path.expanduser("~/Downloads/3d models/Porsche_911_GT2.obj"))
    vertices = rotate_point_cloud(vertices, -.5)
    point_cloud = Lidar(delta_azimuth=2 * np.pi / 3000,
                        delta_elevation=np.pi / 800,
                        position=(0, -10,
                                  1)).sample_3d_model_gpu(vertices, polygons)
    print(point_cloud)
    print(len(point_cloud))
    print(np.sum(point_cloud[:, 2]))

    import pptk
    v = pptk.viewer(point_cloud[np.any(point_cloud != 0)])
    v.set(point_size=.003)
示例#4
0
def sample_usage_with_texture_gpu():
    from data_loaders.load_3d_models import load_obj_file
    from utilities.geometry_calculations import rotate_point_cloud
    import os

    obj_file = os.path.expanduser("~/Downloads/3d models/Porsche_911_GT2.obj")
    vertices, polygons, uv_coordinates, uv_coordinate_indices = load_obj_file(
        obj_file, texture=True)
    vertices = rotate_point_cloud(vertices, -.5)
    point_cloud, ray_hit_uv = \
        Lidar(delta_azimuth=2 * np.pi / 3000,
              delta_elevation=np.pi / 800,
              position=(0, -10, 1)).sample_3d_model_with_texture_gpu(vertices,
                                                                     polygons,
                                                                     uv_coordinates,
                                                                     uv_coordinate_indices)
    print(len(ray_hit_uv[np.any(ray_hit_uv != 0, axis=1)]))
    print(len(point_cloud[np.any(point_cloud != 0, axis=1)]))

    import pptk
    v = pptk.viewer(point_cloud[np.any(point_cloud != 0, axis=1)])
    v.set(point_size=.003)