import os import streamlit as st import albumentations as A from utils import load_augmentations_config, get_arguments from visuals import ( show_transform_control, select_image, show_credentials, show_docstring, ) # get CLI params: the path to images and image width path_to_images, width_original = get_arguments() if not os.path.isdir(path_to_images): st.title("There is no directory: " + path_to_images) else: # select interface type interface_type = st.sidebar.radio( "Select the interface type", ["Simple", "Professional"] ) # select image status, image = select_image(path_to_images, interface_type) if status == 0: st.title("Can't load image") if status == 2: st.title("Please, upload the image") else: placeholder_params = { "image_width": image.shape[1], "image_height": image.shape[0], "image_half_width": int(image.shape[1] / 2), "image_half_height": int(image.shape[0] / 2), } # load the config augmentations = load_augmentations_config( placeholder_params, "configs/augmentations.json" ) # select a transformation if interface_type == "Simple": transform_names = [ st.sidebar.selectbox( "Select a transformation:", sorted(list(augmentations.keys())) ) ] # in the professional mode you can choose several transforms elif interface_type == "Professional": transform_names = [ st.sidebar.selectbox( "Select transformation №1:", sorted(list(augmentations.keys())) ) ] while transform_names[-1] != "None": transform_names.append( st.sidebar.selectbox( f"Select transformation №{len(transform_names) + 1}:", ["None"] + sorted(list(augmentations.keys())), ) ) transform_names = transform_names[:-1] transforms = [] for i, transform_name in enumerate(transform_names): # select the params values st.sidebar.subheader("Params of the " + transform_name) param_values = show_transform_control(augmentations[transform_name], i) transforms.append(getattr(A, transform_name)(**param_values)) try: # apply the transformation to the image data = A.ReplayCompose(transforms)(image=image) error = 0 except ValueError: error = 1 st.title( "The error has occurred. Most probably you have passed wrong set of parameters. \ Check transforms that change the shape of image." ) if error == 0: augmented_image = data["image"] # show title st.title("Demo of Albumentations") # show the images width_transformed = int( width_original / image.shape[1] * augmented_image.shape[1] ) st.image(image, caption="Original image", width=width_original) st.image( augmented_image, caption="Transformed image", width=width_transformed ) # random values used to get transformations if interface_type == "Professional": st.subheader("Random params used") random_values = {} for applied_params in data["replay"]["transforms"]: random_values[ applied_params["__class_fullname__"].split(".")[-1] ] = applied_params["params"] st.write(random_values) # print additional info for transform in transforms: show_docstring(transform) st.code(str(transform)) show_credentials()