ESP32-CAM Rebooting when face detection is activated

newton92
Posts: 7
Joined: Sat Apr 17, 2021 11:12 am

ESP32-CAM Rebooting when face detection is activated

Postby newton92 » Sat Apr 17, 2021 11:53 am

Hello all,
I'm new to these IoT systems. I was working with the ESP32 Cam module recently and wanted to use it to detect my face and do an action based on my face like opening a door lock or something like that. The issue I'm facing is, after connecting the module to the router and open the window on the browser, if I turn on the Face Detection & Face Recognition switch and press "Start Streaming" the esp32 cam board reboots. This is happening every time. So I can't detect/enroll any face on this. Regular video streaming is working well.
Can anyone have a solution for this? Please do let me know. It will be very kind and helpful.

Board: ESP32-CAM (AI-Thinker)
Board Version on IDE: 1.0.6
IDE: ArduinoIDE 1.8.13
Code: CameraWebServer from Example

Code: Select all

#include "esp_camera.h"
#include <WiFi.h>

//
// WARNING!!! Make sure that you have either selected ESP32 Wrover Module,
//            or another board which has PSRAM enabled
//

// Select camera model
//#define CAMERA_MODEL_WROVER_KIT
//#define CAMERA_MODEL_ESP_EYE
//#define CAMERA_MODEL_M5STACK_PSRAM
//#define CAMERA_MODEL_M5STACK_WIDE
#define CAMERA_MODEL_AI_THINKER
#define Relay 2
#define Red 13
#define Green 12
#include "camera_pins.h"

const char* ssid = "TechTronics"; //Wifi Name SSID
const char* password = "Tronix1892"; //WIFI Password

void startCameraServer();

boolean matchFace = false;
boolean activateRelay = false;
long prevMillis=0;
int interval = 5000;

void setup() {
  pinMode(Relay,OUTPUT);
  pinMode(Red,OUTPUT);
  pinMode(Green,OUTPUT);
  digitalWrite(Relay,LOW);
  digitalWrite(Red,HIGH);
  digitalWrite(Green,LOW);
  
  Serial.begin(115200);
  Serial.setDebugOutput(true);
  Serial.println();

  camera_config_t config;
  config.ledc_channel = LEDC_CHANNEL_0;
  config.ledc_timer = LEDC_TIMER_0;
  config.pin_d0 = Y2_GPIO_NUM;
  config.pin_d1 = Y3_GPIO_NUM;
  config.pin_d2 = Y4_GPIO_NUM;
  config.pin_d3 = Y5_GPIO_NUM;
  config.pin_d4 = Y6_GPIO_NUM;
  config.pin_d5 = Y7_GPIO_NUM;
  config.pin_d6 = Y8_GPIO_NUM;
  config.pin_d7 = Y9_GPIO_NUM;
  config.pin_xclk = XCLK_GPIO_NUM;
  config.pin_pclk = PCLK_GPIO_NUM;
  config.pin_vsync = VSYNC_GPIO_NUM;
  config.pin_href = HREF_GPIO_NUM;
  config.pin_sscb_sda = SIOD_GPIO_NUM;
  config.pin_sscb_scl = SIOC_GPIO_NUM;
  config.pin_pwdn = PWDN_GPIO_NUM;
  config.pin_reset = RESET_GPIO_NUM;
  config.xclk_freq_hz = 20000000;
  config.pixel_format = PIXFORMAT_JPEG;
  //init with high specs to pre-allocate larger buffers
  if(psramFound()){
    config.frame_size = FRAMESIZE_UXGA;
    config.jpeg_quality = 10;
    config.fb_count = 2;
  } else {
    config.frame_size = FRAMESIZE_SVGA;
    config.jpeg_quality = 12;
    config.fb_count = 1;
  }

#if defined(CAMERA_MODEL_ESP_EYE)
  pinMode(13, INPUT_PULLUP);
  pinMode(14, INPUT_PULLUP);
#endif

  // camera init
  esp_err_t err = esp_camera_init(&config);
  if (err != ESP_OK) {
    Serial.printf("Camera init failed with error 0x%x", err);
    return;
  }

  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 blightness just a bit
    s->set_saturation(s, -2);//lower the saturation
  }
  //drop down frame size for higher initial frame rate
  s->set_framesize(s, FRAMESIZE_QVGA);

#if defined(CAMERA_MODEL_M5STACK_WIDE)
  s->set_vflip(s, 1);
  s->set_hmirror(s, 1);
#endif

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");

  startCameraServer();

  Serial.print("Camera Ready! Use 'http://");
  Serial.print(WiFi.localIP());
  Serial.println("' to connect");
}

void loop() {
  if(matchFace==true && activateRelay==false)
  {
    activateRelay=true;
    digitalWrite(Relay,HIGH);
    digitalWrite(Green,HIGH);
    digitalWrite(Red,LOW);
    prevMillis=millis();
    }
    if (activateRelay == true && millis()-prevMillis > interval)
    {
      activateRelay=false;
      matchFace=false;
      digitalWrite(Relay,LOW);
      digitalWrite(Green,LOW);
      digitalWrite(Red,HIGH);
      }
}
Thanks in advance.

ESP_Sprite
Posts: 9014
Joined: Thu Nov 26, 2015 4:08 am

Re: ESP32-CAM Rebooting when face detection is activated

Postby ESP_Sprite » Mon Apr 19, 2021 7:49 am

Wghat does your serial terminal output before/during/after the reset?

newton92
Posts: 7
Joined: Sat Apr 17, 2021 11:12 am

Re: ESP32-CAM Rebooting when face detection is activated

Postby newton92 » Mon Apr 19, 2021 8:24 am

ESP_Sprite wrote:
Mon Apr 19, 2021 7:49 am
Wghat does your serial terminal output before/during/after the reset?
SS.png
SS.png (46.88 KiB) Viewed 8855 times

newton92
Posts: 7
Joined: Sat Apr 17, 2021 11:12 am

Re: ESP32-CAM Rebooting when face detection is activated

Postby newton92 » Mon Apr 19, 2021 12:03 pm

ESP_Sprite wrote:
Mon Apr 19, 2021 7:49 am
Wghat does your serial terminal output before/during/after the reset?
Any idea about the issue?

ESP_Sprite
Posts: 9014
Joined: Thu Nov 26, 2015 4:08 am

Re: ESP32-CAM Rebooting when face detection is activated

Postby ESP_Sprite » Tue Apr 20, 2021 2:22 am

Looks like memory corruption, likely a bug in the program (use-after-free or something)

newton92
Posts: 7
Joined: Sat Apr 17, 2021 11:12 am

Re: ESP32-CAM Rebooting when face detection is activated

Postby newton92 » Tue Apr 20, 2021 5:22 am

Thanks for the reply. :)
So how can I resolve this issue? Any idea?

alanesq
Posts: 84
Joined: Thu Dec 14, 2017 8:38 pm

Re: ESP32-CAM Rebooting when face detection is activated

Postby alanesq » Tue Apr 20, 2021 5:42 am

It doesn't sound like it is likely the problem in this case but always worth checking that the 5 volt supply to the camera is good.
I have found that it needs a very good power supply and if it is not happy with it you can get all sorts of weird errors, behaviour, reboots etc.. I have often forgot this myself and then spend hours trying to figure out what the problem is...

newton92
Posts: 7
Joined: Sat Apr 17, 2021 11:12 am

Re: ESP32-CAM Rebooting when face detection is activated

Postby newton92 » Tue Apr 20, 2021 5:46 am

alanesq wrote:
Tue Apr 20, 2021 5:42 am
It doesn't sound like it is likely the problem in this case but always worth checking that the 5 volt supply to the camera is good.
I have found that it needs a very good power supply and if it is not happy with it you can get all sorts of weird errors, behaviour, reboots etc.. I have often forgot this myself and then spend hours trying to figure out what the problem is...

Thanks alanesq, I'll definitely check that. :)

EasyTarget
Posts: 2
Joined: Mon May 10, 2021 2:00 pm

Re: ESP32-CAM Rebooting when face detection is activated

Postby EasyTarget » Mon May 10, 2021 2:27 pm

I'm running a few of these cameras, I'm pretty used to debugging them and catering for network and PSU related issues, and this is something new, and recent.

I run an ESP-CAM board with serial debug permanently attached; so I can see that this is a Heap Corruption (software) and only occurs when you enable Face Detection. And is repeatable; enabling face detection will always lead to a heap related crash/reboot within a few frames.

This affects the Stock ESP camera example currently supplied with IDE 1.0.6, there is a Proposed fix here: https://github.com/espressif/arduino-esp32/issues/5128 but it's crude, basically disabling face detection, somewhat defeating the point of having a face detection demo app..

I've actually done a lot on these boards and know their weaknesses regarding Network and PSU. I've got one permanently hooked to a programmer/debugger so I can try fixes easily. And finally you may want to look at my 'fork' of the ESP example, it's somewhat more developed: https://github.com/easytarget/esp32-cam-webserver

EasyTarget
Posts: 2
Joined: Mon May 10, 2021 2:00 pm

Re: ESP32-CAM Rebooting when face detection is activated

Postby EasyTarget » Mon May 10, 2021 6:25 pm

I should have clarified; simply enabling face detection is not enough, a detectable face needs to come into view too.

Who is online

Users browsing this forum: No registered users and 108 guests