import albumentations as A class DarkAug(object): """ Extreme dark augmentation aiming at Aachen Day-Night """ def __init__(self) -> None: self.augmentor = A.Compose( [ A.RandomBrightnessContrast( p=0.75, brightness_limit=(-0.6, 0.0), contrast_limit=(-0.5, 0.3) ), A.Blur(p=0.1, blur_limit=(3, 9)), A.MotionBlur(p=0.2, blur_limit=(3, 25)), A.RandomGamma(p=0.1, gamma_limit=(15, 65)), A.HueSaturationValue(p=0.1, val_shift_limit=(-100, -40)), ], p=0.75, ) def __call__(self, x): return self.augmentor(image=x)["image"] class MobileAug(object): """ Random augmentations aiming at images of mobile/handhold devices. """ def __init__(self): self.augmentor = A.Compose( [ A.MotionBlur(p=0.25), A.ColorJitter(p=0.5), A.RandomRain(p=0.1), # random occlusion A.RandomSunFlare(p=0.1), A.JpegCompression(p=0.25), A.ISONoise(p=0.25), ], p=1.0, ) def __call__(self, x): return self.augmentor(image=x)["image"] def build_augmentor(method=None, **kwargs): if method is not None: raise NotImplementedError( "Using of augmentation functions are not supported yet!" ) if method == "dark": return DarkAug() elif method == "mobile": return MobileAug() elif method is None: return None else: raise ValueError(f"Invalid augmentation method: {method}") if __name__ == "__main__": augmentor = build_augmentor("FDA")