Differences

This shows you the differences between two versions of the page.

Link to this comparison view

iothings:laboratoare:lab9 [2024/07/12 13:13]
laura.ruse [Exerciții]
iothings:laboratoare:lab9 [2024/07/12 17:26] (current)
laura.ruse [Exerciții]
Line 1: Line 1:
-===== Laborator 09. ESP32CAM ​și detecția obiectelor =====+===== Laborator 09. ESP32-CAM ​și detecția obiectelor ​folosind TensorFlow ​=====
  
  
Line 10: Line 10:
  
 Dorim să rulăm un server web pe ESP32-CAM ​ pe care îl vom folosi pentru a obține imaginile.  ​ 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.+  * În Arduino IDE 2, mergeți la ''​File > Examples > ESP32 > Camera'' ​și deschideți exemplul CameraWebServer.
   * Decomentați linia ''#​define CAMERA_MODEL_AI_THINKER'',​ pentru a selecta modelul de placă. Comentați linia ''#​define CAMERA_MODEL_ESP_EYE''​.   * 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. +  * Completați SSID-ul și parola Wi-Fi-ului. Recomandăm folosirea unui hotspot.  
-  * La Tools > Board selectați AI-Thinker ESP32-CAM. +  * La ''​Tools > Board'' ​selectați AI-Thinker ESP32-CAM. 
-  * La Tools > Port selectați portul COM la care este conectat ESP32.+  * La ''​Tools > Port'' ​selectați portul COM la care este conectat ESP32.
   * Apăsați butonul de upload pentru a încărca codul.   * Apăsați butonul de upload pentru a încărca codul.
   * Deschideți Serial Monitor la o viteză de transfer de 115200 baud.    * Deschideți Serial Monitor la o viteză de transfer de 115200 baud. 
Line 20: Line 20:
   * Adresa IP a ESP32 ar trebui să fie afișată în Serial Monitor.   * 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.   * Deschideți un browser și introduceți adresa IP a plăcii ESP32-CAM.
 +  * Apăsați pe butonul ''​Start Stream''​ pentru a vizualiza stream-ul video.
   * 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 descărca o fotografie folosind butonul ''​Save''​. De asemenea se poate accesa URL-ul ''​adr_IP/​capture''​ pentru a obține o imagine instant.
  
Line 42: Line 43:
   * Instalați matplotlib: ''​pip install matplotlib''​   * Instalați matplotlib: ''​pip install matplotlib''​
  
-1. Urmăriți acest [[https://​www.tensorflow.org/​hub/​tutorials/​object_detection|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''​.+1. Urmăriți acest [[https://​www.tensorflow.org/​hub/​tutorials/​object_detection|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. Modificați codul din tutorial în modul următor:
Line 58: Line 59:
 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)''​. 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)''​.
  
-<​note>​Codul final se găsește ​[[https://​drive.google.com/​file/​d/​1vFyeNVDNLr3WNE4abQhwJk_hKKtZwUPf/​view?​usp=sharing|aici]].</​note>​+<​note ​important>Găsiți codul modificat ​[[https://​drive.google.com/​file/​d/​1vFyeNVDNLr3WNE4abQhwJk_hKKtZwUPf/​view?​usp=sharing|aici]].</​note>​
  
 3. Rulați codul folosind comanda: ''​python3 object_detection.py''​. 3. Rulați codul folosind comanda: ''​python3 object_detection.py''​.
Line 65: Line 66:
 <​code>​ image_url = "​http://​192.168.142.118/​capture"</​code>​ <​code>​ image_url = "​http://​192.168.142.118/​capture"</​code>​
  
-5. Se pot folosi 2 module ​de detecție:​ +5. Se pot folosi 2 modele ​de detecție:​ 
-  * FasterRCNN+InceptionResNet V2: acuratețe ridicată. Folosiți: <​code>​module_handle = "​https://​tfhub.dev/​google/​faster_rcnn/​openimages_v4/​inception_resnet_v2/​1"</​code>​ +  * FasterRCNN+InceptionResNet V2: are acuratețe ridicată. Folosiți: <​code>​module_handle = "​https://​tfhub.dev/​google/​faster_rcnn/​openimages_v4/​inception_resnet_v2/​1"</​code>​ 
-  * ssd+mobilenet V2: mic și rapid. Folosiți: <​code>​module_handle = "​https://​tfhub.dev/​google/​openimages_v4/​ssd/​mobilenet_v2/​1"</​code>​+  * ssd+mobilenet V2: este mic și rapid. Folosiți: <​code>​module_handle = "​https://​tfhub.dev/​google/​openimages_v4/​ssd/​mobilenet_v2/​1"</​code>​
  
  
-=== (Bonus) ​Ex3. Generarea unei alerte în urma detecției unei persoane ​===+=== 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. Î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:​+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_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_names'''​ = o listă de nume codificate sau identificatori pentru fiecare clasă detectată.
   * '''​detection_class_entities'''​ = o listă de nume lizibile ale claselor detectate.   * '''​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_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ă.+  * '''​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ă.
  
-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
  
-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ă lista '''​detection_class_entities'''​ include ​descrierile ​'''​Person''',​ '''​Human face'''​ și altele. În '''​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ă. ​+=== (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). ​ 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 ===+=== (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. Modificați codul anterior pentru a trimite către utilizator un email cu poza inițială și cea produsă de model.
Line 95: Line 98:
  
  
-=== (Bonus) ​Ex5. Detecția automată obiectelor în stream video folosind TensorFlow.js (server web) ===+=== (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. ​ Î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. ​
Line 103: Line 106:
   * Deschideți ''​ObjectDetection_ESP32cam.ino''​ în Arduino IDE 2.   * Deschideți ''​ObjectDetection_ESP32cam.ino''​ în Arduino IDE 2.
   * Completați SSID-ul și parola Wi-Fi-ului în cod.   * Completați SSID-ul și parola Wi-Fi-ului în cod.
-  * La Tools > Board selectați AI-Thinker ESP32-CAM. +  * La ''​Tools > Board'' ​selectați AI-Thinker ESP32-CAM. 
-  * La Tools > Port selectați portul COM la care este conectat ESP32.+  * La ''​Tools > Port'' ​selectați portul COM la care este conectat ESP32.
   * Apăsați butonul de upload pentru a încărca codul.   * Apăsați butonul de upload pentru a încărca codul.
   * Deschideți Serial Monitor la o viteză de transfer de 115200 baud.   * Deschideți Serial Monitor la o viteză de transfer de 115200 baud.
iothings/laboratoare/lab9.1720779198.txt.gz · Last modified: 2024/07/12 13:13 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