File size: 3,123 Bytes
50118e8
 
 
 
b5c119b
 
 
50118e8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b5c119b
 
 
 
 
 
50118e8
 
 
 
 
 
 
 
 
 
 
 
 
 
b5c119b
50118e8
 
 
b5c119b
50118e8
b5c119b
50118e8
 
 
 
 
 
b5c119b
 
 
 
 
 
 
50118e8
b5c119b
 
 
 
 
 
 
 
 
 
 
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
73
74
75
76
77
78
79
80
81
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)