From 2da53ff6eee714692d2ef0a0ccede831dc0115b9 Mon Sep 17 00:00:00 2001 From: Waleed Abdulla Date: Sun, 8 Apr 2018 19:58:26 -0700 Subject: [PATCH] New options for visualize_instances() - Override random colors with your own - Override image captions with your own - Choose to show or not show masks - Choose to show or not show bounding boxes --- mrcnn/visualize.py | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/mrcnn/visualize.py b/mrcnn/visualize.py index 9808512..ad5f758 100644 --- a/mrcnn/visualize.py +++ b/mrcnn/visualize.py @@ -83,14 +83,20 @@ def apply_mask(image, mask, color, alpha=0.5): def display_instances(image, boxes, masks, class_ids, class_names, scores=None, title="", - figsize=(16, 16), ax=None): + figsize=(16, 16), ax=None, + show_mask=True, show_bbox=True, + colors=None, captions=None): """ boxes: [num_instance, (y1, x1, y2, x2, class_id)] in image coordinates. masks: [height, width, num_instances] class_ids: [num_instances] class_names: list of class names of the dataset scores: (optional) confidence scores for each box - figsize: (optional) the size of the image. + title: (optional) Figure title + show_mask, show_bbox: To show masks and bounding boxes or not + figsize: (optional) the size of the image + colors: (optional) An array or colors to use with each object + captions: (optional) A list of strings to use as captions for each object """ # Number of instances N = boxes.shape[0] @@ -103,7 +109,7 @@ def display_instances(image, boxes, masks, class_ids, class_names, _, ax = plt.subplots(1, figsize=figsize) # Generate random colors - colors = random_colors(N) + colors = colors or random_colors(N) # Show area outside image boundaries. height, width = image.shape[:2] @@ -121,23 +127,28 @@ def display_instances(image, boxes, masks, class_ids, class_names, # Skip this instance. Has no bbox. Likely lost in image cropping. continue y1, x1, y2, x2 = boxes[i] - p = patches.Rectangle((x1, y1), x2 - x1, y2 - y1, linewidth=2, - alpha=0.7, linestyle="dashed", - edgecolor=color, facecolor='none') - ax.add_patch(p) + if show_bbox: + p = patches.Rectangle((x1, y1), x2 - x1, y2 - y1, linewidth=2, + alpha=0.7, linestyle="dashed", + edgecolor=color, facecolor='none') + ax.add_patch(p) # Label - class_id = class_ids[i] - score = scores[i] if scores is not None else None - label = class_names[class_id] - x = random.randint(x1, (x1 + x2) // 2) - caption = "{} {:.3f}".format(label, score) if score else label + if not captions: + class_id = class_ids[i] + score = scores[i] if scores is not None else None + label = class_names[class_id] + x = random.randint(x1, (x1 + x2) // 2) + caption = "{} {:.3f}".format(label, score) if score else label + else: + caption = captions[i] ax.text(x1, y1 + 8, caption, color='w', size=11, backgroundcolor="none") # Mask mask = masks[:, :, i] - masked_image = apply_mask(masked_image, mask, color) + if show_mask: + masked_image = apply_mask(masked_image, mask, color) # Mask Polygon # Pad to ensure proper polygons for masks that touch image edges. -- GitLab