File size: 1,808 Bytes
696f3f1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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()