import cv2 import os import numpy as np import json import argparse import streamlit as st @st.cache def get_arguments(): """Return the values of CLI params""" parser = argparse.ArgumentParser() parser.add_argument("--image_folder", default="images") parser.add_argument("--image_width", default=400, type=int) args = parser.parse_args() return getattr(args, "image_folder"), getattr(args, "image_width") @st.cache def get_images_list(path_to_folder: str) -> list: """Return the list of images from folder Args: path_to_folder (str): absolute or relative path to the folder with images """ image_names_list = [ x for x in os.listdir(path_to_folder) if x[-3:] in ["jpg", "peg", "png"] ] return image_names_list @st.cache def load_image(image_name: str, path_to_folder: str, bgr2rgb: bool = True): """Load the image Args: image_name (str): name of the image path_to_folder (str): path to the folder with image bgr2rgb (bool): converts BGR image to RGB if True """ path_to_image = os.path.join(path_to_folder, image_name) image = cv2.imread(path_to_image) if bgr2rgb: image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) return image def upload_image(bgr2rgb: bool = True): """Uoload the image Args: bgr2rgb (bool): converts BGR image to RGB if True """ file = st.sidebar.file_uploader("Upload your image (jpg, jpeg, or png)", ["jpg", "jpeg", "png"]) image = cv2.imdecode(np.fromstring(file.read(), np.uint8), 1) if bgr2rgb: image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) return image @st.cache def load_augmentations_config( placeholder_params: dict, path_to_config: str = "configs/augmentations.json" ) -> dict: """Load the json config with params of all transforms Args: placeholder_params (dict): dict with values of placeholders path_to_config (str): path to the json config file """ with open(path_to_config, "r") as config_file: augmentations = json.load(config_file) for name, params in augmentations.items(): params = [fill_placeholders(param, placeholder_params) for param in params] return augmentations def fill_placeholders(params: dict, placeholder_params: dict) -> dict: """Fill the placeholder values in the config file Args: params (dict): original params dict with placeholders placeholder_params (dict): dict with values of placeholders """ # TODO: refactor if "placeholder" in params: placeholder_dict = params["placeholder"] for k, v in placeholder_dict.items(): if isinstance(v, list): params[k] = [] for element in v: if element in placeholder_params: params[k].append(placeholder_params[element]) else: params[k].append(element) else: if v in placeholder_params: params[k] = placeholder_params[v] else: params[k] = v params.pop("placeholder") return params def get_params_string(param_values: dict) -> str: """Generate the string from the dict with parameters Args: param_values (dict): dict of "param_name" -> "param_value" """ params_string = ", ".join( [k + "=" + str(param_values[k]) for k in param_values.keys()] ) return params_string