File size: 2,495 Bytes
d39188f
 
 
 
 
 
b39f801
 
 
fa19b50
 
 
b39f801
fa19b50
 
d39188f
fa19b50
 
d39188f
fa19b50
 
 
 
d39188f
fa19b50
 
d39188f
fa19b50
 
b39f801
fa19b50
 
d39188f
fa19b50
 
 
 
 
 
 
 
d39188f
fa19b50
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# Define basic float and int types to patch sctypes without numpy
if not hasattr(__builtins__, 'sctypes'):
    sctypes = {
        "float": [float],
        "int": [int],
        "uint": [int]  # Handle 'uint' as normal 'int' since it's not natively supported without numpy
    }

# Now, import imgaug after patching
import imgaug.augmenters as iaa
import cv2
import matplotlib.pyplot as plt
import gradio as gr

def augment_image(image, flip, rotate, brightness, noise_scale, elastic_alpha, elastic_sigma):
    # Ensure the image is a NumPy array (required by imgaug)
    image = np.array(image)
    
    # Apply augmentations based on user inputs
    if flip:
        flip_aug = iaa.Fliplr(1.0)  # flips horizontally 100% of the time
        image = flip_aug.augment_image(image)

    rotate_aug = iaa.Affine(rotate=rotate)  # Rotate by specified degrees
    image = rotate_aug.augment_image(image)

    brightness_aug = iaa.Multiply(brightness)  # Adjust brightness
    image = brightness_aug.augment_image(image)

    noise_aug = iaa.AdditiveGaussianNoise(scale=(noise_scale))  # Gaussian noise
    image = noise_aug.augment_image(image)

    elastic_aug = iaa.ElasticTransformation(alpha=elastic_alpha, sigma=elastic_sigma)  # Elastic transformation
    image = elastic_aug.augment_image(image)
    
    return image

def gradio_interface(image, flip, rotate, brightness, noise_scale, elastic_alpha, elastic_sigma):
    augmented_image = augment_image(image, flip, rotate, brightness, noise_scale, elastic_alpha, elastic_sigma)
    return augmented_image

# Gradio UI
inputs = [
    gr.Image(type="pil"),  # Image input
    gr.Checkbox(label="Flip Image Horizontally"),  # Flip input
    gr.Slider(minimum=-180, maximum=180, step=1, value=0, label="Rotate Image (degrees)"),  # Rotation input
    gr.Slider(minimum=0.1, maximum=2.0, step=0.1, value=1.0, label="Adjust Brightness"),  # Brightness input
    gr.Slider(minimum=0, maximum=100, step=1, value=10, label="Gaussian Noise Scale"),  # Noise input
    gr.Slider(minimum=0, maximum=200, step=10, value=100, label="Elastic Transformation Alpha"),  # Elastic Alpha input
    gr.Slider(minimum=0.1, maximum=10.0, step=0.1, value=3.0, label="Elastic Transformation Sigma")  # Elastic Sigma input
]

iface = gr.Interface(
    fn=gradio_interface, 
    inputs=inputs, 
    outputs=gr.Image(type="numpy"),
    title="Image Augmentation Demo",
    description="Try out different data augmentation techniques on your image.",
)

iface.launch()