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