fix many resolution problems
This commit is contained in:
parent
a0539c37f5
commit
04066124c2
1
.gitignore
vendored
1
.gitignore
vendored
@ -12,6 +12,7 @@ lena_result.png
|
|||||||
lena_test.py
|
lena_test.py
|
||||||
user_path_config.txt
|
user_path_config.txt
|
||||||
build_chb.py
|
build_chb.py
|
||||||
|
experiment.py
|
||||||
/modules/*.png
|
/modules/*.png
|
||||||
/repositories
|
/repositories
|
||||||
/venv
|
/venv
|
||||||
|
@ -1 +1 @@
|
|||||||
version = '2.1.712'
|
version = '2.1.714'
|
||||||
|
@ -29,7 +29,8 @@ def worker():
|
|||||||
from modules.sdxl_styles import apply_style, apply_wildcards, aspect_ratios, fooocus_expansion
|
from modules.sdxl_styles import apply_style, apply_wildcards, aspect_ratios, fooocus_expansion
|
||||||
from modules.private_logger import log
|
from modules.private_logger import log
|
||||||
from modules.expansion import safe_str
|
from modules.expansion import safe_str
|
||||||
from modules.util import join_prompts, remove_empty_str, HWC3, resize_image, image_is_generated_in_current_ui, make_sure_that_image_is_not_too_large
|
from modules.util import join_prompts, remove_empty_str, HWC3, resize_image, \
|
||||||
|
get_image_shape_ceil, set_image_shape_ceil, get_shape_ceil
|
||||||
from modules.upscaler import perform_upscale
|
from modules.upscaler import perform_upscale
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -287,11 +288,6 @@ def worker():
|
|||||||
progressbar(13, 'Image processing ...')
|
progressbar(13, 'Image processing ...')
|
||||||
|
|
||||||
if 'vary' in goals:
|
if 'vary' in goals:
|
||||||
if not image_is_generated_in_current_ui(uov_input_image, ui_width=width, ui_height=height):
|
|
||||||
uov_input_image = resize_image(uov_input_image, width=width, height=height)
|
|
||||||
print(f'Resolution corrected - users are uploading their own images.')
|
|
||||||
else:
|
|
||||||
print(f'Processing images generated by Fooocus.')
|
|
||||||
if 'subtle' in uov_method:
|
if 'subtle' in uov_method:
|
||||||
denoising_strength = 0.5
|
denoising_strength = 0.5
|
||||||
if 'strong' in uov_method:
|
if 'strong' in uov_method:
|
||||||
@ -299,7 +295,16 @@ def worker():
|
|||||||
if advanced_parameters.overwrite_vary_strength > 0:
|
if advanced_parameters.overwrite_vary_strength > 0:
|
||||||
denoising_strength = advanced_parameters.overwrite_vary_strength
|
denoising_strength = advanced_parameters.overwrite_vary_strength
|
||||||
|
|
||||||
uov_input_image = make_sure_that_image_is_not_too_large(uov_input_image)
|
shape_ceil = get_image_shape_ceil(uov_input_image)
|
||||||
|
if shape_ceil < 1024:
|
||||||
|
print(f'[Vary] Image is resized because it is too small.')
|
||||||
|
shape_ceil = 1024
|
||||||
|
elif shape_ceil > 2048:
|
||||||
|
print(f'[Vary] Image is resized because it is too big.')
|
||||||
|
shape_ceil = 2048
|
||||||
|
|
||||||
|
uov_input_image = set_image_shape_ceil(uov_input_image, shape_ceil)
|
||||||
|
|
||||||
initial_pixels = core.numpy_to_pytorch(uov_input_image)
|
initial_pixels = core.numpy_to_pytorch(uov_input_image)
|
||||||
progressbar(13, 'VAE encoding ...')
|
progressbar(13, 'VAE encoding ...')
|
||||||
initial_latent = core.encode_vae(vae=pipeline.final_vae, pixels=initial_pixels)
|
initial_latent = core.encode_vae(vae=pipeline.final_vae, pixels=initial_pixels)
|
||||||
@ -324,18 +329,12 @@ def worker():
|
|||||||
else:
|
else:
|
||||||
f = 1.0
|
f = 1.0
|
||||||
|
|
||||||
width_f = int(width * f)
|
shape_ceil = get_shape_ceil(H * f, W * f)
|
||||||
height_f = int(height * f)
|
if shape_ceil < 1024:
|
||||||
|
print(f'[Upscale] Image is resized because it is too small.')
|
||||||
if image_is_generated_in_current_ui(uov_input_image, ui_width=width_f, ui_height=height_f):
|
shape_ceil = 1024
|
||||||
uov_input_image = resize_image(uov_input_image, width=int(W * f), height=int(H * f))
|
uov_input_image = set_image_shape_ceil(uov_input_image, shape_ceil)
|
||||||
print(f'Processing images generated by Fooocus.')
|
image_is_super_large = shape_ceil > 2800
|
||||||
else:
|
|
||||||
uov_input_image = resize_image(uov_input_image, width=width_f, height=height_f)
|
|
||||||
print(f'Resolution corrected - users are uploading their own images.')
|
|
||||||
|
|
||||||
H, W, C = uov_input_image.shape
|
|
||||||
image_is_super_large = H * W > 2800 * 2800
|
|
||||||
|
|
||||||
if 'fast' in uov_method:
|
if 'fast' in uov_method:
|
||||||
direct_return = True
|
direct_return = True
|
||||||
|
@ -3,7 +3,7 @@ import numpy as np
|
|||||||
import modules.default_pipeline as pipeline
|
import modules.default_pipeline as pipeline
|
||||||
|
|
||||||
from PIL import Image, ImageFilter
|
from PIL import Image, ImageFilter
|
||||||
from modules.util import resample_image
|
from modules.util import resample_image, set_image_shape_ceil
|
||||||
|
|
||||||
|
|
||||||
inpaint_head = None
|
inpaint_head = None
|
||||||
@ -148,12 +148,10 @@ class InpaintWorker:
|
|||||||
self.interested_image = image[a:b, c:d]
|
self.interested_image = image[a:b, c:d]
|
||||||
|
|
||||||
# resize to make images ready for diffusion
|
# resize to make images ready for diffusion
|
||||||
|
self.interested_image = set_image_shape_ceil(self.interested_image, 1024)
|
||||||
H, W, C = self.interested_image.shape
|
H, W, C = self.interested_image.shape
|
||||||
k = ((1024.0 ** 2.0) / float(H * W)) ** 0.5
|
|
||||||
H = int(np.ceil(float(H) * k / 16.0)) * 16
|
|
||||||
W = int(np.ceil(float(W) * k / 16.0)) * 16
|
|
||||||
self.interested_mask = up255(resample_image(self.interested_mask, W, H), t=127)
|
self.interested_mask = up255(resample_image(self.interested_mask, W, H), t=127)
|
||||||
self.interested_image = resample_image(self.interested_image, W, H)
|
|
||||||
self.interested_fill = fooocus_fill(self.interested_image, self.interested_mask)
|
self.interested_fill = fooocus_fill(self.interested_image, self.interested_mask)
|
||||||
|
|
||||||
# soft pixels
|
# soft pixels
|
||||||
|
@ -1,30 +1,12 @@
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
import datetime
|
import datetime
|
||||||
import random
|
import random
|
||||||
|
import math
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
|
|
||||||
|
|
||||||
def image_is_generated_in_current_ui(image, ui_width, ui_height):
|
|
||||||
H, W, C = image.shape
|
|
||||||
|
|
||||||
if H < ui_height:
|
|
||||||
return False
|
|
||||||
|
|
||||||
if W < ui_width:
|
|
||||||
return False
|
|
||||||
|
|
||||||
# k1 = float(H) / float(W)
|
|
||||||
# k2 = float(ui_height) / float(ui_width)
|
|
||||||
# d = abs(k1 - k2)
|
|
||||||
#
|
|
||||||
# if d > 0.01:
|
|
||||||
# return False
|
|
||||||
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
LANCZOS = (Image.Resampling.LANCZOS if hasattr(Image, 'Resampling') else Image.LANCZOS)
|
LANCZOS = (Image.Resampling.LANCZOS if hasattr(Image, 'Resampling') else Image.LANCZOS)
|
||||||
|
|
||||||
|
|
||||||
@ -92,16 +74,22 @@ def resize_image(im, width, height, resize_mode=1):
|
|||||||
return np.array(res)
|
return np.array(res)
|
||||||
|
|
||||||
|
|
||||||
def make_sure_that_image_is_not_too_large(x):
|
def get_shape_ceil(h, w):
|
||||||
H, W, C = x.shape
|
return math.ceil(((h * w) ** 0.5) / 64.0) * 64.0
|
||||||
k = float(2048 * 2048) / float(H * W)
|
|
||||||
k = k ** 0.5
|
|
||||||
if k < 1:
|
def get_image_shape_ceil(im):
|
||||||
H_new = int(H * k)
|
H, W, _ = im.shape
|
||||||
W_new = int(W * k)
|
return get_shape_ceil(H, W)
|
||||||
print(f'Image is too large - resizing from ({H}, {W}) to ({H_new}, {W_new}).')
|
|
||||||
x = resize_image(x, width=W_new, height=H_new, resize_mode=0)
|
|
||||||
return x
|
def set_image_shape_ceil(im, shape_ceil):
|
||||||
|
H, W, _ = im.shape
|
||||||
|
shape_ceil_before = get_shape_ceil(H, W)
|
||||||
|
k = float(shape_ceil) / shape_ceil_before
|
||||||
|
H = int(round(float(H) * k / 64.0) * 64)
|
||||||
|
W = int(round(float(W) * k / 64.0) * 64)
|
||||||
|
return resample_image(im, width=W, height=H)
|
||||||
|
|
||||||
|
|
||||||
def HWC3(x):
|
def HWC3(x):
|
||||||
|
Loading…
Reference in New Issue
Block a user