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