feat: Mask To Segs - fill_inside option
This commit is contained in:
@@ -892,7 +892,7 @@ class ONNXDetector:
|
||||
pass
|
||||
|
||||
|
||||
def mask_to_segs(mask, combined, crop_factor, bbox_fill, drop_size=1, label='A', crop_min_size=None, detailer_hook=None):
|
||||
def mask_to_segs(mask, combined, crop_factor, bbox_fill, drop_size=1, label='A', crop_min_size=None, detailer_hook=None, is_contour=True):
|
||||
drop_size = max(drop_size, 1)
|
||||
if mask is None:
|
||||
print("[mask_to_segs] Cannot operate: MASK is empty.")
|
||||
@@ -961,8 +961,13 @@ def mask_to_segs(mask, combined, crop_factor, bbox_fill, drop_size=1, label='A',
|
||||
crop_region = detailer_hook.post_crop_region(mask_i.shape[1], mask_i.shape[0], bbox, crop_region)
|
||||
|
||||
if w > drop_size and h > drop_size:
|
||||
if is_contour:
|
||||
mask_src = separated_mask
|
||||
else:
|
||||
mask_src = mask_i
|
||||
|
||||
cropped_mask = np.array(
|
||||
separated_mask[
|
||||
mask_src[
|
||||
crop_region[1]: crop_region[3],
|
||||
crop_region[0]: crop_region[2],
|
||||
]
|
||||
|
||||
@@ -911,6 +911,7 @@ class MaskToSEGS:
|
||||
"crop_factor": ("FLOAT", {"default": 3.0, "min": 1.0, "max": 100, "step": 0.1}),
|
||||
"bbox_fill": ("BOOLEAN", {"default": False, "label_on": "enabled", "label_off": "disabled"}),
|
||||
"drop_size": ("INT", {"min": 1, "max": MAX_RESOLUTION, "step": 1, "default": 10}),
|
||||
"fill_inside": ("BOOLEAN", {"default": False, "label_on": "enabled", "label_off": "disabled"}),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -919,11 +920,11 @@ class MaskToSEGS:
|
||||
|
||||
CATEGORY = "ImpactPack/Operation"
|
||||
|
||||
def doit(self, mask, combined, crop_factor, bbox_fill, drop_size):
|
||||
def doit(self, mask, combined, crop_factor, bbox_fill, drop_size, fill_inside=False):
|
||||
if len(mask.shape) == 3:
|
||||
mask = mask.squeeze(0)
|
||||
|
||||
result = core.mask_to_segs(mask, combined, crop_factor, bbox_fill, drop_size)
|
||||
result = core.mask_to_segs(mask, combined, crop_factor, bbox_fill, drop_size, is_contour=fill_inside)
|
||||
return (result, )
|
||||
|
||||
|
||||
@@ -936,6 +937,7 @@ class MaskToSEGS_for_AnimateDiff:
|
||||
"crop_factor": ("FLOAT", {"default": 3.0, "min": 1.0, "max": 100, "step": 0.1}),
|
||||
"bbox_fill": ("BOOLEAN", {"default": False, "label_on": "enabled", "label_off": "disabled"}),
|
||||
"drop_size": ("INT", {"min": 1, "max": MAX_RESOLUTION, "step": 1, "default": 10}),
|
||||
"fill_inside": ("BOOLEAN", {"default": False, "label_on": "enabled", "label_off": "disabled"}),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -944,11 +946,11 @@ class MaskToSEGS_for_AnimateDiff:
|
||||
|
||||
CATEGORY = "ImpactPack/Operation"
|
||||
|
||||
def doit(self, mask, combined, crop_factor, bbox_fill, drop_size):
|
||||
def doit(self, mask, combined, crop_factor, bbox_fill, drop_size, fill_inside=False):
|
||||
if len(mask.shape) == 3:
|
||||
mask = mask.squeeze(0)
|
||||
|
||||
segs = core.mask_to_segs(mask, combined, crop_factor, bbox_fill, drop_size)
|
||||
segs = core.mask_to_segs(mask, combined, crop_factor, bbox_fill, drop_size, is_contour=fill_inside)
|
||||
|
||||
all_masks = SEGSToMaskList().doit(segs)[0]
|
||||
|
||||
@@ -958,7 +960,7 @@ class MaskToSEGS_for_AnimateDiff:
|
||||
|
||||
result_mask = utils.to_binary_mask(result_mask, 0.1)
|
||||
|
||||
return MaskToSEGS().doit(result_mask, False, crop_factor, False, drop_size)
|
||||
return MaskToSEGS().doit(result_mask, False, crop_factor, False, drop_size, fill_inside)
|
||||
|
||||
|
||||
class ControlNetApplySEGS:
|
||||
|
||||
Reference in New Issue
Block a user