diff --git a/params.dat b/params.dat new file mode 100644 index 0000000..cfb951a --- /dev/null +++ b/params.dat @@ -0,0 +1,5 @@ +# parameters for watchdog +model = /Users/mohamednouffer/workspace/akira_san/image_classifier/dataset/raw_data/arranged/mymodel2.h5 +monitering_folder = /Users/mohamednouffer/workspace/akira_san/image_classifier/dataset/raw_data/scanned/ +target_folder = /Users/mohamednouffer/workspace/akira_san/image_classifier/dataset/raw_data/categorised/ +image_size = 100 diff --git a/watcher.py b/watcher.py new file mode 100644 index 0000000..4e93431 --- /dev/null +++ b/watcher.py @@ -0,0 +1,80 @@ +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()