Files
SumasenTrainer/watcher.py
2021-12-14 15:40:06 +05:30

81 lines
2.4 KiB
Python

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()