Spaces:
Running
Running
| import gradio as gr | |
| import torch | |
| import io | |
| import base64 | |
| import urllib.request | |
| from PIL import Image | |
| from process import process | |
| # 设备检测 | |
| DEVICE = "GPU" if torch.cuda.is_available() else "CPU" | |
| def load_image(image, url): | |
| """加载用户上传或URL图片""" | |
| if image is not None: | |
| return image | |
| elif url: | |
| try: | |
| if url.startswith("http"): | |
| with urllib.request.urlopen(url) as response: | |
| image_data = response.read() | |
| return Image.open(io.BytesIO(image_data)) | |
| elif url.startswith("data:image/"): | |
| header, base64_data = url.split(",", 1) | |
| return Image.open(io.BytesIO(base64.b64decode(base64_data))) | |
| except Exception as e: | |
| return None | |
| return None | |
| def remove_background(image): | |
| """移除背景""" | |
| if image is None: | |
| return None, None | |
| mask, image_nbg = process(image) | |
| return mask, image_nbg | |
| def interface(image, url): | |
| """完整的Gradio处理流程""" | |
| image = load_image(image, url) | |
| if image is None: | |
| return None, None, "请上传有效图片或输入正确的URL" | |
| mask, image_nbg = remove_background(image) | |
| return mask, image_nbg, "处理完成" if mask else "处理失败" | |
| # Gradio UI | |
| demo = gr.Interface( | |
| fn=interface, | |
| inputs=[gr.Image(type="pil", label="上传图片"), gr.Textbox(label="或输入图片URL")], | |
| outputs=[ | |
| gr.Image(type="pil", label="掩码"), | |
| gr.Image(type="pil", label="去除背景的图片"), | |
| ], | |
| title="AI 抠图 (RMBG 2.0)", | |
| description="上传图片或提供URL,自动去除背景", | |
| theme="default", | |
| flagging_mode="never", | |
| ) | |
| demo.queue() | |
| demo.launch() | |