Table of Contents

Laborator 09. ESP32-CAM și detecția obiectelor folosind TensorFlow

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.

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:

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.

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

Găsiți codul modificat 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 modele de detecție:

Ex3. Rezultatele produse de model

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

Modificați scriptul pentru a afișa în terminal conținutul variabilei result și observați listele descrise mai sus.

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

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) Ex5. 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) Ex6. 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: