mirror of
https://github.com/vladmandic/automatic
synced 2026-08-26 15:16:01 +02:00
Merge pull request #4740 from awsr/image-type-fix
(minor) PIL Image.Image type fix
This commit is contained in:
+1
-1
@@ -24,7 +24,7 @@ options = {
|
||||
styles = []
|
||||
|
||||
|
||||
def pil_to_b64(img: Image, size: int, quality: int):
|
||||
def pil_to_b64(img: Image.Image, size: int, quality: int):
|
||||
img = img.convert('RGB')
|
||||
img = img.resize((size, size))
|
||||
buffer = io.BytesIO()
|
||||
|
||||
+1
-1
@@ -33,7 +33,7 @@ class Exif: # pylint: disable=single-string-used-for-slots
|
||||
return self.__dict__[attr]
|
||||
return self.exif.get(attr, None)
|
||||
|
||||
def load(self, img: Image):
|
||||
def load(self, img: Image.Image):
|
||||
img.load() # exif may not be ready
|
||||
exif_dict = {}
|
||||
try:
|
||||
|
||||
+3
-3
@@ -35,7 +35,7 @@ class Result():
|
||||
self.steps = requested
|
||||
|
||||
|
||||
def detect_blur(image: Image):
|
||||
def detect_blur(image: Image.Image):
|
||||
# based on <https://github.com/karthik9319/Blur-Detection/>
|
||||
bw = ImageOps.grayscale(image)
|
||||
cx, cy = image.size[0] // 2, image.size[1] // 2
|
||||
@@ -49,7 +49,7 @@ def detect_blur(image: Image):
|
||||
return mean
|
||||
|
||||
|
||||
def detect_dynamicrange(image: Image):
|
||||
def detect_dynamicrange(image: Image.Image):
|
||||
# based on <https://towardsdatascience.com/measuring-enhancing-image-quality-attributes-234b0f250e10>
|
||||
data = np.asarray(image)
|
||||
image = np.float32(data)
|
||||
@@ -68,7 +68,7 @@ def detect_dynamicrange(image: Image):
|
||||
return round(res, 2)
|
||||
|
||||
|
||||
def detect_simmilar(image: Image):
|
||||
def detect_simmilar(image: Image.Image):
|
||||
img = image.resize((options.process.similarity_size, options.process.similarity_size))
|
||||
img = ImageOps.grayscale(img)
|
||||
data = np.array(img)
|
||||
|
||||
@@ -21,7 +21,7 @@ class MarigoldDetector:
|
||||
|
||||
def __call__(
|
||||
self,
|
||||
input_image: Image,
|
||||
input_image: Image.Image,
|
||||
denoising_steps: int = 10,
|
||||
ensemble_size: int = 10,
|
||||
processing_res: int = 768,
|
||||
|
||||
@@ -105,7 +105,7 @@ class MarigoldPipeline(DiffusionPipeline):
|
||||
@torch.no_grad()
|
||||
def __call__(
|
||||
self,
|
||||
input_image: Image,
|
||||
input_image: Image.Image,
|
||||
denoising_steps: int = 10,
|
||||
ensemble_size: int = 10,
|
||||
processing_res: int = 768,
|
||||
|
||||
@@ -304,7 +304,7 @@ class Processor:
|
||||
display(e, 'Control Processor load')
|
||||
return f'Processor load filed: {processor_id}'
|
||||
|
||||
def __call__(self, image_input: Image, mode: str = 'RGB', width: int = 0, height: int = 0, resize_mode: int = 0, resize_name: str = 'None', scale_tab: int = 1, scale_by: float = 1.0, local_config: dict | None = None):
|
||||
def __call__(self, image_input: Image.Image, mode: str = 'RGB', width: int = 0, height: int = 0, resize_mode: int = 0, resize_name: str = 'None', scale_tab: int = 1, scale_by: float = 1.0, local_config: dict | None = None):
|
||||
"""Run the preprocessor on an input image and return the processed control map.
|
||||
|
||||
Args:
|
||||
|
||||
@@ -49,7 +49,7 @@ def check_tmp_file(gradio, filename):
|
||||
return ok
|
||||
|
||||
|
||||
def pil_to_temp_file(self, img: Image, dir: str, format="png") -> str: # pylint: disable=redefined-builtin,unused-argument
|
||||
def pil_to_temp_file(self, img: Image.Image, dir: str, format="png") -> str: # pylint: disable=redefined-builtin,unused-argument
|
||||
"""
|
||||
# original gradio implementation
|
||||
bytes_data = gr.processing_utils.encode_pil_to_bytes(img, format)
|
||||
|
||||
+1
-1
@@ -257,7 +257,7 @@ def run_segment(input_image: gr.Image, input_mask: np.ndarray):
|
||||
return combined_mask
|
||||
|
||||
|
||||
def run_rembg(input_image: Image, input_mask: np.ndarray):
|
||||
def run_rembg(input_image: Image.Image, input_mask: np.ndarray):
|
||||
try:
|
||||
import rembg
|
||||
except Exception as e:
|
||||
|
||||
@@ -106,7 +106,7 @@ def apply_color_correction(correction, original_image, method='histogram'):
|
||||
return fn(correction, original_image)
|
||||
|
||||
|
||||
def apply_overlay(image: Image, paste_loc, index, overlays):
|
||||
def apply_overlay(image: Image.Image, paste_loc, index, overlays):
|
||||
if overlays is None or index >= len(overlays):
|
||||
return image
|
||||
debug(f'Apply overlay: image={image} loc={paste_loc} index={index} overlays={overlays}')
|
||||
|
||||
@@ -5,7 +5,7 @@ from torch.nn import functional as F
|
||||
from ..common.half_precision_fixes import safe_pad_operation, safe_interpolate_operation
|
||||
from torchvision.transforms import ToTensor, ToPILImage
|
||||
|
||||
def adain_color_fix(target: Image, source: Image):
|
||||
def adain_color_fix(target: Image.Image, source: Image.Image):
|
||||
# Convert images to tensors
|
||||
to_tensor = ToTensor()
|
||||
target_tensor = to_tensor(target).unsqueeze(0)
|
||||
@@ -20,7 +20,7 @@ def adain_color_fix(target: Image, source: Image):
|
||||
|
||||
return result_image
|
||||
|
||||
def wavelet_color_fix(target: Image, source: Image):
|
||||
def wavelet_color_fix(target: Image.Image, source: Image.Image):
|
||||
# Convert images to tensors
|
||||
to_tensor = ToTensor()
|
||||
target_tensor = to_tensor(target).unsqueeze(0)
|
||||
|
||||
@@ -13,7 +13,7 @@ class UpscalerDCC(Upscaler):
|
||||
UpscalerData("DCC Interpolation", None, self),
|
||||
]
|
||||
|
||||
def do_upscale(self, img: Image, selected_model=None):
|
||||
def do_upscale(self, img: Image.Image, selected_model=None):
|
||||
import math
|
||||
import numpy as np
|
||||
from modules.postprocess.dcc import DCC
|
||||
@@ -41,7 +41,7 @@ class UpscalerVIPS(Upscaler):
|
||||
UpscalerData("VIPS MagicKernelSharp 2021", None, self),
|
||||
]
|
||||
|
||||
def do_upscale(self, img: Image, selected_model=None):
|
||||
def do_upscale(self, img: Image.Image, selected_model=None):
|
||||
if selected_model is None:
|
||||
return img
|
||||
from installer import install
|
||||
@@ -85,7 +85,7 @@ class UpscalerHQX(Upscaler):
|
||||
UpscalerData("HQX Interpolation", None, self),
|
||||
]
|
||||
|
||||
def do_upscale(self, img: Image, selected_model=None):
|
||||
def do_upscale(self, img: Image.Image, selected_model=None):
|
||||
import numpy as np
|
||||
from modules.postprocess.hqx import hqx
|
||||
t0 = time.time()
|
||||
@@ -106,7 +106,7 @@ class UpscalerICBI(Upscaler):
|
||||
UpscalerData("ICB Interpolation", None, self),
|
||||
]
|
||||
|
||||
def do_upscale(self, img: Image, selected_model=None):
|
||||
def do_upscale(self, img: Image.Image, selected_model=None):
|
||||
import numpy as np
|
||||
from modules.postprocess.icbi import icbi
|
||||
t0 = time.time()
|
||||
|
||||
@@ -31,7 +31,7 @@ class UpscalerResize(Upscaler):
|
||||
UpscalerData("Resize Sharpfin Lanczos3", None, self),
|
||||
]
|
||||
|
||||
def do_upscale(self, img: Image, selected_model=None):
|
||||
def do_upscale(self, img: Image.Image, selected_model=None):
|
||||
if selected_model is None:
|
||||
return img
|
||||
elif selected_model == "Resize Nearest":
|
||||
@@ -74,7 +74,7 @@ class UpscalerLatent(Upscaler):
|
||||
UpscalerData("Latent Bicubic antialias", None, self),
|
||||
]
|
||||
|
||||
def do_upscale(self, img: Image, selected_model=None):
|
||||
def do_upscale(self, img: Image.Image, selected_model=None):
|
||||
import torch
|
||||
import torch.nn.functional as F
|
||||
if isinstance(img, torch.Tensor) and (len(img.shape) == 4):
|
||||
|
||||
@@ -37,7 +37,7 @@ class UpscalerSpandrel(Upscaler):
|
||||
log.debug(f'Upscale: name="{self.selected}" input={img.size} output={upscaled.size} time={t1 - t0:.2f}')
|
||||
return upscaled
|
||||
|
||||
def do_upscale(self, img: Image, selected_model=None):
|
||||
def do_upscale(self, img: Image.Image, selected_model=None):
|
||||
from installer import install
|
||||
if selected_model is None:
|
||||
return img
|
||||
|
||||
@@ -15,7 +15,7 @@ class UpscalerAsymmetricVAE(Upscaler):
|
||||
UpscalerData("Asymmetric VAE v2", None, self),
|
||||
]
|
||||
|
||||
def do_upscale(self, img: Image, selected_model=None):
|
||||
def do_upscale(self, img: Image.Image, selected_model=None):
|
||||
if selected_model is None:
|
||||
return img
|
||||
import diffusers
|
||||
@@ -55,7 +55,7 @@ class UpscalerWanUpscale(Upscaler):
|
||||
UpscalerData("WAN Asymmetric Upscale", None, self),
|
||||
]
|
||||
|
||||
def do_upscale(self, img: Image, selected_model=None):
|
||||
def do_upscale(self, img: Image.Image, selected_model=None):
|
||||
if selected_model is None:
|
||||
return img
|
||||
import torch.nn.functional as FN
|
||||
|
||||
@@ -34,7 +34,7 @@ class DiffusionHeatMapHooker(AggregateHooker):
|
||||
locate_middle = load_heads or save_heads
|
||||
self.locator = UNetCrossAttentionLocator(restrict={0} if low_memory else None, locate_middle_block=locate_middle)
|
||||
self.last_prompt: str = ''
|
||||
self.last_image: Image = None
|
||||
self.last_image: Image.Image = None
|
||||
self.time_idx = 0
|
||||
self._gen_idx = 0
|
||||
|
||||
|
||||
Reference in New Issue
Block a user