MakerGram Logo

    MakerGram

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

    Need Help: Error compiling for board AI Thinker ESP32-CAM.

    ESP32
    4
    8
    1625
    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.
    • J
      jacob_jipson last edited by

      I am facing this issue while trying to compile a programme for my esp32-cam board.

      Board used : link text

      The programme :

      #include "jacobjipson-project-1_inferencing.h"
      #include "edge-impulse-sdk/dsp/image/image.hpp"
      
      #include "esp_camera.h"
      
      // Select camera model - find more camera models in camera_pins.h file here
      // https://github.com/espressif/arduino-esp32/blob/master/libraries/ESP32/examples/Camera/CameraWebServer/camera_pins.h
      
      //#define CAMERA_MODEL_ESP_EYE // Has PSRAM
      #define CAMERA_MODEL_AI_THINKER // Has PSRAM
      
      #if defined(CAMERA_MODEL_ESP_EYE)
      #define PWDN_GPIO_NUM    -1
      #define RESET_GPIO_NUM   -1
      #define XCLK_GPIO_NUM    4
      #define SIOD_GPIO_NUM    18
      #define SIOC_GPIO_NUM    23
      
      #define Y9_GPIO_NUM      36
      #define Y8_GPIO_NUM      37
      #define Y7_GPIO_NUM      38
      #define Y6_GPIO_NUM      39
      #define Y5_GPIO_NUM      35
      #define Y4_GPIO_NUM      14
      #define Y3_GPIO_NUM      13
      #define Y2_GPIO_NUM      34
      #define VSYNC_GPIO_NUM   5
      #define HREF_GPIO_NUM    27
      #define PCLK_GPIO_NUM    25
      
      #elif defined(CAMERA_MODEL_AI_THINKER)
      #define PWDN_GPIO_NUM     32
      #define RESET_GPIO_NUM    -1
      #define XCLK_GPIO_NUM      0
      #define SIOD_GPIO_NUM     26
      #define SIOC_GPIO_NUM     27
      
      #define Y9_GPIO_NUM       35
      #define Y8_GPIO_NUM       34
      #define Y7_GPIO_NUM       39
      #define Y6_GPIO_NUM       36
      #define Y5_GPIO_NUM       21
      #define Y4_GPIO_NUM       19
      #define Y3_GPIO_NUM       18
      #define Y2_GPIO_NUM        5
      #define VSYNC_GPIO_NUM    25
      #define HREF_GPIO_NUM     23
      #define PCLK_GPIO_NUM     22
      
      #else
      #error "Camera model not selected"
      #endif
      
      /* Constant defines -------------------------------------------------------- */
      #define EI_CAMERA_RAW_FRAME_BUFFER_COLS           320
      #define EI_CAMERA_RAW_FRAME_BUFFER_ROWS           240
      #define EI_CAMERA_FRAME_BYTE_SIZE                 3
      
      /* Private variables ------------------------------------------------------- */
      static bool debug_nn = false; // Set this to true to see e.g. features generated from the raw signal
      static bool is_initialised = false;
      uint8_t *snapshot_buf; //points to the output of the capture
      
      static camera_config_t camera_config = {
          .pin_pwdn = PWDN_GPIO_NUM,
          .pin_reset = RESET_GPIO_NUM,
          .pin_xclk = XCLK_GPIO_NUM,
          .pin_sscb_sda = SIOD_GPIO_NUM,
          .pin_sscb_scl = SIOC_GPIO_NUM,
      
          .pin_d7 = Y9_GPIO_NUM,
          .pin_d6 = Y8_GPIO_NUM,
          .pin_d5 = Y7_GPIO_NUM,
          .pin_d4 = Y6_GPIO_NUM,
          .pin_d3 = Y5_GPIO_NUM,
          .pin_d2 = Y4_GPIO_NUM,
          .pin_d1 = Y3_GPIO_NUM,
          .pin_d0 = Y2_GPIO_NUM,
          .pin_vsync = VSYNC_GPIO_NUM,
          .pin_href = HREF_GPIO_NUM,
          .pin_pclk = PCLK_GPIO_NUM,
      
          //XCLK 20MHz or 10MHz for OV2640 double FPS (Experimental)
          .xclk_freq_hz = 20000000,
          .ledc_timer = LEDC_TIMER_0,
          .ledc_channel = LEDC_CHANNEL_0,
      
          .pixel_format = PIXFORMAT_JPEG, //YUV422,GRAYSCALE,RGB565,JPEG
          .frame_size = FRAMESIZE_QVGA,    //QQVGA-UXGA Do not use sizes above QVGA when not JPEG
      
          .jpeg_quality = 12, //0-63 lower number means higher quality
          .fb_count = 1,       //if more than one, i2s runs in continuous mode. Use only with JPEG
          .fb_location = CAMERA_FB_IN_PSRAM,
          .grab_mode = CAMERA_GRAB_WHEN_EMPTY,
      };
      
      /* Function definitions ------------------------------------------------------- */
      bool ei_camera_init(void);
      void ei_camera_deinit(void);
      bool ei_camera_capture(uint32_t img_width, uint32_t img_height, uint8_t *out_buf) ;
      
      /**
      * @brief      Arduino setup function
      */
      void setup()
      {
          // put your setup code here, to run once:
          Serial.begin(115200);
          //comment out the below line to start inference immediately after upload
          while (!Serial);
          Serial.println("Edge Impulse Inferencing Demo");
          if (ei_camera_init() == false) {
              ei_printf("Failed to initialize Camera!\r\n");
          }
          else {
              ei_printf("Camera initialized\r\n");
          }
      
          ei_printf("\nStarting continious inference in 2 seconds...\n");
          ei_sleep(2000);
      }
      
      /**
      * @brief      Get data and run inferencing
      *
      * @param[in]  debug  Get debug info if true
      */
      void loop()
      {
      
          // instead of wait_ms, we'll wait on the signal, this allows threads to cancel us...
          if (ei_sleep(5) != EI_IMPULSE_OK) {
              return;
          }
      
          snapshot_buf = (uint8_t*)malloc(EI_CAMERA_RAW_FRAME_BUFFER_COLS * EI_CAMERA_RAW_FRAME_BUFFER_ROWS * EI_CAMERA_FRAME_BYTE_SIZE);
      
          // check if allocation was successful
          if(snapshot_buf == nullptr) {
              ei_printf("ERR: Failed to allocate snapshot buffer!\n");
              return;
          }
      
          ei::signal_t signal;
          signal.total_length = EI_CLASSIFIER_INPUT_WIDTH * EI_CLASSIFIER_INPUT_HEIGHT;
          signal.get_data = &ei_camera_get_data;
      
          if (ei_camera_capture((size_t)EI_CLASSIFIER_INPUT_WIDTH, (size_t)EI_CLASSIFIER_INPUT_HEIGHT, snapshot_buf) == false) {
              ei_printf("Failed to capture image\r\n");
              free(snapshot_buf);
              return;
          }
      
          // Run the classifier
          ei_impulse_result_t result = { 0 };
      
          EI_IMPULSE_ERROR err = run_classifier(&signal, &result, debug_nn);
          if (err != EI_IMPULSE_OK) {
              ei_printf("ERR: Failed to run classifier (%d)\n", err);
              return;
          }
      
          // print the predictions
          ei_printf("Predictions (DSP: %d ms., Classification: %d ms., Anomaly: %d ms.): \n",
                      result.timing.dsp, result.timing.classification, result.timing.anomaly);
      
      #if EI_CLASSIFIER_OBJECT_DETECTION == 1
          bool bb_found = result.bounding_boxes[0].value > 0;
          for (size_t ix = 0; ix < result.bounding_boxes_count; ix++) {
              auto bb = result.bounding_boxes[ix];
              if (bb.value == 0) {
                  continue;
              }
              ei_printf("    %s (%f) [ x: %u, y: %u, width: %u, height: %u ]\n", bb.label, bb.value, bb.x, bb.y, bb.width, bb.height);
          }
          if (!bb_found) {
              ei_printf("    No objects found\n");
          }
      #else
          for (size_t ix = 0; ix < EI_CLASSIFIER_LABEL_COUNT; ix++) {
              ei_printf("    %s: %.5f\n", result.classification[ix].label,
                                          result.classification[ix].value);
          }
      #endif
      
      #if EI_CLASSIFIER_HAS_ANOMALY == 1
              ei_printf("    anomaly score: %.3f\n", result.anomaly);
      #endif
      
      
          free(snapshot_buf);
      
      }
      
      /**
       * @brief   Setup image sensor & start streaming
       *
       * @retval  false if initialisation failed
       */
      bool ei_camera_init(void) {
      
          if (is_initialised) return true;
      
      #if defined(CAMERA_MODEL_ESP_EYE)
        pinMode(13, INPUT_PULLUP);
        pinMode(14, INPUT_PULLUP);
      #endif
      
          //initialize the camera
          esp_err_t err = esp_camera_init(&camera_config);
          if (err != ESP_OK) {
            Serial.printf("Camera init failed with error 0x%x\n", err);
            return false;
          }
      
          sensor_t * s = esp_camera_sensor_get();
          // initial sensors are flipped vertically and colors are a bit saturated
          if (s->id.PID == OV3660_PID) {
            s->set_vflip(s, 1); // flip it back
            s->set_brightness(s, 1); // up the brightness just a bit
            s->set_saturation(s, 0); // lower the saturation
          }
      
      #if defined(CAMERA_MODEL_M5STACK_WIDE)
          s->set_vflip(s, 1);
          s->set_hmirror(s, 1);
      #elif defined(CAMERA_MODEL_ESP_EYE)
          s->set_vflip(s, 1);
          s->set_hmirror(s, 1);
          s->set_awb_gain(s, 1);
      #endif
      
          is_initialised = true;
          return true;
      }
      
      /**
       * @brief      Stop streaming of sensor data
       */
      void ei_camera_deinit(void) {
      
          //deinitialize the camera
          esp_err_t err = esp_camera_deinit();
      
          if (err != ESP_OK)
          {
              ei_printf("Camera deinit failed\n");
              return;
          }
      
          is_initialised = false;
          return;
      }
      
      
      /**
       * @brief      Capture, rescale and crop image
       *
       * @param[in]  img_width     width of output image
       * @param[in]  img_height    height of output image
       * @param[in]  out_buf       pointer to store output image, NULL may be used
       *                           if ei_camera_frame_buffer is to be used for capture and resize/cropping.
       *
       * @retval     false if not initialised, image captured, rescaled or cropped failed
       *
       */
      bool ei_camera_capture(uint32_t img_width, uint32_t img_height, uint8_t *out_buf) {
          bool do_resize = false;
      
          if (!is_initialised) {
              ei_printf("ERR: Camera is not initialized\r\n");
              return false;
          }
      
          camera_fb_t *fb = esp_camera_fb_get();
      
          if (!fb) {
              ei_printf("Camera capture failed\n");
              return false;
          }
      
         bool converted = fmt2rgb888(fb->buf, fb->len, PIXFORMAT_JPEG, snapshot_buf);
      
         esp_camera_fb_return(fb);
      
         if(!converted){
             ei_printf("Conversion failed\n");
             return false;
         }
      
          if ((img_width != EI_CAMERA_RAW_FRAME_BUFFER_COLS)
              || (img_height != EI_CAMERA_RAW_FRAME_BUFFER_ROWS)) {
              do_resize = true;
          }
      
          if (do_resize) {
              ei::image::processing::crop_and_interpolate_rgb888(
              out_buf,
              EI_CAMERA_RAW_FRAME_BUFFER_COLS,
              EI_CAMERA_RAW_FRAME_BUFFER_ROWS,
              out_buf,
              img_width,
              img_height);
          }
      
      
          return true;
      }
      
      static int ei_camera_get_data(size_t offset, size_t length, float *out_ptr)
      {
          // we already have a RGB888 buffer, so recalculate offset into pixel index
          size_t pixel_ix = offset * 3;
          size_t pixels_left = length;
          size_t out_ptr_ix = 0;
      
          while (pixels_left != 0) {
              out_ptr[out_ptr_ix] = (snapshot_buf[pixel_ix] << 16) + (snapshot_buf[pixel_ix + 1] << 8) + snapshot_buf[pixel_ix + 2];
      
              // go to the next pixel
              out_ptr_ix++;
              pixel_ix+=3;
              pixels_left--;
          }
          // and done!
          return 0;
      }
      
      #if !defined(EI_CLASSIFIER_SENSOR) || EI_CLASSIFIER_SENSOR != EI_CLASSIFIER_SENSOR_CAMERA
      #error "Invalid model for current sensor"
      #endif
      

      Error :

      exit status 1
      Error compiling for board AI Thinker ESP32-CAM.
      
      

      This is an example code for an edge impulse library that i created.

      salmanfaris 1 Reply Last reply Reply Quote 1
      • salmanfaris
        salmanfaris @jacob_jipson last edited by

        @jacob_jipson said in Need Help: Error compiling for board AI Thinker ESP32-CAM.:

        exit status 1
        Error compiling for board AI Thinker ESP32-CAM.

        can you please share the full error log here and pleas share the screenshot of the Arduino IDE tools section.

        J 1 Reply Last reply Reply Quote 0
        • J
          jacob_jipson @salmanfaris last edited by

          @salmanfaris
          Error log

          C:\Users\jacob\Documents\Arduino\libraries\jacobjipson-project-1_inferencing\src\edge-impulse-sdk\porting\espressif\ESP-NN\src\activation_functions\esp_nn_relu_s8_esp32s3.S: Assembler messages:
          C:\Users\jacob\Documents\Arduino\libraries\jacobjipson-project-1_inferencing\src\edge-impulse-sdk\porting\espressif\ESP-NN\src\activation_functions\esp_nn_relu_s8_esp32s3.S:35: Error: unknown opcode or format name 'ee.vldbc.8'
          C:\Users\jacob\Documents\Arduino\libraries\jacobjipson-project-1_inferencing\src\edge-impulse-sdk\porting\espressif\ESP-NN\src\activation_functions\esp_nn_relu_s8_esp32s3.S:39: Error: unknown opcode or format name 'ee.zero.q'
          C:\Users\jacob\Documents\Arduino\libraries\jacobjipson-project-1_inferencing\src\edge-impulse-sdk\porting\espressif\ESP-NN\src\activation_functions\esp_nn_relu_s8_esp32s3.S:42: Error: unknown opcode or format name 'ee.vld.128.ip'
          C:\Users\jacob\Documents\Arduino\libraries\jacobjipson-project-1_inferencing\src\edge-impulse-sdk\porting\espressif\ESP-NN\src\activation_functions\esp_nn_relu_s8_esp32s3.S:43: Error: unknown opcode or format name 'ee.vmax.s8'
          C:\Users\jacob\Documents\Arduino\libraries\jacobjipson-project-1_inferencing\src\edge-impulse-sdk\porting\espressif\ESP-NN\src\activation_functions\esp_nn_relu_s8_esp32s3.S:44: Error: unknown opcode or format name 'ee.vmin.s8'
          C:\Users\jacob\Documents\Arduino\libraries\jacobjipson-project-1_inferencing\src\edge-impulse-sdk\porting\espressif\ESP-NN\src\activation_functions\esp_nn_relu_s8_esp32s3.S:45: Error: unknown opcode or format name 'ee.vst.128.ip'
          C:\Users\jacob\Documents\Arduino\libraries\jacobjipson-project-1_inferencing\src\edge-impulse-sdk\porting\espressif\ESP-NN\src\activation_functions\esp_nn_relu_s8_esp32s3.S:58: Error: unknown opcode or format name 'ee.vld.l.64.ip'
          C:\Users\jacob\Documents\Arduino\libraries\jacobjipson-project-1_inferencing\src\edge-impulse-sdk\porting\espressif\ESP-NN\src\activation_functions\esp_nn_relu_s8_esp32s3.S:59: Error: unknown opcode or format name 'ee.vmax.s8'
          C:\Users\jacob\Documents\Arduino\libraries\jacobjipson-project-1_inferencing\src\edge-impulse-sdk\porting\espressif\ESP-NN\src\activation_functions\esp_nn_relu_s8_esp32s3.S:60: Error: unknown opcode or format name 'ee.vmin.s8'
          C:\Users\jacob\Documents\Arduino\libraries\jacobjipson-project-1_inferencing\src\edge-impulse-sdk\porting\espressif\ESP-NN\src\activation_functions\esp_nn_relu_s8_esp32s3.S:61: Error: unknown opcode or format name 'ee.vst.l.64.ip'
          C:\Users\jacob\Documents\Arduino\libraries\jacobjipson-project-1_inferencing\src\edge-impulse-sdk\porting\espressif\ESP-NN\src\activation_functions\esp_nn_relu_s8_esp32s3.S:98: Error: unknown opcode or format name 'ee.zero.q'
          C:\Users\jacob\Documents\Arduino\libraries\jacobjipson-project-1_inferencing\src\edge-impulse-sdk\porting\espressif\ESP-NN\src\activation_functions\esp_nn_relu_s8_esp32s3.S:40: Error: invalid empty loop
          C:\Users\jacob\Documents\Arduino\libraries\jacobjipson-project-1_inferencing\src\edge-impulse-sdk\porting\espressif\ESP-NN\src\activation_functions\esp_nn_relu_s8_esp32s3.S:56: Error: invalid empty loop
          C:\Users\jacob\Documents\Arduino\libraries\jacobjipson-project-1_inferencing\src\edge-impulse-sdk\porting\espressif\ESP-NN\src\activation_functions\esp_nn_relu_s8_esp32s3.S:40: Internal error in istack_push_space at /builds/idf/crosstool-NG/.build/HOST-i686-w64-mingw32/xtensa-esp32-elf/src/binutils/gas/config/tc-xtensa.c:12515.
          Please report this bug.
          exit status 1
          Error compiling for board AI Thinker ESP32-CAM.
          

          Tool section
          Screenshot 2023-09-11 122407.png

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

            @jacob_jipson said in Need Help: Error compiling for board AI Thinker ESP32-CAM.:

            ESP-NN

            Did you replace the NN folder in the lib as we do for XIAO esp32? and for the AI Thinker ESP32-CAM, you don't need to do that.

            now, try to delete the library and re-add a new one and compile.

            J 1 Reply Last reply Reply Quote 1
            • J
              jacob_jipson @salmanfaris last edited by

              @salmanfaris The problem was resolved. Thankyou so much.

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

                @jacob_jipson Glad to hear that. 🙌

                1 Reply Last reply Reply Quote 0
                • M
                  mahesh02 last edited by

                  Im having the same error as below, it will be really awesome if you can help me.

                  In file included from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/classifier/ei_classifier_types.h:40,
                  from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/classifier/ei_model_types.h:40,
                  from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/classifier/ei_run_classifier.h:38,
                  from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/mahesh02-project-1_inferencing.h:49,
                  from C:\Users\Mahesh\AppData\Local\Temp\arduino_modified_sketch_680639\esp32_camera.ino:27:
                  C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/model-parameters/model_metadata.h:108:2: warning: #warning 'EI_CLASSFIER_OBJECT_DETECTION_COUNT' is used for the guaranteed minimum number of objects detected. To get all objects during inference use 'bounding_boxes_count' from the 'ei_impulse_result_t' struct instead. [-Wcpp]
                  #warning 'EI_CLASSFIER_OBJECT_DETECTION_COUNT' is used for the guaranteed minimum number of objects detected. To get all objects during inference use 'bounding_boxes_count' from the 'ei_impulse_result_t' struct instead.
                  ^~~~~~~
                  In file included from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/dsp/memory.hpp:38,
                  from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/dsp/ei_alloc.h:34,
                  from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/dsp/ei_vector.h:34,
                  from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/dsp/numpy_types.h:40,
                  from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/dsp/ei_dsp_handle.h:35,
                  from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/classifier/ei_model_types.h:41,
                  from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/classifier/ei_run_classifier.h:38,
                  from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/mahesh02-project-1_inferencing.h:49,
                  from C:\Users\Mahesh\AppData\Local\Temp\arduino_modified_sketch_680639\esp32_camera.ino:27:
                  c:\users\mahesh\onedrive\documents\arduino\libraries\mahesh02-project-1_inferencing\src\edge-impulse-sdk\porting\ei_classifier_porting.h:310: warning: "EI_PORTING_ARDUINO" redefined
                  #define EI_PORTING_ARDUINO 0

                  c:\users\mahesh\onedrive\documents\arduino\libraries\mahesh02-project-1_inferencing\src\edge-impulse-sdk\porting\ei_classifier_porting.h:279: note: this is the location of the previous definition
                  #define EI_PORTING_ARDUINO 1

                  In file included from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/dsp/speechpy/speechpy.hpp:35,
                  from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/classifier/ei_run_dsp.h:40,
                  from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/classifier/ei_run_classifier.h:41,
                  from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/mahesh02-project-1_inferencing.h:49,
                  from C:\Users\Mahesh\AppData\Local\Temp\arduino_modified_sketch_680639\esp32_camera.ino:27:
                  C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/dsp/speechpy/feature.hpp: In static member function 'static int ei::speechpy::feature::mfe(ei::matrix_t*, ei::matrix_t*, ei::signal_t*, uint32_t, float, float, uint16_t, uint16_t, uint32_t, uint32_t, uint16_t)':
                  C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/dsp/speechpy/feature.hpp:236:52: warning: missing initializer for member 'ei::speechpy::ei_stack_frames_info::frame_ixs' [-Wmissing-field-initializers]
                  stack_frames_info_t stack_frame_info = { 0 };
                  ^
                  C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/dsp/speechpy/feature.hpp:236:52: warning: missing initializer for member 'ei::speechpy::ei_stack_frames_info::frame_length' [-Wmissing-field-initializers]
                  In file included from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/dsp/speechpy/speechpy.hpp:35,
                  from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/classifier/ei_run_dsp.h:40,
                  from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/classifier/ei_run_classifier.h:41,
                  from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/mahesh02-project-1_inferencing.h:49,
                  from C:\Users\Mahesh\AppData\Local\Temp\arduino_modified_sketch_680639\esp32_camera.ino:27:
                  C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/dsp/speechpy/feature.hpp: In static member function 'static int ei::speechpy::feature::mfe_v3(ei::matrix_t*, ei::matrix_t*, ei::signal_t*, uint32_t, float, float, uint16_t, uint16_t, uint32_t, uint32_t, uint16_t)':
                  C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/dsp/speechpy/feature.hpp:436:52: warning: missing initializer for member 'ei::speechpy::ei_stack_frames_info::frame_ixs' [-Wmissing-field-initializers]
                  stack_frames_info_t stack_frame_info = { 0 };
                  ^
                  C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/dsp/speechpy/feature.hpp:436:52: warning: missing initializer for member 'ei::speechpy::ei_stack_frames_info::frame_length' [-Wmissing-field-initializers]
                  C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/dsp/speechpy/feature.hpp: In static member function 'static int ei::speechpy::feature::spectrogram(ei::matrix_t*, ei::signal_t*, float, float, float, uint16_t, uint16_t)':
                  C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/dsp/speechpy/feature.hpp:576:52: warning: missing initializer for member 'ei::speechpy::ei_stack_frames_info::frame_ixs' [-Wmissing-field-initializers]
                  stack_frames_info_t stack_frame_info = { 0 };
                  ^
                  C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/dsp/speechpy/feature.hpp:576:52: warning: missing initializer for member 'ei::speechpy::ei_stack_frames_info::frame_length' [-Wmissing-field-initializers]
                  In file included from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/mahesh02-project-1_inferencing.h:49,
                  from C:\Users\Mahesh\AppData\Local\Temp\arduino_modified_sketch_680639\esp32_camera.ino:27:
                  C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/classifier/ei_run_classifier.h: In function 'EI_IMPULSE_ERROR {anonymous}::process_impulse(ei_impulse_handle_t*, ei::signal_t*, ei_impulse_result_t*, bool)':
                  C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/classifier/ei_run_classifier.h:307:23: error: format '%lu' expects argument of type 'long unsigned int', but argument 2 has type 'size_t' {aka 'unsigned int'} [-Werror=format=]
                  ei_printf("ERR: Out of memory, can't allocate matrix_ptrs[%lu]\n", ix);
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~
                  C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/classifier/ei_run_classifier.h:312:23: error: format '%lu' expects argument of type 'long unsigned int', but argument 2 has type 'size_t' {aka 'unsigned int'} [-Werror=format=]
                  ei_printf("ERR: Out of memory, can't allocate matrix_ptrs[%lu]\n", ix);
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~
                  C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/classifier/ei_run_classifier.h: In function 'EI_IMPULSE_ERROR {anonymous}::process_impulse_continuous(ei_impulse_handle_t*, ei::signal_t*, ei_impulse_result_t*, bool)':
                  C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/classifier/ei_run_classifier.h:558:27: error: format '%lu' expects argument of type 'long unsigned int', but argument 2 has type 'size_t' {aka 'unsigned int'} [-Werror=format=]
                  ei_printf("ERR: Out of memory, can't allocate matrix_ptrs[%lu]\n", ix);
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~
                  C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/classifier/ei_run_classifier.h:563:27: error: format '%lu' expects argument of type 'long unsigned int', but argument 2 has type 'size_t' {aka 'unsigned int'} [-Werror=format=]
                  ei_printf("ERR: Out of memory, can't allocate matrix_ptrs[%lu]\n", ix);
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~
                  C:\Users\Mahesh\AppData\Local\Temp\arduino_modified_sketch_680639\esp32_camera.ino: In function 'void loop()':
                  C:\Users\Mahesh\AppData\Local\Temp\arduino_modified_sketch_680639\esp32_camera.ino:181:38: warning: missing initializer for member 'ei_impulse_result_t::bounding_boxes_count' [-Wmissing-field-initializers]
                  ei_impulse_result_t result = { 0 };
                  ^
                  C:\Users\Mahesh\AppData\Local\Temp\arduino_modified_sketch_680639\esp32_camera.ino:181:38: warning: missing initializer for member 'ei_impulse_result_t::classification' [-Wmissing-field-initializers]
                  C:\Users\Mahesh\AppData\Local\Temp\arduino_modified_sketch_680639\esp32_camera.ino:181:38: warning: missing initializer for member 'ei_impulse_result_t::anomaly' [-Wmissing-field-initializers]
                  C:\Users\Mahesh\AppData\Local\Temp\arduino_modified_sketch_680639\esp32_camera.ino:181:38: warning: missing initializer for member 'ei_impulse_result_t::timing' [-Wmissing-field-initializers]
                  C:\Users\Mahesh\AppData\Local\Temp\arduino_modified_sketch_680639\esp32_camera.ino:181:38: warning: missing initializer for member 'ei_impulse_result_t::copy_output' [-Wmissing-field-initializers]
                  C:\Users\Mahesh\AppData\Local\Temp\arduino_modified_sketch_680639\esp32_camera.ino:181:38: warning: missing initializer for member 'ei_impulse_result_t::postprocessed_output' [-Wmissing-field-initializers]
                  cc1plus.exe: some warnings being treated as errors
                  Using library mahesh02-project-1_inferencing at version 1.0.1 in folder: C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing
                  exit status 1
                  Error compiling for board AI Thinker ESP32-CAM.

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

                    @mahesh02 From the current Arduino ESP32 board files, we don't need to install the ESP-NN separately.

                    But try to choose the esp32 board version 3.1.3 and check, as I also faced issues with the latest esp32 board file.

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

                    Recent Posts

                    • @mahesh02 From the current Arduino ESP32 board files, we don't need to install the ESP-NN separately.

                      But try to choose the esp32 board version 3.1.3 and check, as I also faced issues with the latest esp32 board file.

                      • read more
                    • M

                      Im having the same error as below, it will be really awesome if you can help me.

                      In file included from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/classifier/ei_classifier_types.h:40,
                      from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/classifier/ei_model_types.h:40,
                      from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/classifier/ei_run_classifier.h:38,
                      from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/mahesh02-project-1_inferencing.h:49,
                      from C:\Users\Mahesh\AppData\Local\Temp\arduino_modified_sketch_680639\esp32_camera.ino:27:
                      C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/model-parameters/model_metadata.h:108:2: warning: #warning 'EI_CLASSFIER_OBJECT_DETECTION_COUNT' is used for the guaranteed minimum number of objects detected. To get all objects during inference use 'bounding_boxes_count' from the 'ei_impulse_result_t' struct instead. [-Wcpp]
                      #warning 'EI_CLASSFIER_OBJECT_DETECTION_COUNT' is used for the guaranteed minimum number of objects detected. To get all objects during inference use 'bounding_boxes_count' from the 'ei_impulse_result_t' struct instead.
                      ^~~~~~~
                      In file included from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/dsp/memory.hpp:38,
                      from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/dsp/ei_alloc.h:34,
                      from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/dsp/ei_vector.h:34,
                      from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/dsp/numpy_types.h:40,
                      from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/dsp/ei_dsp_handle.h:35,
                      from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/classifier/ei_model_types.h:41,
                      from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/classifier/ei_run_classifier.h:38,
                      from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/mahesh02-project-1_inferencing.h:49,
                      from C:\Users\Mahesh\AppData\Local\Temp\arduino_modified_sketch_680639\esp32_camera.ino:27:
                      c:\users\mahesh\onedrive\documents\arduino\libraries\mahesh02-project-1_inferencing\src\edge-impulse-sdk\porting\ei_classifier_porting.h:310: warning: "EI_PORTING_ARDUINO" redefined
                      #define EI_PORTING_ARDUINO 0

                      c:\users\mahesh\onedrive\documents\arduino\libraries\mahesh02-project-1_inferencing\src\edge-impulse-sdk\porting\ei_classifier_porting.h:279: note: this is the location of the previous definition
                      #define EI_PORTING_ARDUINO 1

                      In file included from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/dsp/speechpy/speechpy.hpp:35,
                      from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/classifier/ei_run_dsp.h:40,
                      from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/classifier/ei_run_classifier.h:41,
                      from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/mahesh02-project-1_inferencing.h:49,
                      from C:\Users\Mahesh\AppData\Local\Temp\arduino_modified_sketch_680639\esp32_camera.ino:27:
                      C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/dsp/speechpy/feature.hpp: In static member function 'static int ei::speechpy::feature::mfe(ei::matrix_t*, ei::matrix_t*, ei::signal_t*, uint32_t, float, float, uint16_t, uint16_t, uint32_t, uint32_t, uint16_t)':
                      C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/dsp/speechpy/feature.hpp:236:52: warning: missing initializer for member 'ei::speechpy::ei_stack_frames_info::frame_ixs' [-Wmissing-field-initializers]
                      stack_frames_info_t stack_frame_info = { 0 };
                      ^
                      C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/dsp/speechpy/feature.hpp:236:52: warning: missing initializer for member 'ei::speechpy::ei_stack_frames_info::frame_length' [-Wmissing-field-initializers]
                      In file included from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/dsp/speechpy/speechpy.hpp:35,
                      from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/classifier/ei_run_dsp.h:40,
                      from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/classifier/ei_run_classifier.h:41,
                      from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/mahesh02-project-1_inferencing.h:49,
                      from C:\Users\Mahesh\AppData\Local\Temp\arduino_modified_sketch_680639\esp32_camera.ino:27:
                      C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/dsp/speechpy/feature.hpp: In static member function 'static int ei::speechpy::feature::mfe_v3(ei::matrix_t*, ei::matrix_t*, ei::signal_t*, uint32_t, float, float, uint16_t, uint16_t, uint32_t, uint32_t, uint16_t)':
                      C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/dsp/speechpy/feature.hpp:436:52: warning: missing initializer for member 'ei::speechpy::ei_stack_frames_info::frame_ixs' [-Wmissing-field-initializers]
                      stack_frames_info_t stack_frame_info = { 0 };
                      ^
                      C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/dsp/speechpy/feature.hpp:436:52: warning: missing initializer for member 'ei::speechpy::ei_stack_frames_info::frame_length' [-Wmissing-field-initializers]
                      C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/dsp/speechpy/feature.hpp: In static member function 'static int ei::speechpy::feature::spectrogram(ei::matrix_t*, ei::signal_t*, float, float, float, uint16_t, uint16_t)':
                      C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/dsp/speechpy/feature.hpp:576:52: warning: missing initializer for member 'ei::speechpy::ei_stack_frames_info::frame_ixs' [-Wmissing-field-initializers]
                      stack_frames_info_t stack_frame_info = { 0 };
                      ^
                      C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/dsp/speechpy/feature.hpp:576:52: warning: missing initializer for member 'ei::speechpy::ei_stack_frames_info::frame_length' [-Wmissing-field-initializers]
                      In file included from C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/mahesh02-project-1_inferencing.h:49,
                      from C:\Users\Mahesh\AppData\Local\Temp\arduino_modified_sketch_680639\esp32_camera.ino:27:
                      C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/classifier/ei_run_classifier.h: In function 'EI_IMPULSE_ERROR {anonymous}::process_impulse(ei_impulse_handle_t*, ei::signal_t*, ei_impulse_result_t*, bool)':
                      C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/classifier/ei_run_classifier.h:307:23: error: format '%lu' expects argument of type 'long unsigned int', but argument 2 has type 'size_t' {aka 'unsigned int'} [-Werror=format=]
                      ei_printf("ERR: Out of memory, can't allocate matrix_ptrs[%lu]\n", ix);
                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~
                      C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/classifier/ei_run_classifier.h:312:23: error: format '%lu' expects argument of type 'long unsigned int', but argument 2 has type 'size_t' {aka 'unsigned int'} [-Werror=format=]
                      ei_printf("ERR: Out of memory, can't allocate matrix_ptrs[%lu]\n", ix);
                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~
                      C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/classifier/ei_run_classifier.h: In function 'EI_IMPULSE_ERROR {anonymous}::process_impulse_continuous(ei_impulse_handle_t*, ei::signal_t*, ei_impulse_result_t*, bool)':
                      C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/classifier/ei_run_classifier.h:558:27: error: format '%lu' expects argument of type 'long unsigned int', but argument 2 has type 'size_t' {aka 'unsigned int'} [-Werror=format=]
                      ei_printf("ERR: Out of memory, can't allocate matrix_ptrs[%lu]\n", ix);
                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~
                      C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing\src/edge-impulse-sdk/classifier/ei_run_classifier.h:563:27: error: format '%lu' expects argument of type 'long unsigned int', but argument 2 has type 'size_t' {aka 'unsigned int'} [-Werror=format=]
                      ei_printf("ERR: Out of memory, can't allocate matrix_ptrs[%lu]\n", ix);
                      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~
                      C:\Users\Mahesh\AppData\Local\Temp\arduino_modified_sketch_680639\esp32_camera.ino: In function 'void loop()':
                      C:\Users\Mahesh\AppData\Local\Temp\arduino_modified_sketch_680639\esp32_camera.ino:181:38: warning: missing initializer for member 'ei_impulse_result_t::bounding_boxes_count' [-Wmissing-field-initializers]
                      ei_impulse_result_t result = { 0 };
                      ^
                      C:\Users\Mahesh\AppData\Local\Temp\arduino_modified_sketch_680639\esp32_camera.ino:181:38: warning: missing initializer for member 'ei_impulse_result_t::classification' [-Wmissing-field-initializers]
                      C:\Users\Mahesh\AppData\Local\Temp\arduino_modified_sketch_680639\esp32_camera.ino:181:38: warning: missing initializer for member 'ei_impulse_result_t::anomaly' [-Wmissing-field-initializers]
                      C:\Users\Mahesh\AppData\Local\Temp\arduino_modified_sketch_680639\esp32_camera.ino:181:38: warning: missing initializer for member 'ei_impulse_result_t::timing' [-Wmissing-field-initializers]
                      C:\Users\Mahesh\AppData\Local\Temp\arduino_modified_sketch_680639\esp32_camera.ino:181:38: warning: missing initializer for member 'ei_impulse_result_t::copy_output' [-Wmissing-field-initializers]
                      C:\Users\Mahesh\AppData\Local\Temp\arduino_modified_sketch_680639\esp32_camera.ino:181:38: warning: missing initializer for member 'ei_impulse_result_t::postprocessed_output' [-Wmissing-field-initializers]
                      cc1plus.exe: some warnings being treated as errors
                      Using library mahesh02-project-1_inferencing at version 1.0.1 in folder: C:\Users\Mahesh\OneDrive\Documents\Arduino\libraries\mahesh02-project-1_inferencing
                      exit status 1
                      Error compiling for board AI Thinker ESP32-CAM.

                      • read more
                    • This also happened to me when I was given a task from my company, So what I can recommend is:
                      Ensure that the correct board, "AI Thinker ESP32-CAM," is selected in the Tools menu of your Arduino IDE.
                      If the board is not listed, you may need to install it through the Board Manager. Search for "ESP32" and install the latest version.
                      Ensure that necessary libraries like ESP32-CAM, WiFi, and HTTPClient are installed. You can install them through the Library Manager.

                      Carefully check your code for typos, missing semicolons, or incorrect syntax.
                      Verify that you're using the correct function names and parameters.

                      • read more
                    • Hi @PumpedMedusa, The rage is depends on the Antenna and how much TX power you have.

                      To choose antenna, first you need figure out - where your nodes will be, take a look at the below image. The antenna act like a "torch" if you have more dbi that mean it's focus will be increase and it can reach more distance but the angle it have it less, like a laser.

                      458a3da2-175a-4968-917c-56c5a1b763f8-image.png

                      also, obstacle such as buildings, tress and mountains will affect the signal and deplete it.

                      afe5eba4-b192-4263-8596-80c912fc1f23-image.png

                      So, answer for you question - What is the best LoRa module to use for long distance network? - It's really depends on where you planning to put the nodes and how high you putting the gateway. Let me know know your thoughts.

                      • read more
                    • @Parves-DOMINO Did you able to solve the issue?

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