Wykrywacz symboli

Typ_projektu
microPython
Zdjecie główne
Krótki opis projektu

System Rozpoznawania Symboli przy użyciu ESP32

Niezbędne elementy

1. Płytka ESP 32-CAM x2

2. 2 diody LED (zielona, czerwona)

3. Płytka stykowa

4. Przewody

5. Karton

6. Taśma izolacyjna (lub dowolna inna)

Opis projektu

Cel projektu

    Celem projektu było stworzenie systemu rozpoznawania symboli, który wykorzystuje mikrokontrolery ESP32 do przechwytywania obrazu, przetwarzania go oraz analizy danych w celu identyfikacji kształtów. Projekt demonstruje możliwości integracji przetwarzania obrazu, komunikacji bezprzewodowej i analizy danych w prostym, ale funkcjonalnym prototypie.

Składniki projektu

Hardware:

  • ESP32 z kamerką: Moduł odpowiedzialny za rejestrację obrazu i jego wstępne przetwarzanie.
  • ESP32 (druga płytka): Moduł odpowiedzialny za analizę danych oraz sygnalizację wyników przy użyciu diod LED i kodu Morse’a.
  • Pojemnik z kartonu: Zapewnia jednolite oświetlenie i odpowiednie warunki do wykonywania zdjęć.
  • Diody LED: Wykorzystywane do wizualizacji wyników.

Software:

  • MicroPython: Wykorzystany do programowania mikrokontrolerów ESP32.
  • Flask: Lekki serwer obsługujący przesyłanie danych i dodatkowe przetwarzanie obrazu.
  • Biblioteka Pillow: Używana na serwerze do binaryzacji obrazu.

Działanie projektu

1. Rejestracja obrazu:

  • ESP32 z kamerką wykonuje zdjęcie symbolu umieszczonego w pojemniku z kartonu.
  • Obraz jest przetwarzany na mikrokontrolerze do formatu w skali szarości o rozdzielczości 96x96 pikseli.

2. Przesyłanie i przetwarzanie danych:

  • Zdjęcie jest przesyłane na serwer Flask, gdzie następuje dalsze przetwarzanie:
    • Binaryzacja obrazu do macierzy 0 i 1.
    • Zmniejszenie rozdzielczości dla uproszczenia analizy.
  • Wynikowa macierz jest przesyłana do drugiego ESP32.

3. Analiza symbolu:

  • Druga płytka ESP32 analizuje macierz przy użyciu prostych algorytmów, aby rozpoznać kształt symbolu.

4. Sygnalizacja wyników:

  • Rozpoznany symbol jest wizualizowany za pomocą diod LED.
  • Wynik jest dodatkowo przesyłany w kodzie Morse’a, umożliwiając wszechstronne odczytanie informacji.

Funkcjonalności

  • Dwustopniowe przetwarzanie obrazu: Integracja przetwarzania na mikrokontrolerze i serwerze pozwala na efektywne wykorzystanie zasobów sprzętowych.
  • Sygnalizacja wyników: Wykorzystanie diod LED i kodu Morse’a zapewnia wielokanałowe przedstawienie informacji.
  • Elastyczność systemu: Projekt pozwala na łatwe wprowadzenie modyfikacji, takich jak zmiana algorytmów lub dodanie nowych funkcjonalności.

Możliwe rozszerzenia projektu

  • Rozbudowa algorytmów analizy: Zastosowanie bardziej zaawansowanych metod rozpoznawania wzorców, np. uczenia maszynowego.
  • Dodanie funkcji autonomicznych: Integracja czujników do automatycznego wykrywania i analizy obiektów.
  • Zastosowanie w edukacji: Projekt jako narzędzie dydaktyczne do nauki podstaw IoT, przetwarzania obrazu i komunikacji.

Wnioski

    System rozpoznawania symboli z ESP32 to przykład efektywnego wykorzystania prostych technologii do realizacji zaawansowanych funkcji. Dzięki minimalistycznemu podejściu projekt jest dostępny nawet dla początkujących, jednocześnie oferując potencjał do dalszego rozwoju i eksploracji.

kod programu
import camera
import network
import time
import urequests
from machine import Pin

# Dane Wi-Fi i serwera
SSID = 'ae'
PASSWORD = 'Xavlegbmao'
SERVER_URL = "http://192.168.43.220:5000"

latara = Pin(4,Pin.OUT)
latara.value(0)
# Funkcja łącząca się z Wi-Fi
def connect_wifi():
    wifi = network.WLAN(network.STA_IF)
    wifi.active(True)
    wifi.connect(SSID, PASSWORD)
    for _ in range(10):
        if wifi.isconnected():
            print("Connected to Wi-Fi.")
            return wifi
        time.sleep(1)
    print("Failed to connect to Wi-Fi.")
    return None

# Funkcja inicjalizująca kamerę
def initialize_camera():
    try:
        print('Initializing camera...')
        camera.init(0, format=camera.JPEG)
        camera.framesize(camera.FRAME_96X96)
        camera.speffect(camera.EFFECT_BW)
        print("Camera initialized.")
    except Exception as e:
        print("Camera initialization error:", e)

# Funkcja robienia zdjęcia
def capture_image():
    try:
        print('Capturing image...')
        buffer = camera.capture()
        if buffer:
            print(f"Image captured, size: {len(buffer)} bytes")
        else:
            print("Failed to capture image.")
        return buffer
    except Exception as e:
        print("Error capturing image:", e)
        return None

# Funkcja zapisu zdjęcia
def save_image(buffer, filename="image.jpg"):
    try:
        with open(filename, "wb") as file:
            file.write(buffer)
        print(f"Image saved as {filename}")
    except Exception as e:
        print("Error saving image:", e)

# Funkcja wysyłająca zdjęcie na serwer
def send_image_to_server(buffer):
    try:
        print("Sending image to server...")
        response = urequests.post(f"{SERVER_URL}/upload", data=buffer, headers={'Content-Type': 'image/jpeg'})
        print(f"Server response: {response.status_code}, {response.text}")
    except Exception as e:
        print("Error sending image:", e)

# Funkcja główna
def main():
    wifi = connect_wifi()
    if not wifi:
        return
    initialize_camera()

    while True:
        # Robienie zdjęcia i przesyłanie na serwer
        image_buffer = capture_image()
        if image_buffer:
            save_image(image_buffer)
            send_image_to_server(image_buffer)
        time.sleep(1)

if __name__ == "__main__":
    main()


Tagi
micropython Ekipa amongus kamera rozpoznawanie obraz symbole przewody kable wifi WI-FI 2boards1server zdalnie sterowane robot esp MQTT