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_newpython3 -m venv env_newsource env_new/bin/activatepip install –upgrade pippython3 -m pip install tensorflowpip install –upgrade tensorflow-hubpip 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.