austindanson's picture
Create app.py
5125056 verified
Raw
History Blame
1.54 kB
import gradio as gr
import torch
import spaces
from PIL import Image
from torchvision import transforms
from transformers import AutoModelForImageSegmentation
device = 'cuda' if torch.cuda.is_available() else 'cpu'
model = AutoModelForImageSegmentation.from_pretrained(
'joelseytre/toonout', trust_remote_code=True
).eval().to(device)
@spaces.GPU
def remove_background(image, resolution="1024x1024"):
if image is None:
return None
res = int(resolution.split('x')[0])
if image.mode != 'RGB':
image = image.convert('RGB')
original_size = image.size
transform = transforms.Compose([
transforms.Resize((res, res)),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
])
input_tensor = transform(image).unsqueeze(0).to(device)
with torch.no_grad():
preds = model(input_tensor)[-1].sigmoid().cpu()
pred = preds[0].squeeze()
mask = transforms.ToPILImage()(pred).resize(original_size)
output = image.copy()
output.putalpha(mask)
return output
demo = gr.Interface(
fn=remove_background,
inputs=[
gr.Image(type="pil", label="Upload Image"),
gr.Dropdown(["512x512", "1024x1024", "2048x2048"], value="1024x1024", label="Resolution")
],
outputs=gr.Image(type="pil", label="Result"),
title="ToonOut - Anime Background Removal",
description="99.5% accuracy on anime/cartoon images. MIT License - free for commercial use."
)
demo.launch()