import sys import os, shutil import time import logging from watchdog.observers import Observer from watchdog.events import FileSystemEventHandler import numpy as np from tensorflow.keras.models import load_model from keras.preprocessing.image import load_img, ImageDataGenerator, array_to_img, img_to_array class fileMmonitor(FileSystemEventHandler): def predict(self, model, image): img_size = int(params['image_size']) mdl = load_model(model) target_folder = params['target_folder'] file_name = os.path.basename(image) img = load_img(image, target_size=(img_size,img_size)) img = img_to_array(img) img = img.reshape(1,img_size,img_size,3) res = mdl.predict(img) #print(res) cat = np.argmax(res) print(cat) cat_path = os.path.join(target_folder,str(cat)) #dir_name = os.path.dirname(cat_path) if not os.path.exists(cat_path): print("cat path created") os.makedirs(cat_path) try: print(image) print(os.path.join(cat_path, image)) shutil.move(image, os.path.join(cat_path, file_name)) except Exception as err: print("An error was handled", err) #print([key for key in class_labels][np.argmax(res)]) def on_created(self, event): #print(type(event)) print(event.src_path) print(event.is_directory) print(event.event_type) fle = event.src_path if fle.lower().endswith('jpg') or fle.lower().endswith('png') or fle.lower().endswith('jpeg'): self.predict(params['model'], fle) # #return super().on_created(event) # for fle in os.listdir(folder_to_watch): # if fle.lower().endswith('jpg') or fle.lower().endswith('png') or fle.lower().endswith('jpeg'): # #print(fle); # pass; # read params from dat file fle = open("params.dat") params = {} for line in fle: if line.startswith('#'): continue #print(line.strip()) key, val = line.split('=') params[key.strip()] = val.strip() #print(params) print(params['monitering_folder']) folder_to_watch = params['monitering_folder'] observer = Observer() handler = fileMmonitor() observer.schedule(handler, folder_to_watch, recursive=True) observer.start() try: while True: time.sleep(2) except KeyboardInterrupt: observer.stop() observer.join()