81 lines
2.4 KiB
Python
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()
|