File size: 1,649 Bytes
17b50e3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
from PIL import Image
import numpy as np

def mock_encoder(image):
    """Simulates encoding an image into a latent representation."""
    return np.random.normal(0, 1, (1, 2)), np.random.normal(0, 1, (1, 2)), np.random.normal(0, 1, (1, 2))

def mock_decoder(latent_representation):
    """Simulates decoding a latent representation back into an image."""
    return np.random.rand(28, 28, 1) * 255  # Random image for demonstration

def latent_space_augmentation(image, encoder, decoder, noise_scale=0.1):
    z_mean, z_log_var, _ = encoder(image)
    epsilon = np.random.normal(size=z_mean.shape)
    z_augmented = z_mean + np.exp(0.5 * z_log_var) * epsilon * noise_scale
    augmented_image = decoder(z_augmented)
    return np.squeeze(augmented_image)

st.title("VAE-based Image Augmentation Demo")

uploaded_image = st.file_uploader("Choose an image...", type=["jpg", "jpeg", "png"])
if uploaded_image is not None:
    image = Image.open(uploaded_image).convert('L')
    image = image.resize((28, 28))  # Resizing for simplicity
    st.image(image, caption="Uploaded Image", use_column_width=True)
    
    if st.button("Augment Image"):
        # Convert PIL image to numpy array
        image_array = np.array(image) / 255.0  # Normalize the image
        image_array = image_array.reshape((28, 28, 1))  # Reshape for the mock encoder/decoder
        
        # Perform augmentation
        augmented_image = latent_space_augmentation(image_array, mock_encoder, mock_decoder)
        
        # Display the augmented image
        st.image(augmented_image, caption="Augmented Image", clamp=True, use_column_width=True)