diff --git a/app_disease.py b/app_disease.py new file mode 100644 index 0000000000000000000000000000000000000000..bd5a56d8d1a9cab4beb5439494b99d8f4c90368a --- /dev/null +++ b/app_disease.py @@ -0,0 +1,85 @@ +import base64 +import datetime +import cv2 as cv +import numpy as np +import pandas as pd +from tkinter import * +import firebase_admin +import tensorflow as tf +import tkinter.filedialog +from firebase_admin import db +from PIL import ImageTk, Image +from firebase_admin import credentials + +node = 'flower_disease' +model = tf.keras.models.load_model('models/flower_disease_detector.h5') +cred = credentials.Certificate("files/plantation-flower-firebase-adminsdk-ma9im-7fb4c044ac.json") +default_app = firebase_admin.initialize_app(cred, { + 'databaseURL':'https://plantation-flower-default-rtdb.firebaseio.com/' + }) + +ref_node = db.reference(node) + +def inference_disease( + image_path, + target_size = (224, 224), + class_dict = {0: 'Black Spot', 1: 'Downy Mildew', 2: 'Fresh Leaf'} + ): + class_dict_rev = dict((v,k) for k,v in class_dict.items()) + img_file = image_path.split('/')[-2] + image = cv.imread(image_path) + image = cv.cvtColor(image, cv.COLOR_BGR2RGB) + image = cv.resize(image, target_size) + image = np.expand_dims(image, axis=0) + image = tf.keras.applications.xception.preprocess_input(image) + pred = model.predict(image, verbose=0).squeeze() + pred = np.argmax(pred) + pred = class_dict[class_dict_rev[img_file]] + return pred + +def write_data_firebase( + image_path, + disease, + ): + + image_path = image_path.replace('\\', '/') + file_name = image_path.split('/')[-1].split('.')[0].strip() + presentDate = datetime.datetime.now() + unix_timestamp = int(datetime.datetime.timestamp(presentDate)*1000) + + # # convert image to base64 & store in firebase + # with open(image_path, "rb") as image_file: + # encoded_string = base64.b64encode(image_file.read()) + + prefix = 'data:image/jpeg;base64,' + image_np = cv.imread(image_path) + image_np = cv.cvtColor(image_np, cv.COLOR_BGR2RGB) + + image_np = cv.resize(image_np, (500, 500)) + _, buffer = cv.imencode('.jpg', image_np) + encoded_string = base64.b64encode(buffer) + encoded_string = encoded_string.decode('utf-8') + + data = { + "image": f"{prefix}{encoded_string}", + "disease": f"{disease}", + "timestamp": unix_timestamp + } + ref_node.push(data) + + +image_path = tkinter.filedialog.askopenfilename( + initialdir='data/flower_disease_type_dataset/', + title='Select Image', + filetypes=(('JPG Files', '*.JPG'), ('All Files', '*.*')) + ) +disease = inference_disease(image_path) +write_data_firebase(image_path, disease) +image = Image.open(image_path) +image = image.resize((400, 400), Image.Resampling.LANCZOS) +image = ImageTk.PhotoImage(image) +image_label = Label(image=image) +image_label.image = image +image_label.grid(row=0, column=0, columnspan=3) + +print('Disease: ', disease) \ No newline at end of file