Spaces:
Runtime error
Runtime error
from fastapi import FastAPI, UploadFile, Form | |
from fastapi.responses import StreamingResponse | |
#import torch | |
from PIL import Image | |
#from diffusers import StableDiffusionDepth2ImgPipeline | |
import numpy as np | |
from io import BytesIO | |
app = FastAPI() | |
""" | |
pipe = StableDiffusionDepth2ImgPipeline.from_pretrained( | |
"stabilityai/stable-diffusion-2-depth", | |
torch_dtype=torch.float16, | |
).to("cuda") | |
""" | |
def pad_image(input_image): | |
pad_w, pad_h = np.max(((2, 2), np.ceil( | |
np.array(input_image.size) / 64).astype(int)), axis=0) * 64 - input_image.size | |
im_padded = Image.fromarray( | |
np.pad(np.array(input_image), ((0, pad_h), (0, pad_w), (0, 0)), mode='edge')) | |
w, h = im_padded.size | |
if w == h: | |
return im_padded | |
elif w > h: | |
new_image = Image.new(im_padded.mode, (w, w), (0, 0, 0)) | |
new_image.paste(im_padded, (0, (w - h) // 2)) | |
return new_image | |
else: | |
new_image = Image.new(im_padded.mode, (h, h), (0, 0, 0)) | |
new_image.paste(im_padded, ((h - w) // 2, 0)) | |
return new_image | |
def predict(input_image, prompt, steps, scale, seed, strength, depth_image=None): | |
depth = None | |
if depth_image is not None: | |
depth_image = pad_image(depth_image) | |
depth_image = depth_image.resize((512, 512)) | |
depth = np.array(depth_image.convert("L")) | |
depth = depth.astype(np.float32) / 255.0 | |
depth = depth[None, None] | |
depth = torch.from_numpy(depth) | |
init_image = input_image.convert("RGB") | |
image = pad_image(init_image) # resize to integer multiple of 32 | |
image = image.resize((512, 512)) | |
result = pipe(prompt=prompt, image=image, strength=strength) | |
return result['images'] | |
def grayscale(image, | |
prompt, | |
steps, | |
scale, | |
seed, | |
strength): | |
image = image.convert('L') #convert to grayscale | |
return image | |
async def convert_ifc_img(file: UploadFile, | |
prompt: str = Form(default=""), | |
steps: int = Form(default=50), | |
scale: float = Form(default=9), | |
seed: int = Form(default=178106186), | |
strength: float = Form(default=0.9) | |
): | |
image = Image.open(file.file) | |
image_result = grayscale(image, prompt, steps, scale, seed, strength) | |
buffer = BytesIO() | |
image_result.save(buffer, format="PNG") | |
buffer.seek(0) | |
return StreamingResponse(buffer, media_type="image/png") |