# # SPDX-FileCopyrightText: Copyright (c) 1993-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # import os import random from io import BytesIO import numpy as np import requests import torch from PIL import Image def preprocess_image(image): """ image: torch.Tensor """ w, h = image.size w, h = map(lambda x: x - x % 32, (w, h)) # resize to integer multiple of 32 image = image.resize((w, h)) image = np.array(image).astype(np.float32) / 255.0 image = image[None].transpose(0, 3, 1, 2) image = torch.from_numpy(image).contiguous() return 2.0 * image - 1.0 def prepare_mask_and_masked_image(image, mask): """ image: PIL.Image.Image mask: PIL.Image.Image """ if isinstance(image, Image.Image): image = np.array(image.convert("RGB")) image = image[None].transpose(0, 3, 1, 2) image = torch.from_numpy(image).to(dtype=torch.float32).contiguous() / 127.5 - 1.0 if isinstance(mask, Image.Image): mask = np.array(mask.convert("L")) mask = mask.astype(np.float32) / 255.0 mask = mask[None, None] mask[mask < 0.5] = 0 mask[mask >= 0.5] = 1 mask = torch.from_numpy(mask).to(dtype=torch.float32).contiguous() masked_image = image * (mask < 0.5) return mask, masked_image def download_image(url): response = requests.get(url) return Image.open(BytesIO(response.content)).convert("RGB") def save_image(images, image_path_dir, image_name_prefix, image_name_suffix): """ Save the generated images to png files. """ for i in range(images.shape[0]): image_path = os.path.join( image_path_dir, f"{image_name_prefix}{i + 1}-{random.randint(1000, 9999)}-{image_name_suffix}.png", ) print(f"Saving image {i+1} / {images.shape[0]} to: {image_path}") Image.fromarray(images[i]).save(image_path)