Projekt polega na wykorzystaniu ESP32-CAM do wykonania zdjęcia, które następnie jest analizowane w celu znalezienia konturów przedmiotu widocznego na fotografii. Następnie odpowiednie diody LED na pasku są zapalane w miejscach, które odpowiadają lokalizacji przedmiotu na zdjęciu.
1. Płytka ESP32 CAM
2. Pasek led
3. Kabel USB typu B
1. Komputer z programem thonny.
2. Środowisko obsługujące pythona np. visual studio.
3. Wgrane rozszerzenia pythonowe flask oraz openCV
Program polega na wykonaniu zdjęcia dowolnego przedmiotu, jego analizie oraz zapaleniu diod LED w miejscach odpowiadających lokalizacji wykrytego przedmiotu. Do wykonania zdjęcia wykorzystano moduł ESP32-CAM, który przesyła je przez Wi-Fi na serwer napisany w Pythonie. Na serwerze, przy użyciu biblioteki OpenCV, stosowany jest algorytm Canny'ego w celu wykrycia konturów obiektu.
Następnie obraz dzielony jest na osiem poziomych stref, z których każda odpowiada jednemu pikselowi na pasku LED. Program sprawdza, czy w danej strefie znajdują się kontury przedmiotu. Jeśli kontury zostaną wykryte, w tablicy przypisana jest wartość 1
, w przeciwnym razie 0
. Po analizie wszystkich stref serwer przesyła informację zwrotną do ESP32, gdzie funkcja odpowiedzialna za sterowanie diodami LED zapala odpowiednie światła.
Aby wykonać nowe zdjęcie, należy ponownie uruchomić program w środowisku Thonny. Natomiast serwer może działać w tle i nie wymaga restartowania przy każdym wykonaniu nowego zdjęcia.
Do zaimplementowania tego projektu potrzebny będzie kod na microkontroler o nazwie "kod na esp.py" oraz "kod od serwera.py" czyli kod od serwera. W plikach poniżej zamieszczam również plik tekstowy requirements.txt ,w którym znajdują się wszystkie zainstalowane biblioteki i ich wersji w aktualnym środowisku.
Użytkownik chcący stworzyć podobny projekt na swoim komputerze w terminalu programu z pythonem musi wpisać komendę :
"-pip install -r requirements.txt"
GŁÓWNE FUNKCJE UŻYTE W PROGRAMACH
kod na esp
connect_to_wifi()- funkcja łacząca mikrokontroler z internetem
update_leds()- funkcja zapalająca poszególne ledy w zależności od znalezionych konturów
take_photo() - funkcja opowiedzialna za zrobienie zdjecia
process_photo() - funkcja wysyłająca zdjęcie na serwer
handle_request() - funkcja odbierająca informacje zwrotne z serwera
start_server() - uruchamia esp jako serwer
kod do serwera
divide_into_zones()-funkcja dzieląca obraz na 8 równych części
detect_zones_with_objects ()- sprawdza czy kontury są znalezione w poszczególnej strefie
upload_image() -odbiera zdjęcie oraz rysuje jego kontury.
zip poniżej