Spaces:
Runtime error
Runtime error
Download src/streamlit_app.py from BeyzaTopbas/BSDS500-Denoising-Autoencoder: direct link, hf CLI and curl.
- Browser
- Download file 2.77 kB
-
https://huggingface.co/spaces/BeyzaTopbas/BSDS500-Denoising-Autoencoder/resolve/main/src/streamlit_app.py
- Command line
-
hf download hf://spaces/BeyzaTopbas/BSDS500-Denoising-Autoencoder/src/streamlit_app.py
-
curl -L -o streamlit_app.py https://huggingface.co/spaces/BeyzaTopbas/BSDS500-Denoising-Autoencoder/resolve/main/src/streamlit_app.py
2.77 kB
| import os | |
| import numpy as np | |
| import streamlit as st | |
| import tensorflow as tf | |
| from PIL import Image | |
| IMG_HEIGHT = 128 | |
| IMG_WIDTH = 128 | |
| st.set_page_config( | |
| page_title="BSDS500 Denoising Autoencoder", | |
| layout="centered" | |
| ) | |
| st.title("🧼 BSDS500 Denoising Autoencoder") | |
| st.write( | |
| """ | |
| Deze app gebruikt een **convolutionele autoencoder** om ruis uit afbeeldingen te halen. | |
| Upload een foto (JPG/PNG), kies hoeveel ruis je wilt toevoegen, en bekijk het resultaat. | |
| """ | |
| ) | |
| def load_model(): | |
| # model staat in dezelfde map als dit bestand (src/) | |
| current_dir = os.path.dirname(os.path.abspath(__file__)) | |
| model_path = os.path.join(current_dir, "bsds500_denoising_autoencoder.h5") | |
| if not os.path.exists(model_path): | |
| st.error(f"Modelbestand niet gevonden op pad:\n`{model_path}`") | |
| return None | |
| try: | |
| model = tf.keras.models.load_model(model_path, compile=False) | |
| return model | |
| except Exception as e: | |
| st.error(f"❌ Kon het model niet laden: {e}") | |
| return None | |
| model = load_model() | |
| if model is None: | |
| st.stop() | |
| def preprocess_image(image: Image.Image): | |
| image = image.convert("RGB") | |
| image = image.resize((IMG_WIDTH, IMG_HEIGHT)) | |
| img_array = np.array(image).astype("float32") / 255.0 | |
| return img_array | |
| def add_noise(img_array: np.ndarray, noise_factor: float): | |
| noise = np.random.normal(0.0, 1.0, img_array.shape) | |
| noisy = img_array + noise_factor * noise | |
| return np.clip(noisy, 0.0, 1.0) | |
| def denoise_image(noisy_array: np.ndarray): | |
| inp = np.expand_dims(noisy_array, axis=0) | |
| reconstructed = model.predict(inp, verbose=0)[0] | |
| return reconstructed | |
| uploaded_file = st.file_uploader( | |
| "📁 Upload een afbeelding", | |
| type=["jpg", "jpeg", "png"] | |
| ) | |
| noise_factor = st.slider( | |
| "📉 Hoeveel ruis toevoegen?", | |
| min_value=0.0, | |
| max_value=0.5, | |
| value=0.1, | |
| step=0.01 | |
| ) | |
| run_button = st.button("✨ Maak reconstructie") | |
| if uploaded_file is not None: | |
| pil_image = Image.open(uploaded_file) | |
| clean_img = preprocess_image(pil_image) | |
| col1, col2, col3 = st.columns(3) | |
| with col1: | |
| st.subheader("Origineel") | |
| st.image(clean_img, use_container_width=True) | |
| if run_button: | |
| noisy_img = add_noise(clean_img, noise_factor) | |
| reconstructed_img = denoise_image(noisy_img) | |
| with col2: | |
| st.subheader("Noisy") | |
| st.image(noisy_img, use_container_width=True) | |
| with col3: | |
| st.subheader("Reconstructed") | |
| st.image(reconstructed_img, use_container_width=True) | |
| else: | |
| st.info("Klik op **'✨ Maak reconstructie'** om de autoencoder te gebruiken.") | |
| else: | |
| st.warning("Upload eerst een afbeelding (JPG/PNG).") | |