Spaces:
Runtime error
Runtime error
| import streamlit as st | |
| from PIL import Image | |
| import numpy as np | |
| import cv2 | |
| import torch | |
| from io import BytesIO | |
| from realesrgan import RealESRGANer | |
| from realesrgan.archs.rrdbnet_arch import RRDBNet | |
| # Load Real-ESRGAN model | |
| def load_realesrgan_model(): | |
| model = RRDBNet(num_in_ch=3, num_out_ch=3, num_feat=64, num_block=23, num_grow_ch=32, scale=4) | |
| model_path = 'https://github.com/xinntao/Real-ESRGAN/releases/download/v0.3.0/RealESRGAN_x4plus.pth' | |
| upsampler = RealESRGANer(scale=4, model_path=model_path, model=model, tile=400, tile_pad=10, pre_pad=0, half=True) | |
| return upsampler | |
| # Initialize model | |
| upsampler = load_realesrgan_model() | |
| # Title and Description | |
| st.title("Super Clean, Unblur, and Enhance Photo/Image App") | |
| st.markdown("Upload an image to enhance its quality, reduce blurriness, and clean noise.") | |
| # File Upload | |
| uploaded_file = st.file_uploader("Upload an image (JPEG, PNG)", type=["jpeg", "jpg", "png"]) | |
| # Process Uploaded Image | |
| if uploaded_file: | |
| # Load image using PIL | |
| image = Image.open(uploaded_file) | |
| st.image(image, caption="Uploaded Image", use_container_width=True) | |
| # Convert to NumPy array | |
| img_array = np.array(image) | |
| # Enhancement Options | |
| operation = st.selectbox("Choose an Operation", ["Super Clean", "Unblur and Enhance"]) | |
| if st.button("Process Image"): | |
| # Perform Super Cleaning | |
| if operation == "Super Clean": | |
| try: | |
| result, _ = upsampler.enhance(img_array, outscale=4) | |
| output_image = Image.fromarray(result) | |
| st.image(output_image, caption="Super Cleaned Image", use_container_width=True) | |
| except Exception as e: | |
| st.error(f"Error during super cleaning: {e}") | |
| # Perform Unblur and Enhance | |
| elif operation == "Unblur and Enhance": | |
| # Apply unsharp mask | |
| gaussian = cv2.GaussianBlur(img_array, (9, 9), 10.0) | |
| unblurred = cv2.addWeighted(img_array, 1.5, gaussian, -0.5, 0) | |
| # Enhance colors using CLAHE (Contrast Limited Adaptive Histogram Equalization) | |
| lab = cv2.cvtColor(unblurred, cv2.COLOR_RGB2LAB) | |
| l, a, b = cv2.split(lab) | |
| clahe = cv2.createCLAHE(clipLimit=3.0, tileGridSize=(8, 8)) | |
| cl = clahe.apply(l) | |
| enhanced = cv2.merge((cl, a, b)) | |
| final_img = cv2.cvtColor(enhanced, cv2.COLOR_LAB2RGB) | |
| output_image = Image.fromarray(final_img) | |
| st.image(output_image, caption="Unblurred and Enhanced Image", use_container_width=True) | |
| # Provide Download Option | |
| buf = BytesIO() | |
| output_image.save(buf, format="PNG") | |
| byte_im = buf.getvalue() | |
| st.download_button(label="Download Processed Image", data=byte_im, file_name="processed_image.png", mime="image/png") | |