yoursunny / esp32cam

OV2640 camera on ESP32-CAM, Arduino library
https://esp32cam.yoursunny.dev
ISC License
473 stars 168 forks source link

RGB problem #50

Closed Hacbakk12 closed 9 months ago

Hacbakk12 commented 9 months ago

Hi,

I'm trying to get an rgb image by setting cfg.setRGB(), but there's always a capture fail. i try to send that image to a webserver specifying that it's raw data, and trying to save it as a .tiff image. By the way, the main issue is that the image capture is not done.

Could you please tell me if I'm misunderstanding something?

Code: Camera config

{
    using namespace esp32cam;
    Config cfg;
    //Para ello primero escojo que utilice los pines definidos del modulo AiThinker que es del cual dispongo
    cfg.setPins(pins::AiThinker);
    //Le digo que mi resolucion sea la maxima, la cual he definido anteriormente (1600x1200)
    cfg.setResolution(hiRes);
    cfg.setBufferCount(1);
    //Le digo que la calidad del JPG sea de 100, para que asi se comprima lo minimo posible, aunque la imagen pesara mas y tardara mas en mandarse
    cfg.setJpeg(80);
    //cfg.setGrayscale();
    //cfg.setRgb();
    // Si todo esta bien que se incialice la camara con la configuracion descrita
    bool ok = Camera.begin(cfg);
    Serial.println(ok ? "CAMERA OK" : "CAMERA FAIL");
    if(ok == false){
      bool ok = Camera.begin(cfg);
    }
  }

Image send

 auto frame = esp32cam::capture();
  // Entonces en caso de que no se haya capturado nada, que me devuelva un mensaje de error, asi como que me deuvleva
  // un http status de 500 el cual significa que hay un error interno en el servidor de que hay un error en el codigo 
  // y para que asi el servidor web sepa que algo ha ido mal durante la request!!
  if(frame == nullptr) {
    Serial.println("CAPTURE FAIL");
    server.send(503, "", "");
    return;

  }
  //En caso de que la foto se haya hecho, entonces que me devuelva un mensaje satisfactorio en el serial port junto con
  //las medidad del ancho, altura y el tamaño de la imagen
  Serial.printf("CAPTURE OK %dx%d %db\n", frame->getWidth(), frame->getHeight(),
                static_cast<int>(frame->size()));
  //Si se ha hecho bien tambien tomara ese tamaño como el tamaño del contenido en el servidor
  server.setContentLength(frame->size());
  //Y devolvera un HTTP 200 el cual significa que todo ha ido bien y despues le digo que el contenido que hay en el servidor web sea una imagen de formato jpeg!!
  // Asi el navegador sabra que tiene que esperar una imagen!

  server.send(200, "image/raw"); // descomentar cuando se quiera enviar una imagen en formato RAW/GRAYSCALE
  //server.send(200, "image/jpeg"); // descomentar cuando se quiea enviar una imagen en formato JPG

  // Acto seguido se manda la imagen al servidor  
    WiFiClient client = server.client();
  frame->writeTo(client);