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, mergi la File > Examples > ESP32 > Camera și deschide exemplul CameraWebServer.
  • Decomentează linia #define CAMERA_MODEL_AI_THINKER, pentru a selecta modelul de placa. Comentează linia #define CAMERA_MODEL_ESP_EYE.
  • Completează SSID-ul și parola Wi-Fi-ului.
  • La Tools > Board selectează AI-Thinker ESP32-CAM.
  • La Tools > Port selectează portul COM la care este conectat ESP32.
  • Apasă butonul de upload pentru a încărca codul.
  • Deschide Serial Monitor la o viteză de transfer de 115200 baud.
  • Apasă butonul de Reset de pe placa ESP32-CAM.
  • Adresa IP a ESP32 ar trebui să fie afișată în Serial Monitor.
  • Deschide un browser și introdu adresa IP a plăcii ESP32-CAM.
  • Putem descărca o fotografie folosind butonul Save. De asemenea se poate accesa URL-ul adr_IP/capture pentru a obține o imagine instant.

Poț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:

  • Asigură-te că ai Python 3.9–3.12.
  • Instalează modulul venv.

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.

  • Crează un nou director: mkdir env_new
  • Crează un nou environment în acel director: python3 -m venv env_new
  • Activează noul environment: source env_new/bin/activate
  • Actualizează pip: pip install –upgrade pip
  • Instalează TensorFlow: python3 -m pip install tensorflow
  • Instalează TensorFlow Hub: pip install –upgrade tensorflow-hub
  • Instalează matplotlib: pip install matplotlib

1. Urmărește acest tutorial pentru a implementa detecția obiectelor dintr-o anumită imagine. Salvează codul într-un fișier Python object_detection.py.

2. Modifică codul din tutorial în modul următor:

2.1. Modifică 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. Comentează 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 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. Rulează codul folosind comanda: python3 object_detection.py.

4. Pentru a analiza imaginea produsă de ESP32-CAM folosește la url: 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.

Modificați scriptul pentru a afișa în terminal conținutul variabilei result. Rulați scriptul în timp ce camera este îndreptată către o persoană. Observați că 'detection_class_entities' include clasele 'Person', 'Human face' și altele. În 'detection_scores' sunt incluse procentele pentru fiecare clasă din 'detection_class_entities'. De exemplu un procent 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

Trimiteți catre 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:

  • Descarcă acest repo.
  • Deschide ObjectDetection_ESP32cam.ino în Arduino IDE 2.
  • Completează SSID-ul și parola Wi-Fi-ului în cod.
  • La Tools > Board selectează AI-Thinker ESP32-CAM.
  • La Tools > Port selectează portul COM la care este conectat ESP32.
  • Apasă butonul de upload pentru a încărca codul.
  • Deschide Serial Monitor la o viteză de transfer de 115200 baud.
  • Apasă butonul de Reset de pe placa ESP32-CAM.
  • Adresa IP a ESP32 ar trebui să fie afișată în Serial Monitor.
  • Deschide un browser și introdu adresa IP a plăcii ESP32-CAM.
  • Poți observa cum sunt detectate obiecte/persoane în timp real din stream-ul video produs de ESP32-CAM.
iothings/laboratoare/lab9.1720770428.txt.gz · Last modified: 2024/07/12 10:47 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