Spaces:
Running
Running
import sys | |
import types | |
import warnings | |
# Suppress specific timm warning | |
warnings.filterwarnings("ignore", category=FutureWarning, module="timm.models.layers") | |
# Monkey-patch torch.classes path issue | |
if not hasattr(sys.modules.get("torch"), "__path__"): | |
torch_classes = types.SimpleNamespace(_path=[]) | |
sys.modules["torch.classes"] = torch_classes | |
import streamlit as st | |
import cv2 | |
import numpy as np | |
from io import BytesIO | |
from PIL import Image | |
from transparent_background import Remover | |
def process_image(image): | |
try: | |
remover = Remover() | |
img = Image.open(image).convert("RGB") | |
with st.spinner("Processing image..."): | |
out = remover.process(img, type="rgba") | |
return out # `out` is already a PIL Image | |
except Exception as e: | |
st.error(f"An error occurred: {str(e)}") | |
return None | |
def main(): | |
st.title("Image Upload and Processing App") | |
uploaded_file = st.file_uploader("Upload an image", type=["jpg", "jpeg", "png", "tif", "tiff"]) | |
if uploaded_file is not None: | |
try: | |
image = Image.open(uploaded_file) | |
# Convert unsupported image modes | |
if image.mode == 'I;16': | |
image = image.point(lambda i: i * (1.0 / 256)).convert('RGB') | |
st.image(image, caption="Uploaded Image", use_container_width=True) | |
processed_pil = process_image(uploaded_file) | |
if processed_pil: | |
st.image(processed_pil, caption="Processed Image", use_container_width=True) | |
buf = BytesIO() | |
processed_pil.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" | |
) | |
except Exception as e: | |
st.error(f"Error loading image: {e}") | |
if __name__ == "__main__": | |
main() | |