IliaLarchenko's picture
fixed Professional mode
17d778a
raw
history blame
3.52 kB
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