예제 #1
0
    def frames(self):
        """Retrieve the next frame from the image directory and convert it to a ColorImage,
        a DepthImage, and an IrImage.

        Parameters
        ----------
        skip_registration : bool
            If True, the registration step is skipped.

        Returns
        -------
        :obj:`tuple` of :obj:`ColorImage`, :obj:`DepthImage`, :obj:`IrImage`, :obj:`numpy.ndarray`
            The ColorImage, DepthImage, and IrImage of the current frame.

        Raises
        ------
        RuntimeError
            If the Kinect stream is not running or if all images in the
            directory have been used.
        """
        if not self._running:
            raise RuntimeError('Primesense device pointing to %s not runnning. Cannot read frames' %(self._path_to_images))

        if self._im_index > self._num_images:
            raise RuntimeError('Primesense device is out of images')

        # read images
        color_filename = os.path.join(self._path_to_images, 'color_%d.png' %(self._im_index))
        color_im = ColorImage.open(color_filename, frame=self._frame)
        depth_filename = os.path.join(self._path_to_images, 'depth_%d.npy' %(self._im_index))
        depth_im = DepthImage.open(depth_filename, frame=self._frame)
        self._im_index += 1
        return color_im, depth_im, None
예제 #2
0
 def load(save_dir):
     if not os.path.exists(save_dir):
         raise ValueError('Directory %s does not exist!' % (save_dir))
     color_image_filename = os.path.join(save_dir, 'color.png')
     depth_image_filename = os.path.join(save_dir, 'depth.npy')
     camera_intr_filename = os.path.join(save_dir, 'camera.intr')
     segmask_filename = os.path.join(save_dir, 'segmask.npy')
     obj_segmask_filename = os.path.join(save_dir, 'obj_segmask.npy')
     state_filename = os.path.join(save_dir, 'state.pkl')
     camera_intr = CameraIntrinsics.load(camera_intr_filename)
     color = ColorImage.open(color_image_filename, frame=camera_intr.frame)
     depth = DepthImage.open(depth_image_filename, frame=camera_intr.frame)
     segmask = None
     if os.path.exists(segmask_filename):
         segmask = BinaryImage.open(segmask_filename,
                                    frame=camera_intr.frame)
     obj_segmask = None
     if os.path.exists(obj_segmask_filename):
         obj_segmask = SegmentationImage.open(obj_segmask_filename,
                                              frame=camera_intr.frame)
     fully_observed = None
     if os.path.exists(state_filename):
         fully_observed = pkl.load(open(state_filename, 'rb'))
     return RgbdImageState(RgbdImage.from_color_and_depth(color, depth),
                           camera_intr,
                           segmask=segmask,
                           obj_segmask=obj_segmask,
                           fully_observed=fully_observed)
예제 #3
0
 def load(save_dir):
     if not os.path.exists(save_dir):
         raise ValueError('Directory %s does not exist!' % (save_dir))
     grasp_filename = os.path.join(save_dir, 'grasp.pkl')
     q_value_filename = os.path.join(save_dir, 'pred_robustness.pkl')
     image_filename = os.path.join(save_dir, 'tf_image.npy')
     grasp = pkl.load(open(grasp_filename, 'rb'))
     q_value = pkl.load(open(q_value_filename, 'rb'))
     image = DepthImage.open(image_filename)
     return GraspAction(grasp, q_value, image)
import IPython

from autolab_core import RigidTransform
from visualization import Visualizer2D as vis2d
from visualization import Visualizer3D as vis3d

from perception import DepthImage, CameraIntrinsics

KSIZE = 9

if __name__ == '__main__':
    depth_im_filename = sys.argv[1]
    camera_intr_filename = sys.argv[2]

    camera_intr = CameraIntrinsics.load(camera_intr_filename)
    depth_im = DepthImage.open(depth_im_filename, frame=camera_intr.frame)

    depth_im = depth_im.inpaint()

    point_cloud_im = camera_intr.deproject_to_image(depth_im)
    normal_cloud_im = point_cloud_im.normal_cloud_im(ksize=KSIZE)

    vis3d.figure()
    vis3d.points(point_cloud_im.to_point_cloud(), scale=0.0025)

    alpha = 0.025
    subsample = 20
    for i in range(0, point_cloud_im.height, subsample):
        for j in range(0, point_cloud_im.width, subsample):
            p = point_cloud_im[i, j]
            n = normal_cloud_im[i, j]
예제 #5
0
    def create_dataset(self, datapoints_per_file=100):
        """ Compress all known data into a numpy dataset """
        # create compressed data dir
        if not os.path.exists(self.compressed_data_path):
            os.mkdir(self.compressed_data_path)

        # write all data
        file_num = 0
        num_recorded = 0
        data_tensors = {}
        for row in self._data_csv:
            # add all attributes of the current row to the tensor
            if not row['completed']:
                continue
            for name, value in row.iteritems():
                # read raw data
                data = None
                if name == 'input_depth_im':
                    if os.path.exists(value):
                        data = DepthImage.open(value).raw_data[np.newaxis, ...]
                elif name == 'input_binary_im':
                    if os.path.exists(value):
                        data = BinaryImage.open(value).raw_data[np.newaxis,
                                                                ...]
                elif name == 'input_pose':
                    if os.path.exists(value):
                        data = np.load(value)[np.newaxis, ...]
                elif name == 'lifted_object' or name == 'human_label' \
                     or name == 'gripper_width' or name == 'found_grasp' \
                     or name == 'gripper_torque':
                    data = float(value)

                if data is None:
                    continue

                # update tensor
                if name not in data_tensors or data_tensors[name] is None:
                    data_tensors[name] = data
                else:
                    data_tensors[name] = np.r_[data_tensors[name], data]
            num_recorded += 1

            # write to file if necessary
            if num_recorded >= datapoints_per_file:
                # save each tensor
                for name, tensor in data_tensors.iteritems():
                    output_name = self.experiment_data_output_names[name]
                    if output_name is None:
                        output_name = name
                    filename = os.path.join(
                        self.compressed_data_path,
                        '%s_%05d.npz' % (output_name, file_num))
                    np.savez_compressed(filename, tensor)

                # update for next round
                for name in data_tensors.keys():
                    del data_tensors[name]
                    data_tensors[name] = None
                file_num += 1
                num_recorded = 0

        # save final tensor
        if num_recorded > 0:
            for name, tensor in data_tensors.iteritems():
                output_name = self.experiment_data_output_names[name]
                if output_name is None:
                    output_name = name
                filename = os.path.join(
                    self.compressed_data_path,
                    '%s_%05d.npz' % (output_name, file_num))
                np.savez_compressed(filename, tensor)