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")