Source code for panoptic_parts.visualization.visualize_label_with_legend

"""
Run this script as
`python -m panoptic_parts.visualization.visualize_label_with_legend \
     <datasetspec_path> <label_path>`
to visualize a label in all three levels (semantic, instance, parts),
together with a legend including all the colors and uids in that label.
"""
import argparse

import numpy as np
from PIL import Image
import matplotlib.pyplot as plt

from panoptic_parts.utils.visualization import experimental_colorize_label
from panoptic_parts.utils.format import decode_uids, encode_ids
from panoptic_parts.specs.dataset_spec import DatasetSpec


[docs]def visualize_from_paths(datasetspec_path, label_path): """ Visualizes in a pyplot window a label from the provided path. For visualization pixels are colored on: - semantic-level: according to colors defined in dataspec.sid2scene_color - semantic-instance-level: with random shades of colors defined in dataspec.sid2scene_color - semantic-instance-parts-level: with a mixture of parula colormap and the shades above See panoptic_parts.utils.visualization.uid2color for more information on color generation. Args: datasetspec_path: a YAML file path, including keys: `sid2scene_color`, `scene_class_part_class_from_sid_pid` label_path: a label path, will be passed to Pillow.Image.open """ spec = DatasetSpec(datasetspec_path) uids = np.array(Image.open(label_path), dtype=np.int32) # for PPP, we need to fold groupable parts (see dataset ppp_datasetspec.yaml for more details) uids = encode_ids(*decode_uids(uids, experimental_dataset_spec=spec, experimental_correct_range=True)) uids_sem_inst_parts_colored, uid2color_dct = experimental_colorize_label( uids, sid2color=spec.sid2scene_color, emphasize_instance_boundaries=True, return_uid2color=True, experimental_deltas=(60, 60, 60), experimental_alpha=0.5) # plot _, ax1 = plt.subplots() # generate legend, h is a hidden rectangle just to create a legend entry handles = [] handles_text = [] uids_unique = np.unique(uids) for uid in uids_unique: h = plt.Rectangle((0, 0), 1, 1, fc=list(map(lambda x: x/255, uid2color_dct[uid]))) handles.append(h) _, _, _, sid_pid = decode_uids(uid, return_sids_pids=True) scene_class_part_class = spec.scene_class_part_class_from_sid_pid(sid_pid) handles_text.append(f'{uid}: {scene_class_part_class}') ax1.imshow(uids_sem_inst_parts_colored) ax1.set_title('labels colored on semantic, instance, and part levels', fontsize='small') ax1.legend(handles, handles_text, ncol=3, fontsize='small', handlelength=1.0, loc='center left', bbox_to_anchor=(1.01, 0.5)) plt.tight_layout() plt.show()
def main(): parser = argparse.ArgumentParser() parser.add_argument('datasetspec_path') parser.add_argument('label_path') args = parser.parse_args() visualize_from_paths(args.datasetspec_path, args.label_path) return if __name__ == "__main__": main()