2020#include " camera_index_ov2640.h"
2121#include " camera_index_ov3660.h"
2222
23+ // #define DEBUG_STREAM_DATA // Debug: dump info for each stream frame on serial port
24+
2325// Function+Globals needed for led and Lamp levels
2426void flashLED (int flashtime);
2527extern int lampVal; // The current Lamp value
@@ -88,20 +90,22 @@ static ra_filter_t * ra_filter_init(ra_filter_t * filter, size_t sample_size){
8890 return filter;
8991}
9092
91- static int ra_filter_run (ra_filter_t * filter, int value){
92- if (!filter->values ){
93- return value;
94- }
95- filter->sum -= filter->values [filter->index ];
96- filter->values [filter->index ] = value;
97- filter->sum += filter->values [filter->index ];
98- filter->index ++;
99- filter->index = filter->index % filter->size ;
100- if (filter->count < filter->size ) {
101- filter->count ++;
102- }
103- return filter->sum / filter->count ;
104- }
93+ #ifdef DEBUG_STREAM_DATA
94+ static int ra_filter_run (ra_filter_t * filter, int value) {
95+ if (!filter->values ){
96+ return value;
97+ }
98+ filter->sum -= filter->values [filter->index ];
99+ filter->values [filter->index ] = value;
100+ filter->sum += filter->values [filter->index ];
101+ filter->index ++;
102+ filter->index = filter->index % filter->size ;
103+ if (filter->count < filter->size ) {
104+ filter->count ++;
105+ }
106+ return filter->sum / filter->count ;
107+ }
108+ #endif
105109
106110static void rgb_print (dl_matrix3du_t *image_matrix, uint32_t color, const char * str){
107111 fb_data_t fb;
@@ -325,13 +329,17 @@ static esp_err_t stream_handler(httpd_req_t *req){
325329 uint8_t * _jpg_buf = NULL ;
326330 char * part_buf[64 ];
327331 dl_matrix3du_t *image_matrix = NULL ;
328- bool detected = false ;
329332 int face_id = 0 ;
330- int64_t fr_start = 0 ;
331- int64_t fr_ready = 0 ;
332- int64_t fr_face = 0 ;
333- int64_t fr_recognize = 0 ;
334- int64_t fr_encode = 0 ;
333+ #ifdef DEBUG_STREAM_DATA
334+ bool detected = false ;
335+ int64_t fr_start = 0 ;
336+ int64_t fr_face = 0 ;
337+ int64_t fr_recognize = 0 ;
338+ int64_t fr_encode = 0 ;
339+ int64_t fr_ready = 0 ;
340+ #endif
341+
342+ Serial.println (" Stream started:" );
335343
336344 flashLED (75 ); // little flash of status LED
337345
@@ -348,18 +356,22 @@ static esp_err_t stream_handler(httpd_req_t *req){
348356 httpd_resp_set_hdr (req, " Access-Control-Allow-Origin" , " *" );
349357
350358 while (true ){
351- detected = false ;
359+ #ifdef DEBUG_STREAM_DATA
360+ detected = false ;
361+ #endif
352362 face_id = 0 ;
353363 fb = esp_camera_fb_get ();
354364 if (!fb) {
355365 Serial.println (" Camera capture failed" );
356366 res = ESP_FAIL;
357367 } else {
358- fr_start = esp_timer_get_time ();
359- fr_ready = fr_start;
360- fr_face = fr_start;
361- fr_encode = fr_start;
362- fr_recognize = fr_start;
368+ #ifdef DEBUG_STREAM_DATA
369+ fr_start = esp_timer_get_time ();
370+ fr_ready = fr_start;
371+ fr_face = fr_start;
372+ fr_encode = fr_start;
373+ fr_recognize = fr_start;
374+ #endif
363375 if (!detection_enabled || fb->width > 400 ){
364376 if (fb->format != PIXFORMAT_JPEG){
365377 bool jpeg_converted = frame2jpg (fb, 80 , &_jpg_buf, &_jpg_buf_len);
@@ -385,20 +397,28 @@ static esp_err_t stream_handler(httpd_req_t *req){
385397 Serial.println (" fmt2rgb888 failed" );
386398 res = ESP_FAIL;
387399 } else {
388- fr_ready = esp_timer_get_time ();
400+ #ifdef DEBUG_STREAM_DATA
401+ fr_ready = esp_timer_get_time ();
402+ #endif
389403 box_array_t *net_boxes = NULL ;
390404 if (detection_enabled){
391405 net_boxes = face_detect (image_matrix, &mtmn_config);
392406 }
393- fr_face = esp_timer_get_time ();
394- fr_recognize = fr_face;
407+ #ifdef DEBUG_STREAM_DATA
408+ fr_face = esp_timer_get_time ();
409+ fr_recognize = fr_face;
410+ #endif
395411 if (net_boxes || fb->format != PIXFORMAT_JPEG){
396412 if (net_boxes){
397- detected = true ;
413+ #ifdef DEBUG_STREAM_DATA
414+ detected = true ;
415+ #endif
398416 if (recognition_enabled){
399417 face_id = run_face_recognition (image_matrix, net_boxes);
400418 }
401- fr_recognize = esp_timer_get_time ();
419+ #ifdef DEBUG_STREAM_DATA
420+ fr_recognize = esp_timer_get_time ();
421+ #endif
402422 draw_face_boxes (image_matrix, net_boxes, face_id);
403423 free (net_boxes->score );
404424 free (net_boxes->box );
@@ -415,7 +435,9 @@ static esp_err_t stream_handler(httpd_req_t *req){
415435 _jpg_buf = fb->buf ;
416436 _jpg_buf_len = fb->len ;
417437 }
418- fr_encode = esp_timer_get_time ();
438+ #ifdef DEBUG_STREAM_DATA
439+ fr_encode = esp_timer_get_time ();
440+ #endif
419441 }
420442 dl_matrix3du_free (image_matrix);
421443 }
@@ -442,25 +464,26 @@ static esp_err_t stream_handler(httpd_req_t *req){
442464 if (res != ESP_OK){
443465 break ;
444466 }
445- int64_t fr_end = esp_timer_get_time ();
446467
447- int64_t ready_time = (fr_ready - fr_start)/1000 ;
448- int64_t face_time = (fr_face - fr_ready)/1000 ;
449- int64_t recognize_time = (fr_recognize - fr_face)/1000 ;
450- int64_t encode_time = (fr_encode - fr_recognize)/1000 ;
451- int64_t process_time = (fr_encode - fr_start)/1000 ;
452-
453- int64_t frame_time = fr_end - last_frame;
454- last_frame = fr_end;
455- frame_time /= 1000 ;
456- uint32_t avg_frame_time = ra_filter_run (&ra_filter, frame_time);
457- Serial.printf (" MJPG: %uB %ums (%.1ffps), AVG: %ums (%.1ffps), %u+%u+%u+%u=%u %s%d\n " ,
458- (uint32_t )(_jpg_buf_len),
459- (uint32_t )frame_time, 1000.0 / (uint32_t )frame_time,
460- avg_frame_time, 1000.0 / avg_frame_time,
461- (uint32_t )ready_time, (uint32_t )face_time, (uint32_t )recognize_time, (uint32_t )encode_time, (uint32_t )process_time,
462- (detected)?" DETECTED " :" " , face_id
463- );
468+ #ifdef DEBUG_STREAM_DATA
469+ int64_t fr_end = esp_timer_get_time ();
470+ int64_t ready_time = (fr_ready - fr_start)/1000 ;
471+ int64_t face_time = (fr_face - fr_ready)/1000 ;
472+ int64_t recognize_time = (fr_recognize - fr_face)/1000 ;
473+ int64_t encode_time = (fr_encode - fr_recognize)/1000 ;
474+ int64_t process_time = (fr_encode - fr_start)/1000 ;
475+ int64_t frame_time = fr_end - last_frame;
476+ last_frame = fr_end;
477+ frame_time /= 1000 ;
478+ uint32_t avg_frame_time = ra_filter_run (&ra_filter, frame_time);
479+ Serial.printf (" MJPG: %uB %ums (%.1ffps), AVG: %ums (%.1ffps), %u+%u+%u+%u=%u %s%d\n " ,
480+ (uint32_t )(_jpg_buf_len),
481+ (uint32_t )frame_time, 1000.0 / (uint32_t )frame_time,
482+ avg_frame_time, 1000.0 / avg_frame_time,
483+ (uint32_t )ready_time, (uint32_t )face_time, (uint32_t )recognize_time, (uint32_t )encode_time, (uint32_t )process_time,
484+ (detected)?" DETECTED " :" " , face_id
485+ );
486+ #endif
464487 }
465488
466489 last_frame = 0 ;
@@ -545,7 +568,7 @@ static esp_err_t cmd_handler(httpd_req_t *req){
545568 else if (!strcmp (variable, " lamp" ) && (lampVal != -1 )) {
546569 Serial.print (" Lamp: " );
547570 lampVal = val;
548- if (lampVal > 100 ) lampVal = 100 ; // normalise 0-255 (pwm range) just in case..
571+ if (lampVal > 100 ) lampVal = 100 ; // normalise 0-255 (pwm range) just in case..f
549572 if (lampVal < 0 ) lampVal = 0 ;
550573 // https://diarmuid.ie/blog/pwm-exponential-led-fading-on-arduino-or-other-platforms
551574 int brightness = pow (2 , (lampVal / lampR)) - 1 ;
@@ -605,7 +628,6 @@ static esp_err_t status_handler(httpd_req_t *req){
605628 p+=sprintf (p, " \" face_recognize\" :%u," , recognition_enabled);
606629 p+=sprintf (p, " \" cam_name\" :\" %s\" ," , myName);
607630 p+=sprintf (p, " \" code_ver\" :\" %s\" ," , myVer);
608- // Serial.printf("Status Rotate \"%s\"\n",myRotation);
609631 p+=sprintf (p, " \" rotate\" :\" %s\" " , myRotation);
610632 *p++ = ' }' ;
611633 *p++ = 0 ;
0 commit comments