File size: 3,450 Bytes
b6d5ded
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
from tensorflow.keras.preprocessing.image import ImageDataGenerator, img_to_array
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt

st.set_page_config(page_title="Image Augmentation with Keras", layout="wide")
st.title("🧪 Keras Image Augmentation (Legacy - ImageDataGenerator)")
st.write("""
This interactive app allows you to apply classic image augmentation techniques using Keras' legacy `ImageDataGenerator`.
Upload your image and tweak augmentation parameters to visualize the results live.
""")

# Sidebar parameters
st.sidebar.header("⚙️ Augmentation Parameters")
rotation_range = st.sidebar.slider("Rotation Range (degrees)", 0, 90, 30)
width_shift = st.sidebar.slider("Width Shift Range (%)", 0, 50, 10) / 100
height_shift = st.sidebar.slider("Height Shift Range (%)", 0, 50, 10) / 100
shear_range = st.sidebar.slider("Shear Range", 0.0, 1.0, 0.2)
zoom_range = st.sidebar.slider("Zoom Range", 0.0, 1.0, 0.2)
horizontal_flip = st.sidebar.checkbox("Horizontal Flip", value=True)
vertical_flip = st.sidebar.checkbox("Vertical Flip", value=False)
brightness_low = st.sidebar.slider("Brightness Range - Low", 0.0, 2.0, 0.8)
brightness_high = st.sidebar.slider("Brightness Range - High", 0.0, 2.0, 1.2)
fill_mode = st.sidebar.selectbox("Fill Mode", ["nearest", "constant", "reflect", "wrap"])

# Upload image
uploaded_file = st.file_uploader("Upload an image", type=["jpg", "jpeg", "png"])

if uploaded_file:
    # Load and preprocess image
    img = Image.open(uploaded_file).convert("RGB")
    img = img.resize((224, 224))
    x = img_to_array(img)
    x = x.reshape((1,) + x.shape)  # Add batch dimension

    # Define datagen
    datagen = ImageDataGenerator(
        rotation_range=rotation_range,
        width_shift_range=width_shift,
        height_shift_range=height_shift,
        shear_range=shear_range,
        zoom_range=zoom_range,
        horizontal_flip=horizontal_flip,
        vertical_flip=vertical_flip,
        brightness_range=[brightness_low, brightness_high],
        fill_mode=fill_mode
    )

    st.subheader("Augmented Variants (x9)")
    fig, axs = plt.subplots(3, 3, figsize=(12, 9))
    axs = axs.flatten()
    titles = [
        "Augmented 1", "Augmented 2", "Augmented 3",
        "Augmented 4", "Augmented 5", "Augmented 6",
        "Augmented 7", "Augmented 8", "Augmented 9"
    ]

    i = 0
    for batch in datagen.flow(x, batch_size=1):
        axs[i].imshow(batch[0].astype('uint8'))
        axs[i].axis('off')
        axs[i].set_title(titles[i], fontsize=10)
        i += 1
        if i == 9:
            break
    st.pyplot(fig)

    with st.expander("📘 What Each Augmentation Means"):
        st.markdown("""
        - **Rotation**: Rotates image by a random angle up to ± the specified value.
        - **Width/Height Shift**: Moves image sideways or up/down by a percentage of its size.
        - **Shear**: Applies a slant or distortion to simulate a shifted viewpoint.
        - **Zoom**: Randomly zooms in or out of the image.
        - **Horizontal/Vertical Flip**: Flips the image along the X or Y axis.
        - **Brightness Range**: Changes the brightness of the image randomly within the given range.
        - **Fill Mode**: Fills in empty areas created by transformations using methods like nearest neighbor or reflection.
        """)

else:
    st.info("📷 Upload an image to see augmentations and experiment with parameters.")