feat: Mask To Segs - fill_inside option

This commit is contained in:
Dr.Lt.Data
2023-11-28 03:00:04 +09:00
parent d0f990becf
commit cc76a1076e
2 changed files with 14 additions and 7 deletions
+7 -2
View File
@@ -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],
]
+7 -5
View File
@@ -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: