Download app.py from isana25/denoise: direct link, hf CLI and curl.
- Browser
- Download file 2.33 kB
-
https://huggingface.co/spaces/isana25/denoise/resolve/main/app.py
- Command line
-
hf download hf://spaces/isana25/denoise/app.py
-
curl -L -o app.py https://huggingface.co/spaces/isana25/denoise/resolve/main/app.py
2.33 kB
| # app.py | |
| import cv2 | |
| import numpy as np | |
| import tensorflow as tf | |
| import gradio as gr | |
| # Load the trained model without restoring old optimizer/loss, then re-compile | |
| model = tf.keras.models.load_model("best_model.h5", compile=False) | |
| model.compile(optimizer="adam", loss="mse") | |
| def process_and_denoise(image): | |
| """ | |
| Takes any input image (color or grayscale), converts it to 64×64 grayscale, | |
| adds Gaussian noise, runs the autoencoder, and returns all three stages | |
| upsampled to 128×128 for clearer display: | |
| 1) Original resized | |
| 2) Noisy version | |
| 3) Denoised reconstruction | |
| """ | |
| # Convert to single-channel grayscale | |
| if image.ndim == 3 and image.shape[2] == 3: | |
| gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) | |
| else: | |
| gray = image[..., 0] if image.ndim == 3 else image | |
| # Resize down to 64×64 for the model | |
| small = cv2.resize(gray, (64, 64)) | |
| norm = small.astype(np.float32) / 255.0 | |
| # Add Gaussian noise | |
| sigma = 0.1 | |
| noisy = norm + sigma * np.random.randn(*norm.shape) | |
| noisy = np.clip(noisy, 0.0, 1.0) | |
| # Denoise with the autoencoder | |
| inp = noisy[np.newaxis, ..., np.newaxis] # (1,64,64,1) | |
| pred = model.predict(inp)[0, ..., 0] # (64,64) | |
| # Convert back to uint8 | |
| orig_disp = (norm * 255).astype(np.uint8) | |
| noisy_disp = (noisy * 255).astype(np.uint8) | |
| recon_disp = (pred * 255).astype(np.uint8) | |
| # Upsample each to 128×128 for display | |
| def upsample(img): | |
| return cv2.resize(img, (128, 128), interpolation=cv2.INTER_LINEAR) | |
| return upsample(orig_disp), upsample(noisy_disp), upsample(recon_disp) | |
| demo = gr.Interface( | |
| fn=process_and_denoise, | |
| inputs=gr.Image(type="numpy", label="Input Image"), | |
| outputs=[ | |
| gr.Image(type="numpy", label="Original ▶ 128×128"), | |
| gr.Image(type="numpy", label="Noisy (σ=0.1) ▶ 128×128"), | |
| gr.Image(type="numpy", label="Denoised ▶ 128×128") | |
| ], | |
| title="Denoising Autoencoder Demo", | |
| description=( | |
| "Upload any image (grayscale or color).\n" | |
| "- Internally resized to 64×64 for denoising.\n" | |
| "- Adds Gaussian noise (σ=0.1).\n" | |
| "- Displays all stages upsampled to 128×128 for clearer viewing." | |
| ) | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch(server_name="0.0.0.0", share=True) | |