Spaces:
Runtime error
Runtime error
File size: 2,843 Bytes
f93be02 | 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 63 64 65 66 67 68 69 70 71 72 | 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
@st.cache_resource
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")
|