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_new
python3 -m venv env_new
source env_new/bin/activate
pip install –upgrade pip
python3 -m pip install tensorflow
pip install –upgrade tensorflow-hub
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)
.
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).
Trimiteți catre 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.