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)
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
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)
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)