[Solved] leaf disease detection using keras
-
The code given below is for image classification, it seems to be running well until the last iteration which gives the following error >
"C:/Users/admin/Desktop/plant_disease_classification/plant_disease_classification/untitled1.py", line 45, in <module>
print (label_binarizer.classes_[predict1])AttributeError: 'LabelBinarizer' object has no attribute 'classes_'
import numpy as np import pickle import cv2 from os import listdir from sklearn.preprocessing import LabelBinarizer from keras.models import load_model from keras.models import Sequential from keras.preprocessing import image from keras.preprocessing.image import img_to_array from sklearn.preprocessing import MultiLabelBinarizer from sklearn.model_selection import train_test_split import matplotlib.pyplot as plt import tensorflow default_image_size = tuple((256, 256)) #load the pickle file file_object = open(r'C:\Users\admin\Desktop\pr3\cnn_model.pkl', 'rb') model = pickle.load(file_object) #load the leaf image that is to be classified imgpath=r'C:\Users\admin\Desktop\pr1\PlantVillage\diseases\Pepper__bell___healthy\0a3f2927-4410-46a3-bfda-5f4769a5aaf8___JR_HL 8275.JPG' def convert_image_to_array(image_dir): try: image = cv2.imread(image_dir) if image is not None : image = cv2.resize(image, default_image_size) return img_to_array(image) else : return np.array([]) except Exception as e: print(f"Error : {e}") return None imar = convert_image_to_array(imgpath) np_image_list = np.array([imar], dtype=np.float16) / 225.0 label_binarizer = LabelBinarizer() predict1 = model.predict(np_image_list) print (label_binarizer.classes_[predict1])
the screenshot of the above complied code and error is uploaded for reference.
-
@sreu13 said in leaf disease detection using keras:
AttributeError: 'LabelBinarizer' object has no attribute 'classes_'
Hi, Can you try downgrade the scikit by typing
pip install scikit-learn==0.15.2
and are you following any guide or something, if yes can you share that also?
-
@salmanfaris said in leaf disease detection using keras:
pip install scikit-learn==0.15.2
tried downgrading, but came up with this error.
ERROR: Failed building wheel for scikit-learn
and I've been following Kaggle kernel,
link-https://www.kaggle.com/emmarex/plant-disease-detection-using-keras -
I think you need to use the fit or fit_transform function before you predict the classes and use the Binarizer. Have a look at scikit's official documentation for the same.
-
i've entered this code,
def fit_transform(self, n_classes):
but as I run it, I get the indentation Error given below
File"C:/Users/admin/Desktop/plant_disease_classification/plant_disease_classification/untitled1.py", line 42
label_binarizer = LabelBinarizer()
^
IndentationError: expected an indented block -
@sreu13
fit and fit_transform are actually inbuilt functions found in the scikit-learn library. So I'd suggest you fit your model with the available data using those functions whose application can be found on scikit-learn's documentation and then proceed with the Binarizer. -
@SuperGops
so basically ,i'll have to restart and retrain the model with fit_transform? -
@sreu13 Yup
-
Could you please follow my steps:
- Uninstall your current Python 3.7 version
- Install Python 3.6.5
- If you are using spyder editor make a change to vscode.
- Go to integrated terminal of vscode and create a virtual environment
python -m venv venv
- Activate your virtual environment
.\venv\Scripts\activate
- Create a requirements.txt over your current working directory. Contents for requirements.txt given below:
h5py==2.8.0 imutils==0.5.1 Keras==2.2.4 Keras-Applications==1.0.6 Keras-Preprocessing==1.0.5 kiwisolver==1.0.1 matplotlib==3.0.2 numpy==1.15.3 opencv-contrib-python==3.4.3.18 Pillow==5.3.0 PyWavelets==1.0.1 scikit-image==0.14.1 scikit-learn==0.20.0 scipy==1.1.0 six==1.11.0 sklearn==0.0 tensorboard==1.12.0 tensorflow==1.12.0 termcolor==1.1.0 toolz==0.9.0
- Then install necessary packages using requirements.txt file
pip install -r requirements.txt
- Then run your code within this venv and say what happened as reply here.
-
@SuperGops
i also have another pickle file "label_transform", which I got as an output from referring the initial code from gaggle, is there any use of this file?label_binarizer = LabelBinarizer() image_labels = label_binarizer.fit_transform(label_list) pickle.dump(label_binarizer,open('label_transform.pkl', 'wb')) n_classes = len(label_binarizer.classes_)
Kaggle >https://www.kaggle.com/emmarex/plant-disease-detection-using-keras/data