Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import torch | |
| import numpy as np | |
| from PIL import Image | |
| from transformers import AutoProcessor, CLIPSegForImageSegmentation | |
| # Load the CLIPSeg model and processor | |
| processor = AutoProcessor.from_pretrained("CIDAS/clipseg-rd64-refined") | |
| model = CLIPSegForImageSegmentation.from_pretrained("CIDAS/clipseg-rd64-refined") | |
| def segment_image(input_image, text_prompt): | |
| # Preprocess the image | |
| inputs = processor(text=[text_prompt], images=[input_image], padding="max_length", return_tensors="pt") | |
| # Perform segmentation | |
| with torch.no_grad(): | |
| outputs = model(**inputs) | |
| # Get the predicted segmentation | |
| preds = outputs.logits.squeeze().sigmoid() | |
| # Convert the prediction to a PIL image | |
| segmentation = (preds > 0.5).float() | |
| segmentation_image = Image.fromarray((segmentation.numpy() * 255).astype(np.uint8)) | |
| return segmentation_image | |
| # Create Gradio interface | |
| iface = gr.Interface( | |
| fn=segment_image, | |
| inputs=[ | |
| gr.Image(type="pil", label="Input Image"), | |
| gr.Textbox(label="Text Prompt", placeholder="Enter a description of what to segment...") | |
| ], | |
| outputs=gr.Image(type="pil", label="Segmentation Result"), | |
| title="CLIPSeg Image Segmentation", | |
| description="Upload an image and provide a text prompt to segment objects.", | |
| examples=[ | |
| ["path/to/example_image1.jpg", "car"], | |
| ["path/to/example_image2.jpg", "person"], | |
| ] | |
| ) | |
| # Launch the interface | |
| iface.launch() |