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") |