mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
feat(nodes): add prototype heuristic image resize node
Uses the fancy cnet resize that retains edges.
This commit is contained in:
parent
2d7b8c2a1b
commit
e822897b1c
@ -35,15 +35,16 @@ from invokeai.app.invocations.model import ModelIdentifierField
|
|||||||
from invokeai.app.invocations.primitives import ImageOutput
|
from invokeai.app.invocations.primitives import ImageOutput
|
||||||
from invokeai.app.invocations.util import validate_begin_end_step, validate_weights
|
from invokeai.app.invocations.util import validate_begin_end_step, validate_weights
|
||||||
from invokeai.app.services.shared.invocation_context import InvocationContext
|
from invokeai.app.services.shared.invocation_context import InvocationContext
|
||||||
from invokeai.app.util.controlnet_utils import CONTROLNET_MODE_VALUES, CONTROLNET_RESIZE_VALUES
|
from invokeai.app.util.controlnet_utils import CONTROLNET_MODE_VALUES, CONTROLNET_RESIZE_VALUES, heuristic_resize
|
||||||
from invokeai.backend.image_util.canny import get_canny_edges
|
from invokeai.backend.image_util.canny import get_canny_edges
|
||||||
from invokeai.backend.image_util.depth_anything import DepthAnythingDetector
|
from invokeai.backend.image_util.depth_anything import DepthAnythingDetector
|
||||||
from invokeai.backend.image_util.dw_openpose import DWOpenposeDetector
|
from invokeai.backend.image_util.dw_openpose import DWOpenposeDetector
|
||||||
from invokeai.backend.image_util.hed import HEDProcessor
|
from invokeai.backend.image_util.hed import HEDProcessor
|
||||||
from invokeai.backend.image_util.lineart import LineartProcessor
|
from invokeai.backend.image_util.lineart import LineartProcessor
|
||||||
from invokeai.backend.image_util.lineart_anime import LineartAnimeProcessor
|
from invokeai.backend.image_util.lineart_anime import LineartAnimeProcessor
|
||||||
|
from invokeai.backend.image_util.util import np_to_pil, pil_to_np
|
||||||
|
|
||||||
from .baseinvocation import BaseInvocation, BaseInvocationOutput, invocation, invocation_output
|
from .baseinvocation import BaseInvocation, BaseInvocationOutput, Classification, invocation, invocation_output
|
||||||
|
|
||||||
|
|
||||||
class ControlField(BaseModel):
|
class ControlField(BaseModel):
|
||||||
@ -634,3 +635,27 @@ class DWOpenposeImageProcessorInvocation(ImageProcessorInvocation):
|
|||||||
resolution=self.image_resolution,
|
resolution=self.image_resolution,
|
||||||
)
|
)
|
||||||
return processed_image
|
return processed_image
|
||||||
|
|
||||||
|
|
||||||
|
@invocation(
|
||||||
|
"heuristic_resize",
|
||||||
|
title="Heuristic Resize",
|
||||||
|
tags=["image, controlnet"],
|
||||||
|
category="image",
|
||||||
|
version="1.0.0",
|
||||||
|
classification=Classification.Prototype,
|
||||||
|
)
|
||||||
|
class HeuristicResizeInvocation(BaseInvocation):
|
||||||
|
"""Resize an image using a heuristic method. Preserves edge maps."""
|
||||||
|
|
||||||
|
image: ImageField = InputField(description="The image to resize")
|
||||||
|
width: int = InputField(default=512, gt=0, description="The width to resize to (px)")
|
||||||
|
height: int = InputField(default=512, gt=0, description="The height to resize to (px)")
|
||||||
|
|
||||||
|
def invoke(self, context: InvocationContext) -> ImageOutput:
|
||||||
|
image = context.images.get_pil(self.image.image_name, "RGB")
|
||||||
|
np_img = pil_to_np(image)
|
||||||
|
np_resized = heuristic_resize(np_img, (self.width, self.height))
|
||||||
|
resized = np_to_pil(np_resized)
|
||||||
|
image_dto = context.images.save(image=resized)
|
||||||
|
return ImageOutput.build(image_dto)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user