DAE-VAE / app.py
tincri's picture
update
91b8b8b
import numpy as np
import gradio as gr
from tensorflow.keras.models import load_model
import tensorflow as tf
# Carga los modelos previamente entrenados
autoencoder = load_model("models/autoencoder.h5", compile=False)
decoder = load_model("models/decoder.h5")
latent_dim = 128
def add_gaussian_noise(image, noise_factor=0.2):
noisy_image = image + noise_factor * np.random.normal(size=image.shape)
noisy_image = np.clip(noisy_image, 0., 1.)
return noisy_image
def denoise_and_generate(image, num_images):
image = np.array(image) / 255.0
image = tf.image.resize(image, (224, 224)) # Redimensionar la imagen
noisy_image = add_gaussian_noise(np.expand_dims(image, axis=0))
denoised_image = autoencoder.predict(noisy_image).squeeze()
denoised_image = (denoised_image * 255).astype(np.uint8)
noisy_image_display = (noisy_image.squeeze() * 255).astype(np.uint8)
# Genera imágenes con el VAE
random_latent_vectors = np.random.normal(size=(num_images, latent_dim))
generated_images = decoder.predict(random_latent_vectors)
# Prepara las imágenes para devolverlas
outputs = [noisy_image_display, denoised_image] + [generated_images[i].squeeze() for i in range(num_images)]
return outputs
# Define la interfaz
inputs = [
gr.Image(label="Imagen de Entrada"),
gr.Slider(1, 2, step=1, label="Número de Imágenes Generadas")
]
outputs = [
gr.Image(label="Imagen con Ruido"),
gr.Image(label="Imagen Reconstruida (DAE)"),
] + [
gr.Image(label=f"Imagen Generada {i+1} (VAE)") for i in range(2)
]
# Crea la aplicación Gradio
interface = gr.Interface(
fn=denoise_and_generate,
inputs=inputs,
outputs=outputs,
title="Interfaz Interactiva para DAE y VAE",
description="Sube una imagen para agregar ruido, reconstruir con DAE y generar imágenes nuevas con VAE."
)
# Lanza la aplicación
if __name__ == "__main__":
interface.launch(share=True)