|
from transformers import SegformerImageProcessor, AutoModelForSemanticSegmentation |
|
from PIL import Image |
|
import requests |
|
import matplotlib.pyplot as plt |
|
import torch.nn as nn |
|
import torch |
|
from torchvision import transforms |
|
from transformers import SamModel, SamProcessor |
|
from diffusers import AutoPipelineForInpainting |
|
from diffusers.utils import load_image, make_image_grid |
|
|
|
|
|
|
|
def modify_image(image_url, prompt, mask_id=4): |
|
|
|
processor = SegformerImageProcessor.from_pretrained("sayeed99/segformer_b3_clothes") |
|
model = AutoModelForSemanticSegmentation.from_pretrained("sayeed99/segformer_b3_clothes") |
|
|
|
image = Image.open(image_url) |
|
inputs = processor(images=image, return_tensors="pt") |
|
|
|
outputs = model(**inputs) |
|
logits = outputs.logits.cpu() |
|
|
|
upsampled_logits = nn.functional.interpolate( |
|
logits, |
|
size=image.size[::-1], |
|
mode="bilinear", |
|
align_corners=False, |
|
) |
|
|
|
pred_seg = upsampled_logits.argmax(dim=1)[0] |
|
|
|
mask = (pred_seg == mask_id).numpy() |
|
mask_image = Image.fromarray((mask * 255).astype('uint8')) |
|
|
|
pipeline = AutoPipelineForInpainting.from_pretrained( |
|
"redstonehero/ReV_Animated_Inpainting", |
|
torch_dtype=torch.float16) |
|
|
|
|
|
|
|
image1 = pipeline(prompt=prompt, |
|
num_inference_steps=24, |
|
image=image, |
|
mask_image=mask_image, |
|
guidance_scale=3, |
|
strength=1.0).images[0] |
|
|
|
return make_image_grid([image1], rows = 1, cols = 1) |
|
|
|
|
|
|
|
import gradio as gr |
|
|
|
def gradio_wrapper(image, prompt, choice): |
|
return modify_image(image, prompt, int(choice)) |
|
|
|
demo = gr.Interface( |
|
fn=gradio_wrapper, |
|
inputs=[ |
|
gr.Image(type="filepath"), |
|
gr.Textbox(label="Prompt"), |
|
gr.Radio(["4", "6"], label="Mask ID") |
|
], |
|
outputs=gr.Image() |
|
) |
|
|
|
demo.launch(inline=False) |