Până acum, am testat cu succes toate componentele hardware ale ESP32-CAM (MCU și cameră) și am verificat conectivitatea Wi-Fi. Următorul pas este să rulăm un cod simplu pentru a captura și afișa o singură imagine pe o pagină web de bază. Acest cod a fost dezvoltat pe baza excelentului tutorial al lui Rui Santos: ESP32-CAM Take Photo and Display on a Web Server.
Descarcă fișierul: ESP32_CAM_HTTP_Server_STA de pe GitHub. Modifică datele de autentificare Wi-Fi din cod și încarcă-l pe ESP32-CAM. Rulează codul și verifică rezultatul pe pagina web atasata. Înainte de a continua, analizează codul pentru a înțelege mai bine modul de funcționare al camerei.
Deși Edge Impulse Studio nu suportă oficial ESP32-CAM (suportă ESP-EYE), putem conecta ESP32-CAM utilizând firmware alternativ.
Mulțumiri speciale lui Louis Moreau de la Edge Impulse pentru adaptarea firmware-ului la pin-urile camerei ESP32-CAM.
Pași:
Acum că avem o cameră embedded funcțională, este timpul să trecem la detectarea obiectelor. În loc de clasificare simplă a imaginilor, vom antrena un model de detectare a obiectelor folosind FOMO (Faster Objects, More Objects). Această tehnică este optimizată pentru TinyML și funcționează excelent pe dispozitive cu resurse limitate, cum ar fi ESP32-CAM.
Obiectiv: Dorim să detectăm și să diferențiem trei obiecte:
Pentru detectarea obiectelor, avem nevoie de un dataset etichetat, care să conțină imagini cu mere, banane și cartofi. O sursă excelentă este Kaggle, unde poți găsi dataset-uri de înaltă calitate, cum ar fi:
Fruit and Vegetable Image Recognition Dataset
Acest dataset include o varietate de fructe și legume. Pentru acest proiect, concentrează-te doar pe categoriile pe care dorim să le detectăm.
Încarcă aceste imagini în Edge Impulse Studio, în secțiunea Data Acquisition.
Pentru pregătirea dataset-ului pentru detectarea obiectelor, va trebui să etichetezi imaginile folosind bounding boxes. Edge Impulse Studio oferă un instrument integrat pentru etichetarea și definirea regiunilor de interes (ROIs) pentru fiecare obiect din imagini.
Un impuls în Edge Impulse constă din trei pași principali:
FOMO (Faster Objects, More Objects) este un model de detectare a obiectelor optimizat pentru dispozitive edge. Acesta oferă:
În timpul antrenării, modelul FOMO va detecta obiecte învățând modele din dataset-ul etichetat. Spre deosebire de clasificarea simplă a imaginilor, detectarea obiectelor se concentrează pe:
Augmentarea datelor:
Edge Impulse aplică augmentarea datelor pentru a îmbunătăți performanța modelului, introducând variații în datele de antrenament, cum ar fi:
După ce modelul este antrenat, acesta poate fi implementat ca o bibliotecă Arduino compatibilă cu ESP32-CAM.
#define CAMERA_MODEL_AI_THINKER
După implementarea codului, ESP32-CAM va:
Modelul FOMO cu MobileNetV2 0.35 oferă performanțe excelente pentru detectarea obiectelor în timp real pe ESP32-CAM. Timpul de inferență este minim, asigurând o detectare lină fără a depăși limitele de memorie ale dispozitivului.
Pentru optimizare suplimentară:
Ia în considerare utilizarea bibliotecii ESP NN de la Edge Impulse pentru a accelera inferența și a reduce latența. Optimizează utilizarea memoriei în codul final pentru a elibera RAM suplimentar pentru modele mai mari, dacă este necesar.