| import collections |
|
|
| from annotator.mmpkg.mmcv.utils import build_from_cfg |
|
|
| from ..builder import PIPELINES |
|
|
|
|
| @PIPELINES.register_module() |
| class Compose(object): |
| """Compose multiple transforms sequentially. |
| |
| Args: |
| transforms (Sequence[dict | callable]): Sequence of transform object or |
| config dict to be composed. |
| """ |
|
|
| def __init__(self, transforms): |
| assert isinstance(transforms, collections.abc.Sequence) |
| self.transforms = [] |
| for transform in transforms: |
| if isinstance(transform, dict): |
| transform = build_from_cfg(transform, PIPELINES) |
| self.transforms.append(transform) |
| elif callable(transform): |
| self.transforms.append(transform) |
| else: |
| raise TypeError('transform must be callable or a dict') |
|
|
| def __call__(self, data): |
| """Call function to apply transforms sequentially. |
| |
| Args: |
| data (dict): A result dict contains the data to transform. |
| |
| Returns: |
| dict: Transformed data. |
| """ |
|
|
| for t in self.transforms: |
| data = t(data) |
| if data is None: |
| return None |
| return data |
|
|
| def __repr__(self): |
| format_string = self.__class__.__name__ + '(' |
| for t in self.transforms: |
| format_string += '\n' |
| format_string += f' {t}' |
| format_string += '\n)' |
| return format_string |
|
|