""" Donut Copyright (c) 2022-present NAVER Corp. MIT License """ import numpy as np from synthtiger import components from elements.content import Content from elements.paper import Paper class Document: def __init__(self, config): self.fullscreen = config.get("fullscreen", 0.5) self.landscape = config.get("landscape", 0.5) self.short_size = config.get("short_size", [480, 1024]) self.aspect_ratio = config.get("aspect_ratio", [1, 2]) self.paper = Paper(config.get("paper", {})) self.content = Content(config.get("content", {})) self.effect = components.Iterator( [ components.Switch(components.ElasticDistortion()), components.Switch(components.AdditiveGaussianNoise()), components.Switch( components.Selector( [ components.Perspective(), components.Perspective(), components.Perspective(), components.Perspective(), components.Perspective(), components.Perspective(), components.Perspective(), components.Perspective(), ] ) ), ], **config.get("effect", {}), ) def generate(self, size): width, height = size fullscreen = np.random.rand() < self.fullscreen if not fullscreen: landscape = np.random.rand() < self.landscape max_size = width if landscape else height short_size = np.random.randint( min(width, height, self.short_size[0]), min(width, height, self.short_size[1]) + 1, ) aspect_ratio = np.random.uniform( min(max_size / short_size, self.aspect_ratio[0]), min(max_size / short_size, self.aspect_ratio[1]), ) long_size = int(short_size * aspect_ratio) size = (long_size, short_size) if landscape else (short_size, long_size) text_layers, texts = self.content.generate(size) paper_layer = self.paper.generate(size) self.effect.apply([*text_layers, paper_layer]) return paper_layer, text_layers, texts