import torch import os import numpy as np from hashlib import md5 def hash_img(img): return md5(np.array(img).tobytes()).hexdigest() def hash_any(obj): return md5(str(obj).encode()).hexdigest() def refine_lr_with_sd(pil_image_list, concept_img_list, control_image_list, prompt_list, pipe=None, strength=0.35, neg_prompt_list="", output_size=(512, 512), controlnet_conditioning_scale=1.): with torch.no_grad(): images = pipe( image=pil_image_list, ip_adapter_image=concept_img_list, prompt=prompt_list, neg_prompt=neg_prompt_list, num_inference_steps=50, strength=strength, height=output_size[0], width=output_size[1], control_image=control_image_list, guidance_scale=5.0, controlnet_conditioning_scale=controlnet_conditioning_scale, generator=torch.manual_seed(233), ).images return images SR_cache = None def run_sr_fast(source_pils, scale=4): from PIL import Image from scripts.upsampler import RealESRGANer import numpy as np global SR_cache if SR_cache is not None: upsampler = SR_cache else: upsampler = RealESRGANer( scale=4, onnx_path="ckpt/realesrgan-x4.onnx", tile=0, tile_pad=10, pre_pad=0, half=True, gpu_id=0, ) ret_pils = [] for idx, img_pils in enumerate(source_pils): np_in = isinstance(img_pils, np.ndarray) assert isinstance(img_pils, (Image.Image, np.ndarray)) img = np.array(img_pils) output, _ = upsampler.enhance(img, outscale=scale) if np_in: ret_pils.append(output) else: ret_pils.append(Image.fromarray(output)) if SR_cache is None: SR_cache = upsampler return ret_pils