MakerGram Logo

    MakerGram

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Popular
    • Tags
    • Users
    • Groups

    [Solved] leaf disease detection using keras

    General Discussion
    4
    18
    3141
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      sreu13 last edited by salmanfaris

      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.

      Screenshot (142).png

      1 Reply Last reply Reply Quote 0
      • salmanfaris
        salmanfaris last edited by salmanfaris

        @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?

        1 Reply Last reply Reply Quote 0
        • S
          sreu13 last edited by

          @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

          1 Reply Last reply Reply Quote 0
          • S
            SuperGops last edited by

            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.

            https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelBinarizer.html

            S 1 Reply Last reply Reply Quote 1
            • S
              sreu13 @SuperGops last edited by

              @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

              S 1 Reply Last reply Reply Quote 0
              • S
                SuperGops @sreu13 last edited by

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

                S 1 Reply Last reply Reply Quote 1
                • S
                  sreu13 @SuperGops last edited by

                  @SuperGops
                  so basically ,i'll have to restart and retrain the model with fit_transform?

                  S 1 Reply Last reply Reply Quote 0
                  • S
                    SuperGops @sreu13 last edited by

                    @sreu13 Yup

                    S 1 Reply Last reply Reply Quote 0
                    • A
                      arunksoman last edited by

                      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
                      .\venv\Scripts\activate
                      
                      1. 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
                      
                      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.
                      S 2 Replies Last reply Reply Quote 0
                      • S
                        sreu13 @SuperGops last edited by

                        @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

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Recent Posts

                        • R

                          I am trying to set up a janus webrtc to stream an RTSP to an HTML page.
                          I have followed the getting-started steps by Janus-gateway official github repo.

                          Since I am new to web development. I do not understand how to host the Webrtc server. can anyone guide me to set up an HTML page that can display a video stream from an RTSP server using janus webrtc?

                          • read more
                        • @zainmuhammed Can try capturing the GPS when the device is starting the loop instead after joining the LoRaWAN and see?

                          You can put the GPS value on top of the loop or setup function.

                          Also, what kind of gateway are you using? Is it configured okay, OTA is done?

                          • read more
                        • @salmanfaris Today I tried after connecting a 18650 cell,
                          WhatsApp Image 2024-04-12 at 10.40.06_c7d1947e.jpg WhatsApp Image 2024-04-12 at 10.40.05_897b8bb6.jpg
                          Data getting in console after integration of both lora and gps.
                          3f45cfe7-0061-4328-8c55-ef0a73385203-image.png
                          here you can see that GPS value is 0,0. also in my previous post you can see that GPS value is not reading.
                          Also the status LED is active after it is connected to the satellite.

                          • read more
                        • Hi @zainmuhammed ,

                          Can you share the GPS and LoRa output when it’s working?

                          Also can try capturing the GPS when the device is starting the loop instead after joining the LoRaWAN and see?

                          Also make sure the device provides have enough to modules. The GPS need more power when you cold start.

                          • read more
                        • @zainmuhammed
                          this is the code

                          #include <Arduino.h> #include <U8x8lib.h> #include <TinyGPS++.h> #include <SoftwareSerial.h> static const int RXPin = 1, TXPin = 2; static const uint32_t GPSBaud = 9600; // The TinyGPS++ object TinyGPSPlus gps; // The serial connection to the GPS device SoftwareSerial ss(RXPin, TXPin); U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(/*reset=*/U8X8_PIN_NONE); // U8X8_SSD1306_128X64_NONAME_SW_I2C u8x8(/*clock=*/ SCL, /*data=*/ SDA, /*reset=*/ U8X8_PIN_NONE); // OLEDs without Reset of the Display static char recv_buf[512]; static bool is_exist = false; static bool is_join = false; static int led = 0; static int at_send_check_response(char *p_ack, int timeout_ms, char *p_cmd, ...) { int ch; int num = 0; int index = 0; int startMillis = 0; va_list args; char cmd_buffer[256]; // Adjust the buffer size as needed memset(recv_buf, 0, sizeof(recv_buf)); va_start(args, p_cmd); vsprintf(cmd_buffer, p_cmd, args); // Format the command string Serial1.print(cmd_buffer); Serial.print(cmd_buffer); va_end(args); delay(200); startMillis = millis(); if (p_ack == NULL) { return 0; } do { while (Serial1.available() > 0) { ch = Serial1.read(); recv_buf[index++] = ch; Serial.print((char)ch); delay(2); } if (strstr(recv_buf, p_ack) != NULL) { return 1; } } while (millis() - startMillis < timeout_ms); return 0; } static void recv_prase(char *p_msg) { if (p_msg == NULL) { return; } char *p_start = NULL; int data = 0; int rssi = 0; int snr = 0; p_start = strstr(p_msg, "RX"); if (p_start && (1 == sscanf(p_start, "RX: \"%d\"\r\n", &data))) { Serial.println(data); u8x8.setCursor(2, 4); u8x8.print("led :"); led = !!data; u8x8.print(led); if (led) { digitalWrite(LED_BUILTIN, LOW); } else { digitalWrite(LED_BUILTIN, HIGH); } } p_start = strstr(p_msg, "RSSI"); if (p_start && (1 == sscanf(p_start, "RSSI %d,", &rssi))) { u8x8.setCursor(0, 6); u8x8.print(" "); u8x8.setCursor(2, 6); u8x8.print("rssi:"); u8x8.print(rssi); } p_start = strstr(p_msg, "SNR"); if (p_start && (1 == sscanf(p_start, "SNR %d", &snr))) { u8x8.setCursor(0, 7); u8x8.print(" "); u8x8.setCursor(2, 7); u8x8.print("snr :"); u8x8.print(snr); } } void setup(void) { u8x8.begin(); u8x8.setFlipMode(1); u8x8.setFont(u8x8_font_chroma48medium8_r); ss.begin(GPSBaud); Serial.begin(GPSBaud); pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, HIGH); Serial1.begin(9600); Serial.print("E5 LORAWAN TEST\r\n"); u8x8.setCursor(0, 0); if (at_send_check_response("+AT: OK", 100, "AT\r\n")) { is_exist = true; at_send_check_response("+ID: DevEui", 1000, "AT+ID=DevEui,\"xxxxx\"\r\n"); // replace 'xxxxxxxxxxxxx' with your DevEui at_send_check_response("+ID: AppEui", 1000, "AT+ID=AppEui,\"xxxxxxx\"\r\n"); // replace 'xxxxxxxxxxxxx' with your AppEui at_send_check_response("+KEY: APPKEY", 1000, "AT+KEY=APPKEY,\"xxxxxxxxx\"\r\n"); // replace 'xxxxxxxxxxxxx' with your AppKey at_send_check_response("+ID: DevAddr", 1000, "AT+ID=DevAddr\r\n"); at_send_check_response("+ID: AppEui", 1000, "AT+ID\r\n"); at_send_check_response("+MODE: LWOTAA", 1000, "AT+MODE=LWOTAA\r\n"); at_send_check_response("+DR: IN865", 1000, "AT+DR=IN865\r\n"); // Change FREQ as per your location at_send_check_response("+CH: NUM", 1000, "AT+CH=NUM,0-2\r\n"); at_send_check_response("+CLASS: C", 1000, "AT+CLASS=A\r\n"); at_send_check_response("+PORT: 8", 1000, "AT+PORT=8\r\n"); delay(200); u8x8.setCursor(5, 0); u8x8.print("LoRaWAN"); is_join = true; } else { is_exist = false; Serial.print("No E5 module found.\r\n"); u8x8.setCursor(0, 1); u8x8.print("unfound E5 !"); } u8x8.setCursor(2, 4); u8x8.print("led :"); u8x8.print(led); } void loop(void) { if (is_exist) { int ret = 0; if (is_join) { ret = at_send_check_response("+JOIN: Network joined", 12000, "AT+JOIN\r\n"); if (ret) { is_join = false; } else { at_send_check_response("+ID: AppEui", 1000, "AT+ID\r\n"); Serial.print("JOIN failed!\r\n\r\n"); delay(5000); } } else { gps.encode(ss.read()); float a=gps.location.lat(); float b=gps.location.lng(); Serial.println(a); Serial.println(b); char cmd[128]; sprintf(cmd, "AT+CMSGHEX=\"%04X%04X\"\r\n", (float)a,(float)b); ret = at_send_check_response("Done", 5000, cmd); if (ret) { recv_prase(recv_buf); } else { Serial.print("Send failed!\r\n\r\n"); } delay(5000); } } else { delay(1000); } }

                          9135d5d3-6277-4c60-81df-a2acac65c93d-image.png

                          • read more
                        By MakerGram | A XiStart Initiative | Built with ♥ NodeBB
                        Copyright © 2023 MakerGram, All rights reserved.
                        Privacy Policy | Terms & Conditions | Disclaimer | Code of Conduct