[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):
            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.

    Screenshot (142).png

  • @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,

  • 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.


  • @SuperGops

    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:

    1. Uninstall your current Python 3.7 version
    2. Install Python 3.6.5
    3. If you are using spyder editor make a change to vscode.
    4. Go to integrated terminal of vscode and create a virtual environment
    python -m venv venv
    1. Activate your virtual environment
    1. Create a requirements.txt over your current working directory. Contents for requirements.txt given below:
    1. Then install necessary packages using requirements.txt file
    pip install -r requirements.txt
    1. 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

Log in to reply

Recent Posts

  • F

    @salmanfaris best if you could point me to an example that works as described: getting different values depending on hoe close the finger is without really touching. nothing i tried did work yet

    read more
  • F

    @salmanfaris I haven't found a good sensor module for this at all. I used a thing which was calles touch sensor and it returns only 1/0. Tried to use touchRead() but it is not sensitive apparently, only 40 and 1 more or less.

    #define touch_pin_numer 33

    const int VALUE_THRESHOLD = 30;
    void setup()

    void loop(){
    TOUCH_SENSOR_VALUE = touchRead(touch_pin_numer);
    Serial.println ("Touch ON");
    Serial.println ("Touch OFF");

    should show something between 40 (current max) and 1 (current min) the closer the finger gets but it shows 40/41/39 and 1 - nothing inbetween. got this code from the web

    read more
  • @FlorianB Can you share the code, output window/error and details of the sensor module?

    read more
  • F

    Hi! I am trying to add an capacitive sensor to the ESP32, that will work through glass with 3mm thickness and an distance of 8 to 2 cm. I have bought sensors which only work on touch, i have looked into the touchRead() function but cant get a steady value increase/decrease with distance and only a real touch gets me enough difference to count it as a "touch". I have checked Arduino examples with foil where a resistor can set the sensitivity but nothing worked on my ESP32. i have spent hours looking for an example, can somebody point me to one please?

    read more
  • Capture.PNG

    Welcome to the Second edition of MakerGram Live, a newsletter where we pull together information about Interesting projects, Industry news, upcoming events, job opportunities and other interesting bits that you may find useful. 😉

    If you are a member of makergram, you already received a mail, please check your inbox or you can read from here: MakerGram Live | May 2020 Maker Update

    read more