import os import inotify.adapters import augment from imtool import read_bounding_boxes, crop from common import defaults, mkdir def handle_png(event): (_, type_names, path, filename) = event bbs = read_bounding_boxes(os.path.join(path, filename.replace('.png', '.txt'))) crop(os.path.join(path, filename), bbs) def handle_csv(event): (_, type_names, path, filename) = event print('csv changed, will run vendor') import vendor vendor.from_csv(os.path.join(path, filename)) augment.process() handlers = { '.png': handle_png, '.csv': handle_csv } def watch(dirs): i = inotify.adapters.Inotify() [i.add_watch(d) for d in dirs] print(f'watching {dirs}') for event in i.event_gen(yield_nones=False): (_, type_names, path, filename) = event for k in handlers.keys(): if filename.endswith(k) and type_names[0] in ['IN_CLOSE_WRITE']: print(f"PATH=[{path}] FILENAME=[{filename}] EVENT_TYPES={type_names}") try: handlers[k](event) except Exception as e: print(f'Error in {k} handler: {e}') if __name__ == '__main__': dirs = ['./data', defaults.IMAGES_PATH, defaults.AUGMENTED_IMAGES_PATH] mkdir.make_dirs(dirs) watch(dirs)