This is an old revision of the document!


Laborator 09. ESP32CAM și detecția obiectelor

Exerciții

Ex1. Obținerea imaginilor folosind ESP32-CAM

Dorim să rulăm un server web pe ESP32-CAM pe care îl vom folosi pentru a obține imaginile.

  • În Arduino IDE 2, mergeți la File > Examples > ESP32 > Camera și deschide exemplul CameraWebServer.
  • Decomentați linia #define CAMERA_MODEL_AI_THINKER, pentru a selecta modelul de placă. Comentați linia #define CAMERA_MODEL_ESP_EYE.
  • Completați SSID-ul și parola Wi-Fi-ului.
  • La Tools > Board selectați AI-Thinker ESP32-CAM.
  • La Tools > Port selectați portul COM la care este conectat ESP32.
  • Apăsați butonul de upload pentru a încărca codul.
  • Deschideți Serial Monitor la o viteză de transfer de 115200 baud.
  • Apăsați butonul de Reset de pe placa ESP32-CAM.
  • Adresa IP a ESP32 ar trebui să fie afișată în Serial Monitor.
  • Deschideți un browser și introduceți adresa IP a plăcii ESP32-CAM.
  • Puteți descărca o fotografie folosind butonul 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.

Ex2. Detecția obiectelor folosind TensorFlow în Python (pe laptop)

Î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:

  • Asigurați-vă că aveți Python 3.9–3.12.
  • Instalați modulul venv/virtualenv.

Dacă rulați pe Ubuntu sau WSL, e posibil să aveți nevoie să instalați pachetul virtualenv folosind comanda sudo apt-get install python3-virtualenv. Alternativ, pentru o versiune mai specifica, puteti folosi sudo apt-get install python3.x-virtualenv.
Dacă rulați pe MacOS, e posibil să aveți nevoie să instalați pachetul virtualenv folosind comanda brew install virtualenv.

  • Creați un nou director: mkdir env_new
  • Creați un nou environment în acel director: python3 -m venv env_new
  • Activați noul environment: source env_new/bin/activate
  • Actualizați pip: pip install –upgrade pip
  • Instalați TensorFlow: python3 -m pip install tensorflow
  • Instalați TensorFlow Hub: pip install –upgrade tensorflow-hub
  • Instalați matplotlib: pip install matplotlib

1. Urmăriți acest tutorial pas cu pas pentru a implementa detecția obiectelor dintr-o anumită imagine. 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).

Codul final se găsește aici.

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 module de detecție:

  • FasterRCNN+InceptionResNet V2: acuratețe ridicată. Folosiți:
    module_handle = "https://tfhub.dev/google/faster_rcnn/openimages_v4/inception_resnet_v2/1"
  • ssd+mobilenet V2: mic și rapid. Folosiți:
    module_handle = "https://tfhub.dev/google/openimages_v4/ssd/mobilenet_v2/1"

(Bonus) Ex3. Generarea unei alerte în urma detecției unei persoane

Î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).

(Bonus) Ex4. Trimiterea unui email în urma detecției unei persoane

Modificați codul anterior pentru a trimite către utilizator un email cu poza inițială și cea produsă de model.

Găsiți aici informații despre trimiterea email-urilor din Python.

(Bonus) Ex5. Detecția automată obiectelor în stream video folosind TensorFlow.js (server web)

Î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:

  • Descărcați acest repo.
  • Deschideți ObjectDetection_ESP32cam.ino în Arduino IDE 2.
  • Completați SSID-ul și parola Wi-Fi-ului în cod.
  • La Tools > Board selectați AI-Thinker ESP32-CAM.
  • La Tools > Port selectați portul COM la care este conectat ESP32.
  • Apăsați butonul de upload pentru a încărca codul.
  • Deschideți Serial Monitor la o viteză de transfer de 115200 baud.
  • Apăsați butonul de Reset de pe placa ESP32-CAM.
  • Adresa IP a ESP32 ar trebui să fie afișată în Serial Monitor.
  • Deschideți un browser și introduceți adresa IP a plăcii ESP32-CAM.
  • Puteți observa cum sunt detectate obiecte/persoane în timp real din stream-ul video produs de ESP32-CAM.
iothings/laboratoare/lab9.1720780486.txt.gz · Last modified: 2024/07/12 13:34 by laura.ruse
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0