示例#1
0
        def get_vis(vis, _gt_boxes, _prediction_dict):

            vis_gt_boxes = np.zeros((len(_gt_boxes), 100, 4))
            for ib in range(len(_gt_boxes)):
                for ij in range(len(_gt_boxes[ib])):
                    vis_gt_boxes[ib, ij, :] = _gt_boxes[ib][ij]
            #print('vis_gt_scores',vis_gt_scores)

            vis_gt_classes = np.zeros((len(_gt_boxes), 100), 'uint32')
            for ib in range(len(_gt_boxes)):
                for ij in range(len(_gt_boxes[ib])):
                    vis_gt_classes[ib][ij] = 2

            vis_gt_scores = np.zeros((len(_gt_boxes), 100))
            for ib in range(len(_gt_boxes)):
                for ij in range(len(_gt_boxes[ib])):
                    vis_gt_scores[ib][ij] = 1.

            vis = viz_utils.draw_bounding_boxes_on_image_tensors(
                vis,
                vis_gt_boxes,  # (4, 100, 4) detection_classes (4, 100) (4, 100)
                vis_gt_classes,
                vis_gt_scores,  #np.ones((4,len(gt_boxes), 100)),
                category_index)
            vis = tf.cast(vis, tf.uint8)
            vis = viz_utils.draw_bounding_boxes_on_image_tensors(
                vis,  #tf.cast(tf.concat(image_tensors,axis=0),tf.uint8), #vis,
                _prediction_dict['detection_boxes'],
                _prediction_dict['detection_classes'].numpy().astype(
                    np.uint32) +
                label_id_offset,  #prediction_dict['detection_classes'],#prediction_dict['detection_classes'].astype(tf.int32) + label_id_offset,
                _prediction_dict['detection_scores'],
                category_index)
            vis = tf.cast(vis, tf.float32)
            return vis
  def test_draw_bounding_boxes_on_image_tensors(self):
    """Tests that bounding box utility produces reasonable results."""
    category_index = {1: {'id': 1, 'name': 'dog'}, 2: {'id': 2, 'name': 'cat'}}

    fname = os.path.join(_TESTDATA_PATH, 'image1.jpg')
    image_np = np.array(Image.open(fname))
    images_np = np.stack((image_np, image_np), axis=0)

    with tf.Graph().as_default():
      images_tensor = tf.constant(value=images_np, dtype=tf.uint8)
      boxes = tf.constant([[[0.4, 0.25, 0.75, 0.75], [0.5, 0.3, 0.6, 0.9]],
                           [[0.25, 0.25, 0.75, 0.75], [0.1, 0.3, 0.6, 1.0]]])
      classes = tf.constant([[1, 1], [1, 2]], dtype=tf.int64)
      scores = tf.constant([[0.8, 0.1], [0.6, 0.5]])
      images_with_boxes = (
          visualization_utils.draw_bounding_boxes_on_image_tensors(
              images_tensor,
              boxes,
              classes,
              scores,
              category_index,
              min_score_thresh=0.2))

      with self.test_session() as sess:
        sess.run(tf.global_variables_initializer())

        # Write output images for visualization.
        images_with_boxes_np = sess.run(images_with_boxes)
        self.assertEqual(images_np.shape, images_with_boxes_np.shape)
        for i in range(images_with_boxes_np.shape[0]):
          img_name = 'image_' + str(i) + '.png'
          output_file = os.path.join(self.get_temp_dir(), img_name)
          logging.info('Writing output image %d to %s', i, output_file)
          image_pil = Image.fromarray(images_with_boxes_np[i, ...])
          image_pil.save(output_file)
示例#3
0
 def graph_fn():
     images_tensor = tf.constant(value=images_np, dtype=tf.uint8)
     image_shape = tf.constant(original_image_shape, dtype=tf.int32)
     boxes = tf.constant([[[0.4, 0.25, 0.75, 0.75],
                           [0.5, 0.3, 0.6, 0.9]],
                          [[0.25, 0.25, 0.75, 0.75],
                           [0.1, 0.3, 0.6, 1.0]]])
     classes = tf.constant([[1, 1], [1, 2]], dtype=tf.int64)
     scores = tf.constant([[0.8, 0.1], [0.6, 0.5]])
     keypoints = tf.random.uniform((2, 2, 4, 2),
                                   maxval=1.0,
                                   dtype=tf.float32)
     keypoint_edges = [(0, 1), (1, 2), (2, 3), (3, 0)]
     images_with_boxes = (
         visualization_utils.draw_bounding_boxes_on_image_tensors(
             images_tensor,
             boxes,
             classes,
             scores,
             category_index,
             original_image_spatial_shape=image_shape,
             true_image_shape=image_shape,
             keypoints=keypoints,
             min_score_thresh=0.2,
             keypoint_edges=keypoint_edges))
     return images_with_boxes
示例#4
0
  def test_draw_bounding_boxes_on_image_tensors_grayscale(self):
    """Tests the case where input image tensor has one channel."""
    category_index = {1: {'id': 1, 'name': 'dog'}}
    image_np = self.create_test_grayscale_image()
    images_np = np.stack((image_np, image_np), axis=0)

    with tf.Graph().as_default():
      images_tensor = tf.constant(value=images_np, dtype=tf.uint8)
      image_shape = tf.constant([[100, 200], [100, 200]], dtype=tf.int32)
      boxes = tf.constant(0, dtype=tf.float32, shape=[2, 0, 4])
      classes = tf.constant(0, dtype=tf.int64, shape=[2, 0])
      scores = tf.constant(0, dtype=tf.float32, shape=[2, 0])
      images_with_boxes = (
          visualization_utils.draw_bounding_boxes_on_image_tensors(
              images_tensor,
              boxes,
              classes,
              scores,
              category_index,
              original_image_spatial_shape=image_shape,
              true_image_shape=image_shape,
              min_score_thresh=0.2))

      with self.test_session() as sess:
        sess.run(tf.global_variables_initializer())

        final_images_np = sess.run(images_with_boxes)
        self.assertEqual((2, 100, 200, 3), final_images_np.shape)
  def test_draw_bounding_boxes_on_image_tensors_with_additional_channels(self):
    """Tests the case where input image tensor has more than 3 channels."""
    category_index = {1: {'id': 1, 'name': 'dog'}}
    image_np = self.create_test_image_with_five_channels()
    images_np = np.stack((image_np, image_np), axis=0)

    with tf.Graph().as_default():
      images_tensor = tf.constant(value=images_np, dtype=tf.uint8)
      boxes = tf.constant(0, dtype=tf.float32, shape=[2, 0, 4])
      classes = tf.constant(0, dtype=tf.int64, shape=[2, 0])
      scores = tf.constant(0, dtype=tf.float32, shape=[2, 0])
      images_with_boxes = (
          visualization_utils.draw_bounding_boxes_on_image_tensors(
              images_tensor,
              boxes,
              classes,
              scores,
              category_index,
              min_score_thresh=0.2))

      with self.test_session() as sess:
        sess.run(tf.global_variables_initializer())

        final_images_np = sess.run(images_with_boxes)
        self.assertEqual((2, 100, 200, 3), final_images_np.shape)
示例#6
0
  def test_draw_bounding_boxes_on_image_tensors(self):
    """Tests that bounding box utility produces reasonable results."""
    category_index = {1: {'id': 1, 'name': 'dog'}, 2: {'id': 2, 'name': 'cat'}}

    fname = os.path.join(_TESTDATA_PATH, 'image1.jpg')
    image_np = np.array(Image.open(fname))
    images_np = np.stack((image_np, image_np), axis=0)

    with tf.Graph().as_default():
      images_tensor = tf.constant(value=images_np, dtype=tf.uint8)
      boxes = tf.constant([[[0.4, 0.25, 0.75, 0.75], [0.5, 0.3, 0.6, 0.9]],
                           [[0.25, 0.25, 0.75, 0.75], [0.1, 0.3, 0.6, 1.0]]])
      classes = tf.constant([[1, 1], [1, 2]], dtype=tf.int64)
      scores = tf.constant([[0.8, 0.1], [0.6, 0.5]])
      images_with_boxes = (
          visualization_utils.draw_bounding_boxes_on_image_tensors(
              images_tensor,
              boxes,
              classes,
              scores,
              category_index,
              min_score_thresh=0.2))

      with self.test_session() as sess:
        sess.run(tf.global_variables_initializer())

        # Write output images for visualization.
        images_with_boxes_np = sess.run(images_with_boxes)
        self.assertEqual(images_np.shape, images_with_boxes_np.shape)
        for i in range(images_with_boxes_np.shape[0]):
          img_name = 'image_' + str(i) + '.png'
          output_file = os.path.join(self.get_temp_dir(), img_name)
          logging.info('Writing output image %d to %s', i, output_file)
          image_pil = Image.fromarray(images_with_boxes_np[i, ...])
          image_pil.save(output_file)
示例#7
0
        def graph_fn():
            images_tensor = tf.constant(value=images_np, dtype=tf.uint8)
            boxes = tf.constant(0, dtype=tf.float32, shape=[2, 0, 4])
            classes = tf.constant(0, dtype=tf.int64, shape=[2, 0])
            scores = tf.constant(0, dtype=tf.float32, shape=[2, 0])
            images_with_boxes = (
                visualization_utils.draw_bounding_boxes_on_image_tensors(
                    images_tensor,
                    boxes,
                    classes,
                    scores,
                    category_index,
                    min_score_thresh=0.2))

            return images_with_boxes
示例#8
0
    def process(
        self,
        images,
        object_boxes,
        object_scores=None,
        object_classes=None,
        object_instance_ids=None,
        object_keypoints=None,
        object_instance_masks_on_image=None,
    ):
        # pylint: disable=arguments-differ,too-many-arguments
        # base class has more generic signature
        images = tf.cast(images * 256.0, tf.uint8)
        if object_scores is None:
            object_scores = tf.ones_like(object_boxes, tf.float32)[..., 0]
        if object_classes is None:
            ones = tf.ones_like(object_scores, tf.int64)
            zeros = tf.zeros_like(object_scores, tf.int64)
            object_classes = tf.where(object_scores > 0, ones, zeros)
        object_classes = tf.cast(object_classes, tf.int64)
        if len(images.get_shape()) == 3:
            images = tf.expand_dims(images, -1)
        if images.get_shape().as_list()[-1] == 1:
            images = tf.tile(images, [1, 1, 1, 3])

        true_image_shapes = get_true_image_shapes(images)
        image_with_detections = draw_bounding_boxes_on_image_tensors(
            images=images,
            boxes=object_boxes,
            classes=object_classes,
            scores=object_scores,
            keypoints=object_keypoints,
            instance_masks=object_instance_masks_on_image,
            category_index=self.category_index,
            track_ids=object_instance_ids,
            max_boxes_to_draw=self.max_boxes_to_draw,
            true_image_shape=true_image_shapes,
            original_image_spatial_shape=true_image_shapes[:, :2],
            min_score_thresh=self.score_threshold,
            use_normalized_coordinates=self.use_normalized_coordinates,
        )
        image_with_detections = tf.reshape(image_with_detections,
                                           tf.shape(images))
        result = {ObjectDataFields.images_with_objects: image_with_detections}
        return result
示例#9
0
 def graph_fn():
     images_tensor = tf.constant(value=images_np, dtype=tf.uint8)
     image_shape = tf.constant(original_image_shape, dtype=tf.int32)
     boxes = tf.constant([[[0.4, 0.25, 0.75, 0.75],
                           [0.5, 0.3, 0.7, 0.9], [0.7, 0.5, 0.8, 0.9]],
                          [[0.41, 0.25, 0.75, 0.75],
                           [0.51, 0.3, 0.7, 0.9], [0.75, 0.5, 0.8,
                                                   0.9]]])
     classes = tf.constant([[1, 1, 2], [1, 1, 2]], dtype=tf.int64)
     scores = tf.constant([[0.8, 0.5, 0.7], [0.6, 0.5, 0.8]])
     track_ids = tf.constant([[3, 9, 7], [3, 9, 144]], dtype=tf.int32)
     images_with_boxes = (
         visualization_utils.draw_bounding_boxes_on_image_tensors(
             images_tensor,
             boxes,
             classes,
             scores,
             category_index,
             original_image_spatial_shape=image_shape,
             true_image_shape=image_shape,
             track_ids=track_ids,
             min_score_thresh=0.2))
     return images_with_boxes