File size: 3,011 Bytes
a45dc04
f41e3e9
331d778
 
 
 
a45dc04
 
 
855a559
e67f455
 
 
 
 
 
a45dc04
9ca621b
 
 
a45dc04
 
 
9ca621b
e67f455
9ca621b
 
 
e67f455
 
 
 
 
 
 
 
36588be
9ca621b
a45dc04
 
9ca621b
 
 
a45dc04
9ca621b
 
a45dc04
 
 
 
 
e67f455
a45dc04
 
9ca621b
a45dc04
9ca621b
a45dc04
 
 
 
 
9ca621b
a45dc04
9ca621b
 
 
 
 
e67f455
 
 
 
 
 
a45dc04
e67f455
36588be
855a559
9ca621b
855a559
36588be
9ca621b
855a559
9ca621b
855a559
f41e3e9
36588be
a45dc04
9ca621b
a45dc04
 
 
9ca621b
 
e67f455
 
 
 
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import gradio as gr
from transformers import pipeline
import torch
import numpy as np
from PIL import Image
import io

def remove_background(input_image):
    try:
        # Initialize the pipeline with trust_remote_code=True
        segmentor = pipeline(
            "image-segmentation", 
            model="briaai/RMBG-1.4",
            trust_remote_code=True,
            device="cpu"
        )
        
        # Process the image
        result = segmentor(input_image)
        return result['output_image']
    except Exception as e:
        raise gr.Error(f"Error processing image: {str(e)}")

# Custom theme with valid colors
theme = gr.themes.Soft(
    primary_hue="orange",    # Changed from "gold" to "orange"
    secondary_hue="blue",
    neutral_hue="gray"
).set(
    body_background_fill="linear-gradient(135deg, #1a1a1a 0%, #2d2d2d 100%)",
    body_text_color="#ffffff",
    button_primary_background_fill="linear-gradient(45deg, #FFD700, #FFA500)",
    button_primary_text_color="#000000",
    border_color_primary="#FFD700"
)

# Create Gradio interface
with gr.Blocks(theme=theme) as demo:
    gr.HTML(
        """
        <div style="text-align: center; max-width: 800px; margin: 0 auto; padding: 20px;">
            <h1 style="font-size: 2.5rem; margin-bottom: 1rem; background: linear-gradient(45deg, #FFD700, #FFA500); -webkit-background-clip: text; -webkit-text-fill-color: transparent;">
                AI Background Remover
            </h1>
            <p style="color: #cccccc; font-size: 1.2rem; margin-bottom: 2rem;">
                Remove backgrounds instantly using RMBG V1.4 model
            </p>
        </div>
        """
    )
    
    with gr.Row():
        with gr.Column():
            input_image = gr.Image(
                label="Upload Image",
                type="pil",
                sources=["upload", "clipboard"]
            )
            
        with gr.Column():
            output_image = gr.Image(
                label="Result",
                type="pil"
            )
    
    with gr.Row():
        clear_btn = gr.Button("Clear", variant="secondary")
        process_btn = gr.Button("Remove Background", variant="primary")

    # Status message
    status_msg = gr.Textbox(
        label="Status",
        placeholder="Ready to process your image...",
        interactive=False
    )

    # Event handlers
    def process_and_update(image):
        if image is None:
            return None, "Please upload an image first"
        try:
            result = remove_background(image)
            return result, "✨ Background removed successfully!"
        except Exception as e:
            return None, f"❌ Error: {str(e)}"

    process_btn.click(
        fn=process_and_update,
        inputs=[input_image],
        outputs=[output_image, status_msg],
    )
    
    clear_btn.click(
        fn=lambda: (None, None, "Ready to process your image..."),
        outputs=[input_image, output_image, status_msg],
    )

# Launch the app
demo.launch()