Skip to content

Instantly share code, notes, and snippets.

@KolevDarko
Created March 29, 2022 13:35
Show Gist options
  • Save KolevDarko/4a897b55970ad50b4c8c0ddd9e3cd0a7 to your computer and use it in GitHub Desktop.
Save KolevDarko/4a897b55970ad50b4c8c0ddd9e3cd0a7 to your computer and use it in GitHub Desktop.
class GeneratorController:
def __init__(self, base_dir, img_dir, meta_dir, weights_map, traits_order,
percent_appearance=None, matching_traits=None):
self.base_dir = base_dir
self.img_dir = img_dir
self.meta_dir = meta_dir
self.weights_map = weights_map
self.traits_order = traits_order
self.percent_appearance = percent_appearance or {}
self.matching_traits = matching_traits or {}
def generate_all_images(self, total_count, start=0):
i = start
unique_names = set()
while i < start + total_count:
metadata = {}
unique_name = None
print(f'Generating image {i}')
for trait_type in self.traits_order:
print(f'Trait {trait_type}')
if trait_type in self.percent_appearance:
if self.should_skip(trait_type):
continue
if trait_type in self.matching_traits:
category_id, trait_val = self.pick_matching_trait(trait_type, metadata)
else:
category_id = self.get_random_category()
trait_val = self.gen_random_trait_by_category(category_id, trait_type)
if not unique_name:
unique_name = trait_val
else:
unique_name += f'-{trait_val}'
metadata[trait_type] = {
'value': trait_val,
'category': category_id
}
if unique_name in unique_names:
continue
else:
i += 1
unique_names.add(unique_name)
image_name = f'{i}.png'
result_img = self.create_image(metadata)
result_img.save(f'{self.img_dir}/{image_name}')
self.store_metadata(i, metadata)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment