Dorim să rulăm un server web pe ESP32-CAM pe care îl vom folosi pentru a obține imaginile.
File > Examples > ESP32 > Camera
și deschideți exemplul CameraWebServer.#define CAMERA_MODEL_AI_THINKER
, pentru a selecta modelul de placă. Comentați linia #define CAMERA_MODEL_ESP_EYE
.Tools > Board
selectați AI-Thinker ESP32-CAM.Tools > Port
selectați portul COM la care este conectat ESP32.Start Stream
pentru a vizualiza stream-ul video.Save
. De asemenea se poate accesa URL-ul adr_IP/capture
pentru a obține o imagine instant.Puteți găsi un tutorial similar aici.
În acest exercițiu vom folosi TensorFlow pentru a detecta obiectele dintr-o imagine. Imaginea se va da sub forma unui URL. Vom prelua o imagine de la ESP32-CAM și o vom trece prin model pentru a obține obiectele detectate.
Setup:
venv/virtualenv
.
virtualenv
folosind comanda sudo apt-get install python3-virtualenv
. Alternativ, pentru o versiune mai specifica, puteti folosi sudo apt-get install python3.x-virtualenv
.virtualenv
folosind comanda brew install virtualenv
.
mkdir env_new
python3 -m venv env_new
source env_new/bin/activate
pip install –upgrade pip
python3 -m pip install tensorflow
pip install –upgrade tensorflow-hub
pip install matplotlib
1. Urmăriți acest tutorial pas cu pas pentru a implementa detecția obiectelor dintr-o anumită imagine. Fără secțiunea “More images”. Salvați codul într-un fișier Python object_detection.py
.
2. Modificați codul din tutorial în modul următor:
2.1. Modificați funcția display_image
în modul următor pentru a salva pe disc și afișa imaginea rezultată:
def display_image(image): fig = plt.figure(figsize=(12, 8)) plt.grid(False) plt.imshow(image) plt.savefig('result.jpg') plt.show()
2.2. Comentați linia pil_image = ImageOps.fit(pil_image, (new_width, new_height), Image.LANCZOS)
din funcția download_and_resize_image
pentru a nu face redimensionarea imaginii. Scoateți parametri suplimentari atunci când este apelată funcția download_and_resize_image
: downloaded_image_path = download_and_resize_image(image_url)
.
3. Rulați codul folosind comanda: python3 object_detection.py
.
4. Pentru a analiza imaginea produsă de ESP32-CAM folosiți URL-ul: adr_IP/capture
. De exemplu:
image_url = "http://192.168.142.118/capture"
5. Se pot folosi 2 modele de detecție:
module_handle = "https://tfhub.dev/google/faster_rcnn/openimages_v4/inception_resnet_v2/1"
module_handle = "https://tfhub.dev/google/openimages_v4/ssd/mobilenet_v2/1"
În exercițiul 2, variabila result
din funcția run_detector()
include toate rezultatele numerice produse de model în urma analizei imaginii. Acestea pot fi folosite mai departe pentru a efectua alte acțiuni în funcție de obiectele detectate.
Variabila result
conține următoarele:
'detection_class_labels
' = o listă de etichete numerice, unde fiecare etichetă numerică corespunde clasei unui obiect detectat în imagine.'detection_class_names
' = o listă de nume codificate sau identificatori pentru fiecare clasă detectată.'detection_class_entities
' = o listă de nume lizibile ale claselor detectate.'detection_boxes
' = o listă de coordonate ale casetelor de delimitare (boxes) pentru fiecare obiect detectat.'detection_scores
' = o listă de numere între 0 și 1, unde fiecare număr corespunde scorului de încredere al detectării modelului pentru obiectul corespunzător din imagine. Un scor de 1 indică faptul că modelul este foarte încrezător în detectarea sa, în timp ce un scor mai aproape de 0 sugerează o încredere mai scăzută. Elementul 'detection_scores
' este crucial pentru filtrarea detectărilor potențial inexacte. Puteți seta un prag (de exemplu: 0,5) și puteți lua în considerare doar obiectele cu scoruri peste acel prag pentru procesarea ulterioară.
Modificați scriptul pentru a afișa în terminal conținutul variabilei result
și observați listele descrise mai sus.
Rulați scriptul în timp ce camera este îndreptată către o persoană. Observați că lista 'detection_class_entities
' include clasele 'Person
', 'Human face
' și altele. În lista 'detection_scores
' sunt incluse scorurile pentru fiecare clasă din 'detection_class_entities
'. De exemplu un scor mare pentru 'Human face
' indică faptul că este detectată o față umană în poză.
Dacă detectați o persoană folosind camera de pe ESP32-CAM atunci generați o alertă către utilizator (un mesaj in terminal).
Modificați codul anterior pentru a trimite către utilizator un email cu poza inițială și cea produsă de model.
În acest exercițiu dorim să detectăm automat obiecte/persoane dintr-un stream video produs de ESP32-CAM. Pe placă va rula un server web care folosește TensorFlow.js pentru detecție.
Pași:
ObjectDetection_ESP32cam.ino
în Arduino IDE 2.Tools > Board
selectați AI-Thinker ESP32-CAM.Tools > Port
selectați portul COM la care este conectat ESP32.