Recents in Beach


Receba o meu conteúdo GRATUITAMENTE


ESP32 com Câmera e Reconhecimento Facial



O ESP32-CAM é o nosso assunto de hoje, isso por conta de inúmeras sugestões no meu canal do Youtube. Mostro para você dois modelos, mas falo especificamente do funcionamento de câmeras no ESP32. Trago também informações sobre um algoritmo de face detection, que é uma API de teste, portanto, necessitaria de modificação para uma aplicação direta no nosso exemplo.






Montagem






Demonstração

Na demonstração que trago no vídeo, você confere o funcionamento de uma câmera, o registro de um usuário e o reconhecimento de um rosto como cadastrado ou não.







Exemplo que vem com o ESP32

Na IDE do Arduino vá em Arquivo->Exemplos->Exemplos para ESP32 Wrover-> ESP32->Camera
->CameraWebServer. O código a seguir é o mesmo deste exemplo com algumas mudanças. O código do exemplo é constituído de três arquivos: ESP32_Camera.ino (configurações), app_httpd.cpp (webserver e manipulação da câmera) e camera_index.h (bytes da página html)




ESP32_Camera.ino

Includes e defines

#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_M5STACK_PSRAM
#define CAMERA_MODEL_AI_THINKER
// #define CAMERA_MODEL_TTGO

//Use 1 para que o ESP crie uma rede com o ssid e password
//Use 0 para o ESP se conectar a uma rede que tenha o ssid e password indicado
#define ACCESS_POINT 1
const char* ssid = "CAM2";
const char* password = "12345678";


#if defined(CAMERA_MODEL_WROVER_KIT)

#if defined(CAMERA_MODEL_WROVER_KIT)
#define PWDN_GPIO_NUM    -1
#define RESET_GPIO_NUM   -1
#define XCLK_GPIO_NUM    21
#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      19
#define Y4_GPIO_NUM      18
#define Y3_GPIO_NUM       5
#define Y2_GPIO_NUM       4
#define VSYNC_GPIO_NUM   25
#define HREF_GPIO_NUM    23
#define PCLK_GPIO_NUM    22


#elif defined(CAMERA_MODEL_M5STACK_PSRAM)

#elif defined(CAMERA_MODEL_M5STACK_PSRAM)
#define PWDN_GPIO_NUM     -1
#define RESET_GPIO_NUM    15
#define XCLK_GPIO_NUM     27
#define SIOD_GPIO_NUM     25
#define SIOC_GPIO_NUM     23

#define Y9_GPIO_NUM       19
#define Y8_GPIO_NUM       36
#define Y7_GPIO_NUM       18
#define Y6_GPIO_NUM       39
#define Y5_GPIO_NUM        5
#define Y4_GPIO_NUM       34
#define Y3_GPIO_NUM       35
#define Y2_GPIO_NUM       32
#define VSYNC_GPIO_NUM    22
#define HREF_GPIO_NUM     26
#define PCLK_GPIO_NUM     21


#elif defined(CAMERA_MODEL_AI_THINKER)

#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


#elif defined(CAMERA_MODEL_TTGO)

#elif defined(CAMERA_MODEL_TTGO)
#define PWDN_GPIO_NUM     0
#define RESET_GPIO_NUM    15
#define XCLK_GPIO_NUM     27
#define SIOD_GPIO_NUM     25
#define SIOC_GPIO_NUM     23

#define Y9_GPIO_NUM       19
#define Y8_GPIO_NUM       36
#define Y7_GPIO_NUM       18
#define Y6_GPIO_NUM       39
#define Y5_GPIO_NUM       5
#define Y4_GPIO_NUM       34
#define Y3_GPIO_NUM       35
#define Y2_GPIO_NUM       17
#define VSYNC_GPIO_NUM    22
#define HREF_GPIO_NUM     26
#define PCLK_GPIO_NUM     21
#else
#error "Camera model not selected"
#endif


startCameraServer e Setup

void startCameraServer();

void setup() {
  Serial.begin(115200);
  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;



psramFound

//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;
  }

  // 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;
  }

  //drop down frame size for higher initial frame rate
  sensor_t * s = esp_camera_sensor_get();
  s->set_framesize(s, FRAMESIZE_QVGA);



ACCESS_POINT

if(ACCESS_POINT) {
    WiFi.softAP(ssid, password);
  }
  else
  {
    WiFi.begin(ssid, password);

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

    Serial.println("");
    Serial.println("WiFi connected");
  }

startCameraServer

startCameraServer();

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


Loop

void loop() {

}



Modificar configurações





Testando

Abra o navegador e digite o ip que aparece no Monitor Serial (192.168.4.1 neste exemplo)
http://192.168.4.1 stream de vídeo com configuração
http://192.168.4.1/capture captura uma imagem fixa
http://192.168.4.1/status mostra as configurações atuais
http://192.168.4.1:81/stream apenas o vídeo






FAÇA O DOWNLOAD DOS ARQUIVOS

INO

PDF





Postar um comentário

49 Comentários

  1. Muito bacana, parabéns! Queria entender se tem como criar uma ação após a detecção de um rosto. Por exemplo, abrir uma porta. Obrigado pelos vídeos e excelente trabalho.

    ResponderExcluir
    Respostas
    1. Olá! Estou com o mesmo problema, você conseguiu implementar esse seu projeto?

      Excluir
    2. Olá Sanderson e Felipe, tudo bem? Vocês conseguiram realizar essa implementação? Estou pensando em fazer algo parecido, porém estou encontrando muitas dificuldades...

      Excluir
    3. DÊem uma olhada nesse vídeo e vejam se atende... https://www.youtube.com/watch?v=mu3-Sff0B9w&t=267s

      Excluir
    4. Segue link (em inglês) https://robotzero.one/esp32-face-door-entry/

      Excluir
  2. Poderia fazer um projeto, explorar mais a placa ? quem sabe negar um acesso...

    ResponderExcluir
  3. Olá, alguém poderia me informar quais pinos desse módulo eu posso usar para conectar outros sensores, servos, etc ?

    ResponderExcluir
  4. Hi, thanks for explanation. I have ESP32cam and I want to use it as a alarm in my garage. Do you know how to record short video on SD card after motion detection ?

    ResponderExcluir
    Respostas
    1. You can use a Raspberry Pi running motionEye (https://github.com/ccrisan/motioneye) for detect motion and save video or images when motion is detected. Configuring motionEye you can connect the ESP32-CAM with http://ip_esp32cam:81/stream.

      Excluir
  5. Oi, sabe como posso fazer para testar se o rosto é reconhecido pela câmera, dai ele liga um led, se não reconhecer ele apaga, por exemplo?

    ResponderExcluir
    Respostas
    1. Olá, tudo bem? Vocês conseguiu realizar essa implementação? Estou pensando em fazer algo parecido, porém estou encontrando muitas dificuldades...

      Excluir
  6. Estou com um problema. Eu gravo e consigo ver o vídeo da camera do ESP, e também altero todas as configurações da camera, mas não está fazendo o reconhecimento facial.
    Testei com duas placas que tenho e acontece a mesma coisa nas duas placas.
    E sim, eu ativei o reconhecimento facial. O que há de errado?

    ResponderExcluir
    Respostas
    1. Oi estou com o mesmo problema, tenho cinco placas e em todas a mesma coisa, estou desconfiando do modelo da câmera porquê nenhuma delas é OV2640. Se conseguiu resolver, por favor comente

      Excluir
    2. estou com o mesmo problema, não faz o reconhecimento facial

      Excluir
    3. Você deve e ir "Ferramentas" > "Gerenciador de Placas" e procurar o ESP32, selecionar a versão 1.0.1 e instalar

      Excluir
  7. Oi, Usei minha câmera em uma rede tim 2.4/5Ghz porém não conecta, será que temos um problema com banda ja testei em outras operadora que funcionou corretamente, li o datasheet que indica 2.4 como usi mas não fala sobre routear banda automaticamente

    ResponderExcluir
  8. Oi estou com o mesmo problema, tenho cinco placas e em todas a mesma coisa, estou desconfiando do modelo da câmera porquê nenhuma delas é OV2640.

    ResponderExcluir
  9. Você deve e ir "Ferramentas" > "Gerenciador de Placas" e procurar o ESP32, selecionar a versão 1.0.1 e instalar

    ResponderExcluir
  10. Olá Ariel Sam . Tentei i stalar a versão 1.0.1 e o que acontece é que não mais aparece o skatch esp web connection e se eu tento colar o sckatch ele dá falha de esp_camera.h . Não sei mais por onde correr. Preciso resolver isso. Sinuca de bico por aqui. Roda perfeito mas não aparece a interface gráfica, quadrado de reconhecimento na face. Poderia me dar maiores dicas? Se possível alguém add meu zap seria legal pra me ajudar. 19 982568651 . Agradeço muito o apoio. Forte abraço. No aguardo

    ResponderExcluir
  11. há como o esp-cam reconhecer peças? tipo materiais além de rostos? se puder trazer retorno a esta pergunta agradeço!

    ResponderExcluir
    Respostas
    1. Espero que este video o ajude, mas não é com essa placa não. https://www.youtube.com/watch?v=aimSGOAUI8Y
      Procure por PIXY CAM (https://pixycam.com/pixy-cmucam5/)

      Excluir
  12. Olá bom dia, consegui programar e achar o IP, mas quando coloco no navegador não funciona.
    Teria alguma ajuda?

    ResponderExcluir
  13. Bom dia, utilizei o programa, fiz download corretamente e abre o navegador a pagina web de configuração, porem não aparece o vídeo...testando também não abre se eu direcionar para porta 81...ex: 10.0.0.104:81/stream....alguem sabe como resolver?

    ResponderExcluir
  14. aparece este erro na serial :
    [E][camera.c:1344] esp_camera_fb_get(): Failed to get the frame on time!

    ResponderExcluir
  15. Qual o nome desse conector fêmea pra alimentação ?
    Tenho uma fonte USB, porém, não sei como ligar ela a placa.

    ResponderExcluir
  16. Olá galera! E possível eu usar esse código pra identificar objetos? Tipo compara uma foto de um sem ter um rosto?

    ResponderExcluir
  17. Muito bom o POST, porém preciso de mais uma ajuda. A minha placa é a GM - diymore - www.diymore.cc qual é a configuração da minha placa ESP32CAM??? Não estou conseguindo conexão com ela. Você poderia me ajudar?

    ResponderExcluir
  18. Eu implementei um exemplo q encontrei no Youtube q funcionou bem mas depois a camera parou de funcionar... nao sei o q houve porem, ela funciona com outros projetos. Segue o link:
    https://www.youtube.com/watch?v=mu3-Sff0B9w&t=267s
    Se alguem puder ajudar, fica meu obrigado.

    ResponderExcluir
  19. AO executar apresenta o seguinte erro, poderia me ajudar?

    sketch\ESP32_Camera.ino.cpp.o:(.literal._Z5setupv+0x2c): undefined reference to `startCameraServer()'

    ResponderExcluir
    Respostas
    1. Você tem que pegar o Exemplos - ESP32 - Camera - CameraWebserver (que tem 4 arquivos nele e copiar o código do Fernando no primerio (seleciona tudo e cola por cima). Eu estava dando a mesma bobeada que você! Aí vai funcionar! 10!!!! Fernando arrebenta!

      Excluir
  20. Ola amigos,

    alguém conseguiu por para funcionar o ESP32-Cam? O meu tá dando um erro...

    ResponderExcluir
  21. Senhores e Senhoras, bom dia. Para informar e aguardar alguma dica.
    1- Usei as seguintes opções:
    #define CAMERA_MODEL_AI_THINKER.
    2- Usando na listagem da IDE Arduino:
    ESP WROVER Module, Hugge APP (3MB NoOTA/2M…..).

    Consegui transferir tudo para o ESP32 S (2AHMR-ESP32S) e rodar um painel com controles diversos (Chrome e FireFox). Ao disparar a imagem (Start Stream) veio a tal tela violeta. Desconfiei ser probloema do sketch ou da placa. Testei com varios sketchs de varios foruns e continua o mesmo sintoma. Passando no painel, opção: SPECIAL EFFECT para tons de cinza (GrayScale) a imagem começou a aparecer. Vi que este sensor não tem muita sensibilidade, precisando de muita luz (a não ser que seja defeito). Desabilitei AEC SENSOR e aumentei EXPOSURE até a metade:apareceu imagem(tons de cinzas). Se optar por NO EFFECT a imagem fica toda VIOLETA e objetos sem côr.
    Sei que a imagem normal não é assim.

    Uma foto da imagem neste link: http://www.olintronica.com/imagens/ESP32_Olinto.jpg

    Alguma dica estou a disposição.
    Obrigado

    ResponderExcluir
    Respostas
    1. Continuando: Adicionei IP FIXO ao sketch e portas diferentes de 80 para facilitar o acesso externo (internet).

      Excluir
  22. Bom dia a todos. Como disse em outros foruns, obtive sucesso em todas as transferencias de sketch. Ainda estou com problemas na imagem. Ela inicia em violeta solido. Porem alterando para TONS DE CINZA, desabilitando AEC SENSOR e aumentando a EXPOSURE (exposição) vejo uma imagem melhor sem cores.
    Ultima tentativa: Adquirir outra ESP32 CAM do mesmo fornecedor para testes. Se for hardware defeituoso, troco.
    Aproveitando estas indas e vindas incrementei coisas que podem ajudar nos projetos de vocês:
    Como já penso em ter várias ESP32 e monitoramento multiplo por aplicativo do celular, adicionei definições para IP FIXO, GATEWAY e MASCARA no squetch exemplo da IDE.
    Ficou assim:
    const char* ssid = "xxxxxxxxx";//original
    const char* password = "yyyyyyyy"; //original
    //implementado em 21jan20//
    //Declarando os endereços//
    IPAddress ip(192,168,x,yyy); //endereço da camera ESP32_001 //NOVO
    IPAddress gateway(192,168,x,1); //roteador //NOVO
    IPAddress subnet(255,255,255,0);//mascara //NOVO
    IPAddress dns(8,8,8,8); //NOVO

    É necessário adicionar no sketch:
    WiFi.begin(ssid, password); // original
    //implementado em 21jan20//
    WiFi.config(ip, gateway, subnet, dns); // NOVO

    Tambem alterei a porta de video (STREAM) editando o arquivo "app_httpd.cpp" linhas 656/657:
    config.server_port += 1; //onde +=1=porta 81(original)--mudar para" = zzzzz"
    config.ctrl_port += 1;
    Por precaução gravei o original como "app_httpd.ORI".
    Estas informações foram adquiridas por pesquisas na web.
    Se precisarem tenho as fontes.

    Qualquer duvida estou a disposição.
    Olinto Godinho

    ResponderExcluir
    Respostas
    1. Resolvido. Era defeito no captador de imagens (camerazinha). Comprei outro kit ESP32CAM e funcionou normalmente. Troquei o captador e deu problema no kit novo.
      Um abraço a todos.

      Excluir
  23. Bom dia Sr. Fernando.
    Estou fazendo um projeto em que modifico o sketch ESP32_Camera.ino.
    A finalidade é estudar o I2S usando o DMA.
    Uso a IDE do Arduíno na versão 1.8.9.
    Estou tendo os erros :

    [E][camera.c:1049] camera_probe(): Detected camera not supported.
    [E][camera.c:1249] esp_camera_init(): Camera probe failed with error 0x20004

    Até aqui tudo bem, pois não tenho câmera plugada no ESP32.

    A minha dificuldade é descobrir de onde vem estas mensagens com prefixo [E][camera.c:xxxx],
    pois não encontrei o arquivo (camera.c) no meu PC.

    Na internet, encontrei este arquivo,
    " https://github.com/espressif/esp32-camera/blob/master/driver/camera.c ",
    mas é para a IDE ESP-IDF.

    Por exemplo, se procurar neste arquivo, encontro a msg de erro " Detected camera not supported. " ,
    na linha 1053.

    No arquivo camera.h, existem vários protótipos se funções mas não encontro as funções,
    pois elas estão no arquivo camera.c

    Vc consegue me ajudar nesta questão:
    Qdo uso a IDE do Arduíno de onde vem as msgs do camera.c?

    att:
    Rui

    ResponderExcluir
    Respostas
    1. Mano estou com um erro semelhante, tudo indica que nossos modulos da camera está com problema.

      Excluir
    2. Estou com o mesmo erro. conseguiram resolver?

      Excluir
  24. Bom dia caros amigos,

    Já tente inumeras vezes conectar com meu ESP 32 CAM, no entanto o mesmo fica em constante loop apresentando no monitor serial:

    rst:0x3 (SW_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
    configsip: 0, SPIWP:0xee
    clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
    mode:DIO, clock div:1
    load:0x3fff0018,len:4
    load:0x3fff001c,len:1100
    load:0x40078000,len:9232
    load:0x40080400,len:6400
    entry 0x400806a8

    alguém passou por isso que possa me dá alguma luz?

    ResponderExcluir
    Respostas
    1. saulo passei por isso , apnhei mas aprendi , use uma fonte externa de 5v ligado no gnd do esp junto com o ftdi e o positivo no 5v do esp a demais ligaçao continua normal

      Excluir
  25. Bom dia Saulo. Tenta utilizar o exemplo do Fernando acima: "QIO" e "Hughe APP (3M.......)". Talvez seja isto.

    ResponderExcluir
  26. Bom dia a todos. UTILIZANDO A FUNÇÃO "CAPTURE" da ESP32CAM.
    Consegui visualizar movimentos gerados pela ESP32CAM utilizando uma rotina (script) que captura a imagem gerada pelo endereço "192.168.0.xxx/capture" de modo contínuo simulando movimento.
    O problema é que só funciona em modo local (LAN), por enquanto (rs rs rs).
    Pra isso gerei uma pagina HTML/PHP/script que funciona tanto em modo local como se hospeda-la na nuvem. Logo que resolver o problema de só funcionar na LAN, informarei a todos.
    Quem desejar o conteudo do arquio html/php entre em contato que enviarei.
    Abs

    ResponderExcluir
    Respostas
    1. Oi amigo, estou com um projeto similar, passa teu contato ou me envia um e-mail para everton@link2.pro para trocarmos informações.

      Excluir
  27. Eu queria saber se é possível utilizar esse ESP-CAM e adicionar sensores de temperatura e umidade e mais uns 5 relés. Pelo q li até agora ele só tem três pinos GPIO sobrando. teria como utilizar aquele expansor de portas?

    ResponderExcluir
  28. Gostaria de saber qual o tipo de rede neural do ESP32-CAM e como esta funciona?

    ResponderExcluir
  29. otima ideia, estou fazendo uma fechadura com arduino uno, tenho 13 anos e gostaria de implementar uma camera para o projeto, como eu poderia fazer, e qual circuito eu poderia fazer???? se conseguirem de preferencia fassom um exemplo no tinkercad

    ResponderExcluir
  30. Este comentário foi removido pelo autor.

    ResponderExcluir
  31. Pessoal, falei no comentário anterior que o código estava errado. NÃO!!! Eu é que coloquei errado! O código é show!!!! Eu estava era com uma câmera defeituosa. Chegou outra placa pra mim e funcionou que foi uma maravilha. A placa é boa, mas as câmeras que colocam... vi vários forums do pessoal reclamando! Pode ter certeza de que, se sua imagem tá ruim, é a câmera!

    ResponderExcluir