Files
CavinHuang-comfyui-nodes-docs/docs/ImpactSEGSLabelFilter.md
2024-05-26 20:35:16 +08:00

2.9 KiB

Documentation

SEGSLabelFilter节点旨在根据预定义的标签集处理和过滤段。它允许包含特定的段类型,并处理将段分类为两组:符合指定标签的段和不符合的段。此节点在ImpactPack实用程序套件中用于进一步分析或处理的段选择中扮演关键角色。

Input types

Required

  • segs
    • 'segs'参数至关重要,因为它代表了要被过滤的段集合。它通过确定处理的输入数据集直接影响节点的操作。
    • Comfy dtype: SEGS
    • Python dtype: Tuple[Any, List[impact.core.SEG]]
  • preset
    • 'preset'参数指定节点将用于过滤段的预设检测标签列表。它是定义过滤标准的关键组成部分。
    • Comfy dtype: STRING
    • Python dtype: str
  • labels
    • 'labels'参数是一个多行字符串,允许用户列出他们希望允许的段类型。它之所以重要,是因为它根据用户输入设置了过滤标准。
    • Comfy dtype: STRING
    • Python dtype: str

Output types

  • filtered_SEGS
    • 'filtered_SEGS'输出包含符合指定标签的段,这是过滤过程的主要结果。
    • Comfy dtype: SEGS
    • Python dtype: Tuple[Any, List[impact.core.SEG]]
  • remained_SEGS
    • 'remained_SEGS'输出包括不符合指定标签的段,作为节点操作的次要结果。
    • Comfy dtype: SEGS
    • Python dtype: Tuple[Any, List[impact.core.SEG]]

Usage tips

  • Infra type: CPU

Source code

class SEGSLabelFilter:

    @classmethod
    def INPUT_TYPES(s):
        return {'required': {'segs': ('SEGS',), 'preset': (['all'] + defs.detection_labels,), 'labels': ('STRING', {'multiline': True, 'placeholder': 'List the types of segments to be allowed, separated by commas'})}}
    RETURN_TYPES = ('SEGS', 'SEGS')
    RETURN_NAMES = ('filtered_SEGS', 'remained_SEGS')
    FUNCTION = 'doit'
    CATEGORY = 'ImpactPack/Util'

    @staticmethod
    def filter(segs, labels):
        labels = set([label.strip() for label in labels])
        if 'all' in labels:
            return (segs, (segs[0], []))
        else:
            res_segs = []
            remained_segs = []
            for x in segs[1]:
                if x.label in labels:
                    res_segs.append(x)
                elif 'eyes' in labels and x.label in ['left_eye', 'right_eye']:
                    res_segs.append(x)
                elif 'eyebrows' in labels and x.label in ['left_eyebrow', 'right_eyebrow']:
                    res_segs.append(x)
                elif 'pupils' in labels and x.label in ['left_pupil', 'right_pupil']:
                    res_segs.append(x)
                else:
                    remained_segs.append(x)
        return ((segs[0], res_segs), (segs[0], remained_segs))

    def doit(self, segs, preset, labels):
        labels = labels.split(',')
        return SEGSLabelFilter.filter(segs, labels)