ClassFlowMakeImage.cpp 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. #include "ClassFlowMakeImage.h"
  2. #include "Helper.h"
  3. #include "ClassLogFile.h"
  4. #include "CImageBasis.h"
  5. #include "ClassControllCamera.h"
  6. #include "esp_wifi.h"
  7. #include <time.h>
  8. // #define DEBUG_DETAIL_ON
  9. // #define WIFITURNOFF
  10. static const char* TAG = "flow_make_image";
  11. esp_err_t ClassFlowMakeImage::camera_capture(){
  12. string nm = namerawimage;
  13. Camera.CaptureToFile(nm);
  14. time(&TimeImageTaken);
  15. localtime(&TimeImageTaken);
  16. return ESP_OK;
  17. }
  18. void ClassFlowMakeImage::takePictureWithFlash(int flashdauer)
  19. {
  20. // für den Fall, dass das Bild geflippt wird, muss es hier zurück gesetzt werden ////
  21. rawImage->width = image_width;
  22. rawImage->height = image_height;
  23. /////////////////////////////////////////////////////////////////////////////////////
  24. printf("Flashdauer: %d\n", flashdauer);
  25. Camera.CaptureToBasisImage(rawImage, flashdauer);
  26. time(&TimeImageTaken);
  27. localtime(&TimeImageTaken);
  28. if (SaveAllFiles) rawImage->SaveToFile(namerawimage);
  29. }
  30. void ClassFlowMakeImage::SetInitialParameter(void)
  31. {
  32. waitbeforepicture = 5;
  33. isImageSize = false;
  34. ImageQuality = -1;
  35. TimeImageTaken = 0;
  36. ImageQuality = 5;
  37. rawImage = NULL;
  38. ImageSize = FRAMESIZE_VGA;
  39. SaveAllFiles = false;
  40. disabled = false;
  41. FixedExposure = false;
  42. namerawimage = "/sdcard/img_tmp/raw.jpg";
  43. }
  44. ClassFlowMakeImage::ClassFlowMakeImage(std::vector<ClassFlow*>* lfc) : ClassFlowImage(lfc, TAG)
  45. {
  46. SetInitialParameter();
  47. }
  48. bool ClassFlowMakeImage::ReadParameter(FILE* pfile, string& aktparamgraph)
  49. {
  50. std::vector<string> zerlegt;
  51. aktparamgraph = trim(aktparamgraph);
  52. int _brightness = -100;
  53. int _contrast = -100;
  54. int _saturation = -100;
  55. if (aktparamgraph.size() == 0)
  56. if (!this->GetNextParagraph(pfile, aktparamgraph))
  57. return false;
  58. if (aktparamgraph.compare("[MakeImage]") != 0) // Paragraph passt nich zu MakeImage
  59. return false;
  60. while (this->getNextLine(pfile, &aktparamgraph) && !this->isNewParagraph(aktparamgraph))
  61. {
  62. zerlegt = this->ZerlegeZeile(aktparamgraph);
  63. if ((zerlegt[0] == "LogImageLocation") && (zerlegt.size() > 1))
  64. {
  65. LogImageLocation = "/sdcard" + zerlegt[1];
  66. isLogImage = true;
  67. }
  68. if ((zerlegt[0] == "ImageQuality") && (zerlegt.size() > 1))
  69. ImageQuality = std::stod(zerlegt[1]);
  70. if ((zerlegt[0] == "ImageSize") && (zerlegt.size() > 1))
  71. {
  72. ImageSize = Camera.TextToFramesize(zerlegt[1].c_str());
  73. isImageSize = true;
  74. }
  75. if ((toUpper(zerlegt[0]) == "SAVEALLFILES") && (zerlegt.size() > 1))
  76. {
  77. if (toUpper(zerlegt[1]) == "TRUE")
  78. SaveAllFiles = true;
  79. }
  80. if ((toUpper(zerlegt[0]) == "WAITBEFORETAKINGPICTURE") && (zerlegt.size() > 1))
  81. {
  82. waitbeforepicture = stoi(zerlegt[1]);
  83. }
  84. if ((toUpper(zerlegt[0]) == "BRIGHTNESS") && (zerlegt.size() > 1))
  85. {
  86. _brightness = stoi(zerlegt[1]);
  87. }
  88. if ((toUpper(zerlegt[0]) == "CONTRAST") && (zerlegt.size() > 1))
  89. {
  90. _contrast = stoi(zerlegt[1]);
  91. }
  92. if ((toUpper(zerlegt[0]) == "SATURATION") && (zerlegt.size() > 1))
  93. {
  94. _saturation = stoi(zerlegt[1]);
  95. }
  96. if ((toUpper(zerlegt[0]) == "FIXEDEXPOSURE") && (zerlegt.size() > 1))
  97. {
  98. if (toUpper(zerlegt[1]) == "TRUE")
  99. FixedExposure = true;
  100. }
  101. if ((toUpper(zerlegt[0]) == "LEDINTENSITY") && (zerlegt.size() > 1))
  102. {
  103. float ledintensity = stof(zerlegt[1]);
  104. ledintensity = min((float) 1, ledintensity);
  105. ledintensity = max((float) 0, ledintensity);
  106. Camera.SetLEDIntensity(ledintensity);
  107. }
  108. }
  109. Camera.SetBrightnessContrastSaturation(_brightness, _contrast, _saturation);
  110. Camera.SetQualitySize(ImageQuality, ImageSize);
  111. image_width = Camera.image_width;
  112. image_height = Camera.image_height;
  113. rawImage = new CImageBasis();
  114. rawImage->CreateEmptyImage(image_width, image_height, 3);
  115. waitbeforepicture_store = waitbeforepicture;
  116. if (FixedExposure && (waitbeforepicture > 0))
  117. {
  118. // printf("Fixed Exposure enabled!\n");
  119. int flashdauer = (int) (waitbeforepicture * 1000);
  120. Camera.EnableAutoExposure(flashdauer);
  121. waitbeforepicture = 0.2;
  122. // flashdauer = (int) (waitbeforepicture * 1000);
  123. // takePictureWithFlash(flashdauer);
  124. // rawImage->SaveToFile("/sdcard/init2.jpg");
  125. }
  126. return true;
  127. }
  128. string ClassFlowMakeImage::getHTMLSingleStep(string host)
  129. {
  130. string result;
  131. result = "Raw Image: <br>\n<img src=\"" + host + "/img_tmp/raw.jpg\">\n";
  132. return result;
  133. }
  134. bool ClassFlowMakeImage::doFlow(string zwtime)
  135. {
  136. string logPath = CreateLogFolder(zwtime);
  137. int flashdauer = (int) (waitbeforepicture * 1000);
  138. #ifdef DEBUG_DETAIL_ON
  139. LogFile.WriteHeapInfo("ClassFlowMakeImage::doFlow - Before takePictureWithFlash");
  140. #endif
  141. #ifdef WIFITURNOFF
  142. esp_wifi_stop(); // to save power usage and
  143. #endif
  144. takePictureWithFlash(flashdauer);
  145. #ifdef WIFITURNOFF
  146. esp_wifi_start();
  147. #endif
  148. #ifdef DEBUG_DETAIL_ON
  149. LogFile.WriteHeapInfo("ClassFlowMakeImage::doFlow - After takePictureWithFlash");
  150. #endif
  151. LogImage(logPath, "raw", NULL, NULL, zwtime, rawImage);
  152. RemoveOldLogs();
  153. #ifdef DEBUG_DETAIL_ON
  154. LogFile.WriteHeapInfo("ClassFlowMakeImage::doFlow - After RemoveOldLogs");
  155. #endif
  156. return true;
  157. }
  158. esp_err_t ClassFlowMakeImage::SendRawJPG(httpd_req_t *req)
  159. {
  160. int flashdauer = (int) (waitbeforepicture * 1000);
  161. time(&TimeImageTaken);
  162. localtime(&TimeImageTaken);
  163. return Camera.CaptureToHTTP(req, flashdauer);
  164. }
  165. ImageData* ClassFlowMakeImage::SendRawImage()
  166. {
  167. CImageBasis *zw = new CImageBasis(rawImage);
  168. ImageData *id;
  169. int flashdauer = (int) (waitbeforepicture * 1000);
  170. Camera.CaptureToBasisImage(zw, flashdauer);
  171. time(&TimeImageTaken);
  172. localtime(&TimeImageTaken);
  173. id = zw->writeToMemoryAsJPG();
  174. delete zw;
  175. return id;
  176. }
  177. time_t ClassFlowMakeImage::getTimeImageTaken()
  178. {
  179. return TimeImageTaken;
  180. }
  181. ClassFlowMakeImage::~ClassFlowMakeImage(void)
  182. {
  183. delete rawImage;
  184. }