Gesichtserkennung mit ESP32-WLAN-Kameraboards ab 15 Euro

Begonnen von JoWiemann, 09 Januar 2019, 18:54:53

Vorheriges Thema - Nächstes Thema

Papa Romeo

...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
und...never change a running System...no Updates if not necessary

Nexium

Zitat von: Papa Romeo am 22 August 2019, 10:27:49
Welche Kamera nutzt du ?
Welche IDE ?

Ich hab das ganze mit zwei Arduino IDEs getestet.

Aktuell die 1.8.9 und auf einem weiterem Rechner (auf den hab ich momentan leider kein Zugriff, erst heute Abend wieder) dort ist aber eine ältere IDE installiert. Version kann ich heute Abend nachliefern.

Kamera nutze ich die CAMERA_MODEL_AI_THINKER.

Den gleichen Fehler (auf den ersten Blick) hatte ich in beiden IDEs

Arduino: 1.8.9 (Windows 10), Board: "ESP32 Wrover Module, Face Recognition (2621440 bytes with OTA), QIO, 80MHz, 921600, None"

ESP32_CAM:287:26: error: 'face_id_name_list' was not declared in this scope

static inline int do_enrollment(face_id_name_list *face_list, dl_matrix3d_t *new_id)

                          ^

ESP32_CAM:287:45: error: 'face_list' was not declared in this scope

static inline int do_enrollment(face_id_name_list *face_list, dl_matrix3d_t *new_id)

                                             ^

ESP32_CAM:287:70: error: expected primary-expression before '*' token

static inline int do_enrollment(face_id_name_list *face_list, dl_matrix3d_t *new_id)

                                                                      ^

ESP32_CAM:287:71: error: 'new_id' was not declared in this scope

static inline int do_enrollment(face_id_name_list *face_list, dl_matrix3d_t *new_id)

                                                                       ^

ESP32_CAM:287:77: error: expression list treated as compound expression in initializer [-fpermissive]

static inline int do_enrollment(face_id_name_list *face_list, dl_matrix3d_t *new_id)

                                                                             ^

C:\Users\ETB-Electronics 3\Desktop\ESP32_CAM\ESP32_CAM.ino: In function 'mtmn_config_t app_mtmn_config()':

ESP32_CAM:99:15: error: 'struct mtmn_config_t' has no member named 'type'

   mtmn_config.type = FAST;

               ^

ESP32_CAM:99:22: error: 'FAST' was not declared in this scope

   mtmn_config.type = FAST;

                      ^

ESP32_CAM:102:15: error: 'struct mtmn_config_t' has no member named 'pyramid_times'

   mtmn_config.pyramid_times = 4;

               ^

C:\Users\ETB-Electronics 3\Desktop\ESP32_CAM\ESP32_CAM.ino: At global scope:

ESP32_CAM:116:1: error: 'face_id_name_list' does not name a type

face_id_name_list st_face_list;

^

ESP32_CAM:124:20: error: 'ENROLL_NAME_LEN' was not declared in this scope

   char enroll_name[ENROLL_NAME_LEN];

                    ^

C:\Users\ETB-Electronics 3\Desktop\ESP32_CAM\ESP32_CAM.ino: In function 'void app_facenet_main()':

ESP32_CAM:283:22: error: 'st_face_list' was not declared in this scope

   face_id_name_init(&st_face_list, FACE_ID_SAVE_NUMBER, ENROLL_CONFIRM_TIMES);

                      ^

ESP32_CAM:283:77: error: 'face_id_name_init' was not declared in this scope

   face_id_name_init(&st_face_list, FACE_ID_SAVE_NUMBER, ENROLL_CONFIRM_TIMES);

                                                                             ^

ESP32_CAM:285:50: error: 'read_face_id_from_flash_with_name' was not declared in this scope

   read_face_id_from_flash_with_name(&st_face_list);

                                                  ^

C:\Users\ETB-Electronics 3\Desktop\ESP32_CAM\ESP32_CAM.ino: At global scope:

ESP32_CAM:287:33: error: 'do_enrollment' declared as an 'inline' variable

static inline int do_enrollment(face_id_name_list *face_list, dl_matrix3d_t *new_id)

                                 ^

ESP32_CAM:287:33: error: redefinition of 'int do_enrollment'

C:\Users\ETB-Electronics 3\Desktop\ESP32_CAM\ESP32_CAM.ino:287:12: note: 'int do_enrollment' previously defined here

static inline int do_enrollment(face_id_name_list *face_list, dl_matrix3d_t *new_id)

            ^

ESP32_CAM:287:33: error: 'face_id_name_list' was not declared in this scope

static inline int do_enrollment(face_id_name_list *face_list, dl_matrix3d_t *new_id)

                                 ^

ESP32_CAM:287:52: error: 'face_list' was not declared in this scope

static inline int do_enrollment(face_id_name_list *face_list, dl_matrix3d_t *new_id)

                                                    ^

ESP32_CAM:287:77: error: expected primary-expression before '*' token

static inline int do_enrollment(face_id_name_list *face_list, dl_matrix3d_t *new_id)

                                                                             ^

ESP32_CAM:287:78: error: 'new_id' was not declared in this scope

static inline int do_enrollment(face_id_name_list *face_list, dl_matrix3d_t *new_id)

                                                                              ^

C:\Users\ETB-Electronics 3\Desktop\ESP32_CAM\ESP32_CAM.ino: In function 'esp_err_t send_face_list(websockets::WebsocketsClient&)':

ESP32_CAM:300:3: error: 'face_id_node' was not declared in this scope

   face_id_node *head = st_face_list.head;

   ^

ESP32_CAM:300:17: error: 'head' was not declared in this scope

   face_id_node *head = st_face_list.head;

                 ^

ESP32_CAM:300:24: error: 'st_face_list' was not declared in this scope

   face_id_node *head = st_face_list.head;

                        ^

C:\Users\ETB-Electronics 3\Desktop\ESP32_CAM\ESP32_CAM.ino: In function 'esp_err_t delete_all_faces(websockets::WebsocketsClient&)':

ESP32_CAM:311:39: error: 'st_face_list' was not declared in this scope

   delete_face_all_in_flash_with_name(&st_face_list);

                                       ^

ESP32_CAM:311:51: error: 'delete_face_all_in_flash_with_name' was not declared in this scope

   delete_face_all_in_flash_with_name(&st_face_list);

                                                   ^

C:\Users\ETB-Electronics 3\Desktop\ESP32_CAM\ESP32_CAM.ino: In function 'void handle_message(websockets::WebsocketsClient&, websockets::WebsocketsMessage)':

ESP32_CAM:326:39: error: 'ENROLL_NAME_LEN' was not declared in this scope

     char person[FACE_ID_SAVE_NUMBER * ENROLL_NAME_LEN] = {0,};

                                       ^

ESP32_CAM:327:41: error: 'person' was not declared in this scope

     msg.data().substring(8).toCharArray(person, sizeof(person));

                                         ^

ESP32_CAM:328:20: error: 'struct httpd_resp_value' has no member named 'enroll_name'

     memcpy(st_name.enroll_name, person, strlen(person) + 1);

                    ^

ESP32_CAM:336:17: error: 'ENROLL_NAME_LEN' was not declared in this scope

     char person[ENROLL_NAME_LEN * FACE_ID_SAVE_NUMBER];

                 ^

ESP32_CAM:337:41: error: 'person' was not declared in this scope

     msg.data().substring(7).toCharArray(person, sizeof(person));

                                         ^

ESP32_CAM:338:40: error: 'st_face_list' was not declared in this scope

     delete_face_id_in_flash_with_name(&st_face_list, person);

                                        ^

ESP32_CAM:338:60: error: 'delete_face_id_in_flash_with_name' was not declared in this scope

     delete_face_id_in_flash_with_name(&st_face_list, person);

                                                            ^

C:\Users\ETB-Electronics 3\Desktop\ESP32_CAM\ESP32_CAM.ino: In function 'void loop()':

ESP32_CAM:373:53: error: 'get_face_id' was not declared in this scope

         { out_res.face_id = get_face_id(aligned_face);

                                                     ^

ESP32_CAM:375:11: error: 'face_id_node' was not declared in this scope

           face_id_node *f = recognize_face_with_name(&st_face_list, out_res.face_id);

           ^

ESP32_CAM:375:25: error: 'f' was not declared in this scope

           face_id_node *f = recognize_face_with_name(&st_face_list, out_res.face_id);

                         ^

ESP32_CAM:375:55: error: 'st_face_list' was not declared in this scope

           face_id_node *f = recognize_face_with_name(&st_face_list, out_res.face_id);

                                                       ^

ESP32_CAM:375:84: error: 'recognize_face_with_name' was not declared in this scope

           face_id_node *f = recognize_face_with_name(&st_face_list, out_res.face_id);

                                                                                    ^

ESP32_CAM:410:55: error: 'get_face_id' was not declared in this scope

             out_res.face_id = get_face_id(aligned_face);

                                                       ^

ESP32_CAM:417:53: error: 'st_face_list' was not declared in this scope

               int left_sample_face = do_enrollment(&st_face_list, out_res.face_id);

                                                     ^

ESP32_CAM:417:82: error: 'do_enrollment' cannot be used as a function

               int left_sample_face = do_enrollment(&st_face_list, out_res.face_id);

                                                                                  ^

ESP32_CAM:419:118: error: 'struct httpd_resp_value' has no member named 'enroll_name'

               sprintf(enrolling_message, "SAMPLE NUMBER %d FOR %s", ENROLL_CONFIRM_TIMES - left_sample_face, st_name.enroll_name);

                                                                                                                      ^

ESP32_CAM:431:51: error: 'st_face_list' was not declared in this scope

             if (g_state == START_RECOGNITION  && (st_face_list.count > 0))

                                                   ^

ESP32_CAM:433:15: error: 'face_id_node' was not declared in this scope

               face_id_node *f = recognize_face_with_name(&st_face_list, out_res.face_id);

               ^

ESP32_CAM:433:29: error: 'f' was not declared in this scope

               face_id_node *f = recognize_face_with_name(&st_face_list, out_res.face_id);

                             ^

ESP32_CAM:433:88: error: 'recognize_face_with_name' was not declared in this scope

               face_id_node *f = recognize_face_with_name(&st_face_list, out_res.face_id);

                                                                                        ^

exit status 1
'face_id_name_list' was not declared in this scope

Dieser Bericht wäre detaillierter, wenn die Option
"Ausführliche Ausgabe während der Kompilierung"
in Datei -> Voreinstellungen aktiviert wäre.


Ich hab nach den von dir verlinkten Seiten das ESP32 Board, die Libraries in den angegebenen Versionen und die Partition hinzugefügt.

Papa Romeo


..und diese Änderungen in der app_httpd.cpp hast du auch gemacht ?

Wenn ja, dann überprüfe diese nochmal.


After #include "fr_forward.h" (around line 24) add: #include "fr_flash.h";

Change int8_t left_sample_face = enroll_face(&id_list, aligned_face);(&id_list, aligned_face);  (around line 178) to: int8_t left_sample_face = enroll_face_id_to_flash(&id_list, aligned_face);

After face_id_init(&id_list, FACE_ID_SAVE_NUMBER, ENROLL_CONFIRM_TIMES); (around line 636) add: read_face_id_from_flash(&id_list);

Flash and run this Sketch in the same way as before. Enrolled face data is now being saved to the new partition on the flash memory.
...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
und...never change a running System...no Updates if not necessary

Papa Romeo

..ich hab´s kurz nachgestellt. Wenn ich "#include "fr_flash.h" auskommentiere, erhalte ich beim Kompilieren, in etwa die selben Fehlermeldungen.
...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
und...never change a running System...no Updates if not necessary

Nexium

Ja das hab ich auch gemacht, werd ich aber heute abend nochmal genauer kontrollieren.
Wenn ich deinen Sketch öffne, öffnet sich aber kein "Reiter" mit apphttpd.cpp wie es bei den Sketchs aus dein verlinkten Seiten der fall ist. Kenn mich mit der IDE leider nicht gut aus und weis nicht ob das jetzt eine Rolle spielt. War eigentlich bis grad eben der Meinung das dann die apphttpd.cpp nichts mit deinem Sketch zutun hat. Muss diese dann auch im gleichen Ordner sein wie dein Sketch?

Papa Romeo

Ich hab die app_httpd.cpp auch nicht mehr im Sketchordner.
Diese cpp-Datei wird von irgend einer h-Datei aufgerufen und soviel ich weiß,
reicht es wenn sie irgendwo in den "Libraries" zur Verfügung steht.

...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
und...never change a running System...no Updates if not necessary

Papa Romeo

...im Anhang hab ich mal meine eingestellt.
Kopiere sie einfach mal in den Sketch-Ordner und versuche zu kompilieren.
...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
und...never change a running System...no Updates if not necessary

Nexium

Danke für deine Mühe aber das ist nicht der Grund. Hab die Datei auch mal nach "face_id_name_list" durchsucht das kommt darin gar nicht vor.
Die andere IDE die ich nutze ist die 1.8.8 denk aber nicht das es damit was zutun hat.
Exakt den gleichen Sketch den du hochgeladen hast kannst du bei dir problemlos kompilieren?

Papa Romeo

...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
und...never change a running System...no Updates if not necessary

Nexium


Papa Romeo

IDE 1.8.9   mit der Espressif Systems version 1.0.3-rc1  auf Win7

Hast du das mit meiner cpp-Datei mal getestet?
...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
und...never change a running System...no Updates if not necessary

Nexium

hab Espressif Systems mal in 1.0.0 und 1.0.2 installiert und bei jeder Version erhalte ich eine andere Fehlermeldung (1.0.1 wird auf der HP ja empfohlen) Deine Version kann ich bei mir gar nicht laden. Evtl ist es auch eine Bibliothek die ich in der falschen Version drauf hab. Aber auf die wo hingewiesen wurde hab ich in den passenden Versionen.

Ja hab deine cpp Datei gegen meine getauscht.

Nexium

Selbst auf dem Rechner mit der IDE 1.8.9 finde ich deine angegebene Version nicht. Hast du die über den Boardverwalter geladen?

Nexium

Es lag an Espressif Systems, hab jetzt von git die 1.0.3 rc2 geladen und der Fehler ist weg. Danke für deine Hilfe :)

Leider kann ich erst Morgen richtig weiter testen :/

Papa Romeo

..also dann nochmal der Hinweis auf Post #13.

...genau so verfahren wie es in den beiden Links steht.
...die richtige Lötspitzentemperatur prüft man zwischen Daumen und Zeigefinger.
...überlasse niemals etwas einer Software, das du hardwaremässig erreichen kannst.
...unvorsichtige Elektriker werden schnell zu leitenden Angestellten.
und...never change a running System...no Updates if not necessary