File size: 3,798 Bytes
96a96d9
66ec950
d5465e6
66ec950
96a96d9
e2d5557
6e7a74d
 
 
 
 
 
66ec950
e2d5557
 
96a96d9
 
 
590bb1b
 
 
 
e2d5557
17d778a
96a96d9
17d778a
 
 
96a96d9
 
 
 
 
 
 
6e7a74d
96a96d9
 
 
 
6e61d26
96a96d9
590bb1b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17d778a
590bb1b
17d778a
 
 
d5465e6
17d778a
590bb1b
17d778a
 
 
 
 
 
2403575
17d778a
 
 
 
d5465e6
17d778a
 
 
 
b30ce1c
17d778a
 
52a0611
17d778a
 
 
 
 
 
 
6e61d26
17d778a
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
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()