|
from typing import Dict, List, Any |
|
from diffusers import DiffusionPipeline, EulerAncestralDiscreteScheduler |
|
import torch |
|
import base64 |
|
from PIL import Image |
|
import io |
|
|
|
class EndpointHandler(): |
|
def __init__(self, path=""): |
|
scheduler = EulerAncestralDiscreteScheduler.from_pretrained(path, subfolder="scheduler") |
|
self.pipeline = DiffusionPipeline.from_pretrained(path, scheduler=scheduler, torch_dtype=torch.float32) |
|
if torch.cuda.is_available(): |
|
self.pipeline.to("cuda") |
|
|
|
def __call__(self, data: Dict[str, any]) -> List[Dict[str, Any]]: |
|
mask_bytes = base64.b64decode(data["inputs"]["mask"]) |
|
mask = Image.open(io.BytesIO(mask_bytes)).convert('RGB') |
|
|
|
image_bytes = base64.b64decode(data["inputs"]["image"]) |
|
image = Image.open(io.BytesIO(image_bytes)).convert('RGB') |
|
|
|
prompt = "a picture of a person with a nice haircut" |
|
|
|
new_image = self.pipeline(prompt=prompt, image=image, mask_image=mask, height=512, width=512, num_inference_steps=20).images[0] |
|
return [{"image": new_image}] |
|
|