Raspberry Pi & Teachable Machine – Tensorflow Modelle für KI nutzen

Die größte und rechenintensivste Arbeit beim Erstellen von Modellen für Machine-Learning Algorithmen ist die Generierung der Sample-Daten und das Evaluieren dieser Daten. Um dies zu vereinfachen kann man den Raspberry Pi und Teachable Machine nutzen, was ein Service von Google ist. Hiermit kann man sich anhand hochgeladener Daten verschiedene Modelle für Tensorflow erstellen – und diese direkt nutzen.

Wie dies genau funktioniert, ist in diesem Tutorial gezeigt. Dazu erstellen wir einen Datensatz mit fünf verschiedenen Objekte. Zum Schluss erkennt unser Beispielprogramm, welches der Objekte vor der Kamera ist.

Teachable Machine Zubehör

Für Tensorflow ist nicht viel Zubehör nötig. Du brauchst lediglich eine Kamera. Hier die vollständige Liste des Zubehörs, das für dieses Tutorial verwendet wurde:

Da wir Python als Programmiersprache benutzen, kann das Tutorial auch auf einem PC / Linux Rechner ausgeführt werden.

 

Was genau ist Teachable Machine by Google?

Die meisten Machine Learning Algorithmen basieren darauf, dass ein Modell erstellt wird, mit dem bekannte Objekte klassifiziert werden. Umso mehr Daten man verwendet, umso besser wird das Modell und umso genauer die spätere Klassifizierung. Das ist soweit nichts neues und ist in diesem Tutorials detailiert erklärt.

Tensorflow ist ein erweitertes Tool, um diese Klassifizierung durchzuführen. Dazu müssen wir aber entsprechende Modelle berechnen. Wofür diese Modelle berechnet werden, ist dabei nicht wichtig. Das können also Bilder, Musik oder sonstige Daten sein.

Google’s neues Tool „Teachable Machine“ automatisiert den Prozess, um an ein Modell zu gelangen. Das einzige was wir brauchen, sind die Demobilder. Mit Hilfe dieses Tools ist ein erster Machine-Learning Prototyp innerhalb kürzester Zeit erstellt.

 

Vorbereitung

Bevor wir starten, ist es sehr von Vorteil zu wissen, was Tensorflow ist und sich idealerweise damit schon einmal beschäftigt zu haben. Hierfür kannst du u.a. dieses Tutorial ansehen.

Zunächst schließen wir die (USB) Kamera an den Raspberry Pi an. Je nach Typ kann schon mal ein Testfoto erzeugt werden,, um sicher zu gehen, dass die Kamera richtig erkannt wurde und funktioniert.

Erstellen des Modell-Datensatz

Der Modelldaten wird unter teachablemachine.withgoogle.com erstellt. Auf der linken Seite werden die verschiedenen Objekte angelegt und Bilder aufgenommen. Hierbei können die Beispielbilder direkt aufgenommen werden oder lokal ausgewählt werden. Sofern du nur eine Kamera am Raspberry Pi angeschlossen hast, empfiehlt es sich die Website über den Pi aufzurufen.

In meinem Fall möchte ich zwischen diesen fünf Objekten unterscheiden:

  • Raspberry Pi 4
  • Raspberry Pi 3B (sieht dem Model 4 recht ähnlich)
  • Erste Generation: Raspberry Pi Model B
  • Raspberry Pi Zero
  • ESP32 (als einziger in schwarz)

Es wird empfohlen mindestens 200 Bilder aus verschiedenen Winkeln und mit unterschiedlichem Licht aufzunehmen. Daneben darf sich kein weiteres Objekt, das erkannt werden soll, befinden. Außerdem kannst du einen zusätzlichen „leeren“ Eintrag erstellen, auf dem nur der Hintergrund zu sehen ist. Das ist nützlich, falls keines der Objekte eindeutig erkannt wird.

Sobald alle Bilder aufgenommen sind, sieht es folgendermaßen aus:

Raspberry Pi Teachable Machines Sample

Raspberry Pi Teachable Machine Sample Auswahl

Im nächsten Schritt drücken wir den „Train Model“ Button, wodurch zunächst lokale Berechnungen stattfinden. Deine Sample Bilder werden nicht zu Google hoch geladen (es sei denn du speicherst das Projekt bewusst in Google Drive). Dieser Schritt dauert eine Weile.

Bevor wir das generierte Model erstellen, gibt es noch die Möglichkeit es zu testen:

Raspberry Pi Teachable Machines Preview

Teachable Machine Preview: Raspberry Pi 4B

Nun kannst du das Model exportieren.Wähle hierzu Tensorflow -> Savedmodel aus (die Konvertierung findet bei Google in der Cloud statt). Die converted_savedmodel.zip Datei kommt auf dem Raspberry Pi in den Home-Folder (/home/pi); entweder per Direktdownload oder per FTP.

Übrigens: Die Projekte gibt es auch zum Download (hier zum Frontend) – falls du Google die Daten nicht anvertraust.

 

Tensorflow Installation auf dem Raspberry Pi

Das erstellte Model kann nur mittels Tensorflow genutzt werden. Die Installation dessen ist allerdings nicht besonders schwer. Öffne eine Konsole und gib folgendes ein:

pip3 install virtualenv Pillow numpy pygame
git clone --depth 1 https://github.com/tutRPi/rpi-vision
cd rpi-vision
python3 -m venv tflite-teachable-machine
source tflite-teachable-machine/bin/activate

Hier gibt es die aktuelle Version und mehr Details zur Installation von den Tensorflow Binaries.
Die wichtigsten Befehle zum Installieren sind aber folgende:

wget https://github.com/PINTO0309/Tensorflow-bin/raw/master/tensorflow-2.1.0-cp37-cp37m-linux_armv7l.whl
sudo -H pip3 install tensorflow-*
sudo pip3 install -e .

Nun müssen wir den Raspberry Pi noch neustarten.

sudo reboot

 

Ausführung auf dem Raspberry Pi und Beispiel-Ausgabe

Für den folgenden Teil wird ein Display benötigt. Dazu kann entweder SSH mit X11 genutzt werden, oder aber eine Remotedesktopverbindung. Ich nutze Letzteres.

Dort öffnen wir wieder die Konsole und wechseln in das Verzeichnis von vorhin und aktivieren ebenfalls die virtuelle Umgebung.

cd rpi-vision
source tflite-teachable-machine/bin/activate

Für das folgende Skript müssen wir den Bildschirm, auf dem die Ausgabe stattfinden soll, angeben. Diesen finden wir hiermit heraus:

echo $DISPLAY

Die Ausgabe darf nicht leer sein und ist in meinem Fall :10.0

Das Skript wird nun mit zwei Parametern gestartet: Dem Display und dem Pfad, unter der wir vorhin die zip Datei gespeichert haben.

sudo XAUTHORITY=/home/pi/.Xauthority DISPLAY=:10.0 /usr/bin/python3 tests/pitft_teachablemachine.py ~/converted_savedmodel.zip

Die Initialisierung dauert einen Moment. Nach etwa 20-30 Sekunden ist es soweit: Ein weiteres Fenster öffnet sich, auf dem das Bild der Kamera zu sehen ist.

Raspberry Pi Teachable Machine Model Output

Wir legen nun die verschiedenen Objekte, die wir vorher trainiert haben, unter die Kamera und sehen, dass sich das Label unterhalb ändert.

Das Skript kannst du mittels Strg + C beenden.

Außerdem können natürlich innerhalb des Skripts auch weitere Änderungen vorgenommen werden. Wenn du z.B. die Größe oder den Schwellwert (ab wann gilt ein Objekt als „erkannt“), ist dies kein Problem. Du kannst natürlich auch andere Aktionen beim Erkennen der Objekte triggern und die Kamera-Ausgabe komplett weglassen

 

Besteht weiteres Interesse an solchen Tutorials (Tensorflow und Objekterkennung)? Über Kommentare oder Projekt/Tutorialideen freue ich mich.

13 Kommentare

  1. Ein sehr gut gemachte Tutorial, Herr Felix.
    Ich werde mehre Artikeln über RPi und TensorFlow und OpenCV sehr begrüßen.

    Persönlich halte ich ein 3.3″ Bildschirm als viel zu klein – aber es ist sehr leicht ein größeres Einzubauen.

    Antworten
  2. Hallo Felix,
    ich werde die nächsten Tage das auch mal versuchen nachzubauen.
    Gerne würde ich Tauben auf dem Balkon erkennen und mit Wasser bespritzen.
    Dazu fehlt mir noch die Position des Objektes und die Möglichkeit Servos in die Richtung zu lenken und eine kleine Pumpe an zu stellen…

    Antworten
    • Zumindest die Position bekommst du aus dem Bild heraus. Um die Tiefe auch herauszufinden, bräuchtest du eine zweite Kamera (Stereo Vision).

      Antworten
      • Hallo Felix,
        das Tutorial von dir hat super geklappt, nur leider bekomme ich keine Positionsdaten der Objekte heraus. Hättest du eine Idee wie das möglich ist?

  3. Hallo Felix,
    aktuelle warte ich noch auf die EEPROM release Version für den RPi4
    zum Booten von USB.
    Dann würde ich gerne Personen vor der Haustür per IP Kamera erkennen
    und mir über Home Assistent eine Benachrichtigung schicken lassen.
    Als nächstes wäre dann das Carport an der Reihe, wo ich dann die Personen
    auch erkennen möchte und Katzen per Wasserstrahl verteiben will.
    Der Rasensprenger mit Bewegungsmelder soll nur Katzen erschrecken.
    Habe mir den Coral USB Stick bestellt für Tensorflow.
    Ich glaube den benötige ich für insgesamt 4 IP Kameras um das Haus…
    Danke übrigens für die tollen Tutorials!

    Antworten
    • Hey Marcus,
      das klingt ziemlich interessant! Wenn du Interesse hast das ganze mit den anderen zu teilen, kannst du dich gerne bei mir melden 🙂
      Viele Grüße
      Felix

      Antworten
  4. Hallo Felix,
    vielen Dank für deine Tutorials! Meinerseits besteht ein Riesen Interesse an dem Thema Objekterkennung. Ich würde mich über eine Fortsetzung freuen!
    (wie) Ist es denn möglich, ein erkanntes Objekt in einem Skript auszuwerten.
    Beispielsweise: Eine Person läuft durch das Bild und wird erkannt. Im Skript wird dann Person +1 gezählt.
    Aktuell ist es überall wichtig die Personenzahl genau zu erfassen, daher wäre dies ein sehr interessantes Thema.

    Antworten
  5. Hallo Felix,

    super Tutorials. Ich möchte mich damit beschäftigen bei erkannten Objekten dies auf einem NAS auzuzeichnen (Überwachungskamera). Hast Du evtl. hier schon Erfahrungen gemacht?

    Gruß Manuel

    Antworten
  6. Hallo Felix
    Vielen Dank für die Tutorials. Bei mir wird leider die UBS-Kamera nicht erkannt im Script pitft_teachablemachine.py. Was muss ich ändern, dass nicht nur die Pi-Kamera, sondern auch eine USB-Kamera erkannt wird?
    Viele Grüsse
    Lukas

    Antworten
  7. Hallo Felix,
    Wie immer ein super Tutorial. Ist es möglich damit auch eine Gesichtserkennungssoftware zu schreiben (Gesichtserkennung (recognition) nicht Gesichtserkennung (detection) wenn du weißt wie ich meine :D)
    Gruß Simon

    Antworten
  8. Hallo Felix,
    ich bekomme leider folgende Meldung:
    Hello from the pygame community. https://www.pygame.org/contribute.html

    Traceback (most recent call last):
    File „tests/pitft_teachablemachine.py“, line 19, in
    from rpi_vision.models.teachablemachine import TeachableMachine
    File „/home/pi/rpi-vision/rpi_vision/models/teachablemachine.py“, line 7, in
    import tensorflow as tf
    ModuleNotFoundError: No module named ‚tensorflow‘

    Ich hoffe du oder jemand anderes hat eine Idee

    Gruß Johannes

    Antworten

Hinterlasse einen Kommentar

Deine Email Adresse wird nicht veröffentlicht.

Blog abonnieren

Abonniere Raspberry Pi Tutorials, um kein Tutorial mehr zu verpassen!