rmbg / app.py
1inchcard's picture
Update app.py
b5c119b verified
import streamlit as st
import requests
import os
from PIL import Image
import shutil
import zipfile
from io import BytesIO
# Streamlit app title
st.title("Background Remover App")
# Input for API Key
api_key = st.text_input("Enter Stability API Key", type="password")
# File uploader for images
uploaded_files = st.file_uploader("Upload Images", type=["png", "jpg", "jpeg", "webp"], accept_multiple_files=True)
# Output format selector
output_format = st.selectbox("Select Output Format", options=["png", "webp"], index=0)
# Process button
if st.button("Start Processing"):
if not api_key:
st.error("Please enter your API key.")
elif not uploaded_files:
st.error("Please upload at least one image.")
else:
progress_bar = st.progress(0)
processed_files = []
# Create a temporary directory to store processed files
temp_dir = "processed_images"
os.makedirs(temp_dir, exist_ok=True)
for i, uploaded_file in enumerate(uploaded_files):
image = uploaded_file.read()
try:
response = requests.post(
"https://api.stability.ai/v2beta/stable-image/edit/remove-background",
headers={
"authorization": f"Bearer {api_key}",
"accept": "image/*"
},
files={"image": image},
data={"output_format": output_format},
)
if response.status_code == 200:
output_file_path = os.path.join(temp_dir, f"{uploaded_file.name.split('.')[0]}_processed.{output_format}")
with open(output_file_path, "wb") as f:
f.write(response.content)
processed_files.append(output_file_path)
st.success(f"Processed: {uploaded_file.name}")
st.image(Image.open(output_file_path), caption=f"Processed: {uploaded_file.name}")
else:
st.error(f"Failed to process {uploaded_file.name}: {response.json()}")
except Exception as e:
st.error(f"Error processing {uploaded_file.name}: {e}")
progress_bar.progress((i + 1) / len(uploaded_files))
if processed_files:
# Create a zip archive of all processed images
zip_buffer = BytesIO()
with zipfile.ZipFile(zip_buffer, "w", zipfile.ZIP_DEFLATED) as zip_file:
for file_path in processed_files:
zip_file.write(file_path, os.path.basename(file_path))
zip_buffer.seek(0)
# Provide download link for the zip file
st.success("Processing completed!")
st.download_button(
label="Download All Processed Images as ZIP",
data=zip_buffer,
file_name="processed_images.zip",
mime="application/zip"
)
# Cleanup temporary directory
shutil.rmtree(temp_dir)