Source code for jaclearn.imageaug.executor

#! /usr/bin/env python3
# -*- coding: utf-8 -*-
# File   : executor.py
# Author : Jiayuan Mao
# Email  : maojiayuan@gmail.com
# Date   : 01/19/2018
#
# This file is part of Jacinle.
# Distributed under terms of the MIT license.

import functools
import copy

import jacinle.random as random


[docs] class AugmentorExecutorBase(object):
[docs] def __init__(self, *, random_order=False): self._augmentors = [] self._random_order = random_order
[docs] def f(self, augmentor, **kwargs): partial = functools.partial(augmentor, **kwargs) self._augmentors.append(partial) return self
[docs] def __call__(self, *args, **kwargs): if not self._random_order: augmentors = self._augmentors else: augmentors = copy.copy(self._augmentors) augmentors = random.shuffle(augmentors) return self._augment(augmentors, *args, **kwargs)
def _augment(self, augmentors, *args, **kwargs): raise NotImplementedError()
[docs] class ImageAugmentorExecutor(AugmentorExecutorBase): def _augment(self, augmentors, img): for f in augmentors: img = f(img) return img
[docs] class ImageCoordAugmentorExecutor(AugmentorExecutorBase): def _augment(self, augmentors, img, coord=None): original_coord = coord for f in augmentors: res = f(img, coord=coord) if type(res) is tuple: img, coord = res else: img, coord = res, coord if original_coord is None: return img return img, coord