def parse_range_image_and_camera_projection(self, frame): """Parse range images and camera projections given a frame. Args: frame: open dataset frame proto Returns: range_images: A dict of {laser_name, [range_image_first_return, range_image_second_return]}. range_image_top_pose: range image pixel pose for top lidar. """ self.__range_images = {} for laser in frame.lasers: if len(laser.ri_return1.range_image_compressed) > 0: range_image_str_tensor = tf.decode_compressed( laser.ri_return1.range_image_compressed, 'ZLIB') ri = open_dataset.MatrixFloat() ri.ParseFromString(bytearray(range_image_str_tensor.numpy())) self.__range_images[laser.name] = [ri] if laser.name == open_dataset.LaserName.TOP: range_image_top_pose_str_tensor = tf.decode_compressed( laser.ri_return1.range_image_pose_compressed, 'ZLIB') range_image_top_pose = open_dataset.MatrixFloat() range_image_top_pose.ParseFromString( bytearray(range_image_top_pose_str_tensor.numpy())) if len(laser.ri_return2.range_image_compressed) > 0: range_image_str_tensor = tf.decode_compressed( laser.ri_return2.range_image_compressed, 'ZLIB') ri = open_dataset.MatrixFloat() ri.ParseFromString(bytearray(range_image_str_tensor.numpy())) self.__range_images[laser.name].append(ri) return self.__range_images, range_image_top_pose
def parse_range_image_and_camera_projection(frame): """Parse range images and camera projections given a frame. Args: frame: open dataset frame proto Returns: range_images: A dict of {laser_name, [range_image_first_return, range_image_second_return]}. camera_projections: A dict of {laser_name, [camera_projection_from_first_return, camera_projection_from_second_return]}. range_image_top_pose: range image pixel pose for top lidar. """ range_images = {} camera_projections = {} range_image_top_pose = None for laser in frame.lasers: if len(laser.ri_return1.range_image_compressed) > 0: # use tf.io.decode_compressed() if TF 2.0 range_image_str_tensor = tf.decode_compressed( laser.ri_return1.range_image_compressed, 'ZLIB') ri = open_dataset.MatrixFloat() ri.ParseFromString(bytearray(range_image_str_tensor.numpy())) range_images[laser.name] = [ri] if laser.name == open_dataset.LaserName.TOP: # use tf.io.decode_compressed() if TF 2.0 range_image_top_pose_str_tensor = tf.decode_compressed( laser.ri_return1.range_image_pose_compressed, 'ZLIB') range_image_top_pose = open_dataset.MatrixFloat() range_image_top_pose.ParseFromString( bytearray(range_image_top_pose_str_tensor.numpy())) # use tf.io.decode_compressed() if TF 2.0 camera_projection_str_tensor = tf.decode_compressed( laser.ri_return1.camera_projection_compressed, 'ZLIB') cp = open_dataset.MatrixInt32() cp.ParseFromString(bytearray(camera_projection_str_tensor.numpy())) camera_projections[laser.name] = [cp] if len(laser.ri_return2.range_image_compressed) > 0: # use tf.io.decode_compressed() if TF 2.0 range_image_str_tensor = tf.decode_compressed( laser.ri_return2.range_image_compressed, 'ZLIB') ri = open_dataset.MatrixFloat() ri.ParseFromString(bytearray(range_image_str_tensor.numpy())) range_images[laser.name].append(ri) # use tf.io.decode_compressed() if TF 2.0 camera_projection_str_tensor = tf.decode_compressed( laser.ri_return2.camera_projection_compressed, 'ZLIB') cp = open_dataset.MatrixInt32() cp.ParseFromString(bytearray(camera_projection_str_tensor.numpy())) camera_projections[laser.name].append(cp) return range_images, camera_projections, range_image_top_pose