This is an old revision of the document!
Dorim să rulăm un server web pe ESP32-CAM pe care îl vom folosi pentru a obține imaginile.
#define CAMERA_MODEL_AI_THINKER, pentru a selecta modelul de placa. Comentează linia #define CAMERA_MODEL_ESP_EYE.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.
Î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 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ă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).
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:
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.
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).
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.