sayed99's picture
initialized both deblurer
61d360d
Raw
History Blame Contribute Delete
3.71 kB
import streamlit as st
import requests
import os
import sys
from PIL import Image
import io
import time
from pathlib import Path
# Set API URL
API_URL = "http://localhost:8001" # Local FastAPI server URL
st.set_page_config(
page_title="NAFNet Image Deblurring",
page_icon="πŸ”",
layout="wide",
)
st.title("NAFNet Image Deblurring Application")
st.markdown("""
Transform your blurry photos into clear, sharp images using the state-of-the-art NAFNet AI model.
Upload an image to get started!
""")
# File uploader
uploaded_file = st.file_uploader(
"Choose a blurry image...", type=["jpg", "jpeg", "png", "bmp"])
# Sidebar controls
with st.sidebar:
st.header("About NAFNet")
st.markdown("""
**NAFNet** (Nonlinear Activation Free Network) is a state-of-the-art image restoration model designed for tasks like deblurring.
Key features:
- High-quality image deblurring
- Fast processing time
- Preservation of image details
""")
st.markdown("---")
# Check API status
if st.button("Check API Status"):
try:
response = requests.get(f"{API_URL}/status/", timeout=5)
if response.status_code == 200 and response.json().get("status") == "ok":
st.success("βœ… API is running and ready")
# Display additional info if available
memory_info = response.json().get("memory", {})
if memory_info:
st.info(f"CUDA Memory: {memory_info.get('cuda_memory_allocated', 'N/A')}")
else:
st.error("❌ API is not responding properly")
except:
st.error("❌ Cannot connect to API")
# Process when upload is ready
if uploaded_file is not None:
# Display the original image
col1, col2 = st.columns(2)
with col1:
st.subheader("Original Image")
image = Image.open(uploaded_file)
st.image(image, use_container_width=True)
# Process image button
process_button = st.button("Deblur Image")
if process_button:
with st.spinner("Deblurring your image... Please wait."):
try:
# Prepare simplified file structure
files = {
"file": ("image.jpg", uploaded_file.getvalue(), "image/jpeg")
}
# Send request to API
response = requests.post(f"{API_URL}/deblur/", files=files, timeout=60)
if response.status_code == 200:
with col2:
st.subheader("Deblurred Result")
deblurred_img = Image.open(io.BytesIO(response.content))
st.image(deblurred_img, use_column_width=True)
# Option to download the deblurred image
st.download_button(
label="Download Deblurred Image",
data=response.content,
file_name=f"deblurred_{uploaded_file.name}",
mime="image/png"
)
else:
try:
error_details = response.json().get('detail', 'Unknown error')
except:
error_details = response.text
st.error(f"Error: {error_details}")
except Exception as e:
st.error(f"An error occurred: {str(e)}")
# Footer
st.markdown("---")
st.markdown("Powered by NAFNet - Image Restoration Project")
def main():
pass # Streamlit already runs the script from top to bottom
if __name__ == "__main__":
main()