Raspberry Pi KI: Objekterkennung mittels TensorFlow und Kamera

Der Raspberry Pi ist zu vielem in der Lage, so eignet er sich auch im Bereich Machine Learning. Zusätzlich gibt es Tools wie TensorFlow, die die Raspberry Pi Objekterkennung (Object Detection) mittels vortrainierter neuronaler Netze sehr vereinfachen.

Das Erkennen von Objekten (Personen, Tiere, Autos, etc.) kann z.B. in Überwachungssystemen oder Automatisierungsprozessen („Öffne die Tür, wenn die Katze raus will“), Car PC, uvm. verwendet werden.

In diesem Tutorial installieren wir TensorFlow auf einem neuen Raspberry Pi und schließen eine Kamera an, in dessen Stream die Objekte erkannt und ausgegeben werden.

Benutztes Zubehör

Um dem Tutorial zur Objekterkennung folgen zu können, sind lediglich wenige Komponenten nötig:

Du kannst auch jede andere kompatible USB Kamera nutzen. Die Auflösung sollte allerdings ausreichend sein. Das offizielle Raspberry Pi Modul bietet sich aufgrund der kompakten Größe an. Außerdem wird keiner der USB Ports belegt.

 

Was ist Objekterkennung?

Raspberry Pi Objekterkennung mit TensorFlow

Objekterkennung von verschiedenen Obstsorten. Quelle: TensorFlow

Auf Bildern ist es für Menschen recht einfach bekannte Muster und Objekte zu erkennen. Dies kommt daher, dass wir diese Objekte bereits häufig in verschiedenen Ausführungen gesehen haben. Ein Algorithmus kann dies ebenfalls erlernen, indem man ihm die entsprechenden Daten zum Lernen bereit stellt.

Wikipedia sagt dazu:

Object detection is a computer technology related to computer vision and image processing that deals with detecting instances of semantic objects of a certain class (such as humans, buildings, or cars) in digital images and videos. Well-researched domains of object detection include face detection and pedestrian detection. Object detection has applications in many areas of computer vision, including image retrieval and video surveillance.

Einige Beispiele (und Beispielbilder) findet man auf der TensorFlow Website.

 

Vorbereitung Installation von TensorFlow auf dem Raspberry Pi

Wir beginnen mit dem Flashen des Betriebssystems auf eine Micro SD Karte. Hierfür laden wir eine Version von Raspbian (ich benutze Raspbian Buster) von der offiziellen Seite. Um das Image in der Zip-Datei auf die SD Karte zu flashen, kannst du diesem Tutorial folgen.

Anschließend kannst du dich entweder per SSH mit dem Raspberry Pi verbinden, oder aber Bildschirm und Tastatur anschließen und direkt auf dem Pi arbeiten.

Raspberry Pi Kamera CSI PortR

Die Kontaktseite des CSI Kabels muss nach oben.

Wir beginnen damit die Kamera anzuschließen. Die offizielle Kamera wird per CSI angeschlossen (siehe Bild). Wir aktivieren das Modul zunächst:

sudo raspi-config

Unter „Interfacing Options“ > „Camera“ schaltest du die Kamera aktiv und musst danach neustarten.

Falls du eine USB Kamera nutzt, solltest du zunächst prüfen, ob diese erkannt wurde. Mehr dazu gibt es in diesem Tutorial.

 

Installation von TensorFlow Lite

Machen wir nun mit dem Aktualisieren der Paketquellen weiter. Starte das Terminal und gib folgenden Befehl ein:

sudo apt-get update
sudo apt-get upgrade

Anstatt alle Pakete und Dateien selbst zu erstellen, nutzen wir ein veröffentlichtes Repository und klonen dieses.

git clone https://github.com/EdjeElectronics/TensorFlow-Lite-Object-Detection-on-Android-and-Raspberry-Pi tflite1
cd tflite1

In diesem Ordner erstellen wir eine „virtuelle Umgebung“ (virtualenv): Damit ist es möglich unterschiedliche Pakete (und Versionen) für verschiedene Projekte zu installieren, ohne dass man dies global machen muss.

sudo pip3 install virtualenv

Das neue Environment erstellen wir folgendermaßen:

python3 -m venv tflite1-env

Dadurch wird ein Ordner mit dem angegebenen Namen erstellt, der alle Python Pakete für dieses Environment enthält. Diesen aktivieren wir nun.

source tflite1-env/bin/activate

Falls du eine neue Konsole öffnest, muss das Environment erneut aktiviert werden.

Die Installation aller benötigter Pakete, ist zusammengefasst in einem Bash-Skript, das wir ausführen (dauert eine Weile). Alternativ kannst du die Befehle unten auch manuell ausführen.

bash get_pi_requirements.sh

 

Beispielprojekt: Raspberry Pi Objekterkennung mittels Kamera-Livestream

TensorFlow Lite arbeitet mit sogenannten „Detection Models“. Hierfür kann man seine eigenen Modelle trainieren, um Objekte zu erkennen. Alternativ bietet Google (und andere) ebenfalls solche Modelle zum Download an. Jedes Modell besteht aus folgenden zwei Dateien:

  1. detect.tflite: Enthält den Graphen des Models (nicht-lesbarer Bytecode)
  2. labelmap.txt: Enthält die entsprechenden Bezeichnungen (Labels) der Objekte als Textdatei. Diese Namen kannst du ändern (z.B. übersetzen).

Auf der offiziellen TensorFlow Webseite findet sich ein solches Model zum Download („Download starter model and labels“). Kopiere diesen Link (Rechtsklick) und ersetze ihn im folgenden Befehl ().

wget <Link>

Anschließend entpacken wir die Datei in einen Ordner:

unzip coco* -d Sample_TF_Lite_Model

 

Nun führen wir die Python Datei aus (falls du per SSH arbeitest, muss X11 installiert sein):

python3 TFLite_detection_webcam.py --modeldir=Sample_TF_Lite_Model

Es öffnet sich ein neues Fenster, in dem der Kamerastream zu sehen ist. Außerdem sind die Rechtecke markiert, in denen Objekte gefunden wurden.

Raspberry Pi Object Detection TensorFlow Lite

Bei mir wurden folgende Objekte richtig erkannt:

  • Dining Table
  • Cell Phone
  • Apple
  • Orange
  • Banana

Wie du siehst, gibt es zusätzliche Prozentangaben, wie wahrscheinlich es ist, dass es sich um jenes Objekt handelt.

Wenn wir uns die entsprechende Datei ansehen, erkennen wir, dass Tensorflow uns ebenfalls die Rechtecke (Boxen), Labels und Scores ausgibt.

Im nächsten Tutorial gehen wir genauer darauf ein, wie man einfach sein eigenes Model trainiert und einbindet.

19 Kommentare

  1. Hallo,
    die vorgestellte Anwendung Objekterkennung mittels TensorFlow und Kamera ist sehr interessant.
    Nun möchte ich nicht die vorgestellten Objekte in diesem Beispiel erkennen sondern ein Eichhörnchen im Garten.

    Was muss ich tun und welche Software benutzen (iOS), um ein Eichhörnchen Foto für die Objekterkennung aufzubereiten?

    Antworten
    • Ich bin dabei ein weiteres Tutorial zu erstellen, in dem ich zeige wie mannsehr einfach sein eigenes Modell in Tensorflow nutzt. Kommt demnächst 🙂

      Antworten
      • Hallo Felix,
        danke für die Anleitung. Ich warte auch sehnlichst auf das neue Tutorial für die eigenen Modelle (Katzen). Ich habe abe rnoch zwei kleine Probleme. Meine Kamera hat einen Rot/rosa Stich und das Programm hängst sich nach einer Zeit auf. Hast du eine Idee woran das liegen Kann?
        Danke

        Axel

      • Hallo Axel,
        das Tutorial kommt wahrscheinlich morgen.
        Welche Kamera nutzt du denn?

        Edit: Link ist im Tutorial ergänzt.

        LG, Felix

  2. Super Tool
    hat auch auch Funktioniert ,konnte wie im Beispiel Objekte erkennen .Super Tutorial ,Dankeschön
    Wenn ich das jetzt nochmal Probiere kommt die Fehlermeldung
    „TF_Lite_Model
    Traceback (most recent call last):
    File „TFLite_detection_webcam.py“, line 19, in
    import cv2
    „ModuleNotFoundError: No module named ‚cv2‘

    Mit freundlichen Grüßen
    Udo

    Antworten
  3. Ich komme leider nicht weiter: Nach dem clonen des Tensor-Flow Programmes, bekomme ich immer die Meldung „Kein Speicherplatz mehr verfügbar“. trotz einer 32 GB SD Karte auf einem Raspberry 3B+.

    Antworten
  4. Hallo Felix,

    ich nutze die „grüne“ original Raspberry V2.1. Die Einzelbilder sehn gut aus, aber die Bilder die ich die Remoteverbindung von deinem Script angezeigt bekomme, sind deutlich dunkler und haben einen rot Stich. Gibt es die Möglichkeit eines Weißabgleiches?

    Besten Dank

    Axel

    Antworten
  5. Hi Felix,

    Dankeschön erstmal für dein super Tutorial. Bin gerade dabei dieses umzusetzen für unsere zukünftigen Praktikanten.

    Nun zu meiner Frage.
    Nachdem herunterladen des Models von der TensorFlow Webseite und erfolgreichen entpacken bekomme ich die Fehlermeldung :

    „can´t open file ‚TFLite_detection_webcam.py‘: [Errno 2] No such file or directory

    Innerhalb der Zip Datei habe ich auch nur
    – detect.tflite
    – labelmap.txt

    –> Dateipfad hab ich angepasst

    Was mach ich Falsch?

    Dankeschön!
    Gruß,
    Jakob

    Antworten
  6. Hallo Felix,
    super Anleitung.
    Gibt es auch die Möglichkeit eine Netzwerkkamera mit Stream einzubinden ?
    Ich wollte jetzt nicht unbedingt eine zweite Kamera installieren.

    Danke im Voraus.

    Antworten
  7. Hey ,
    tolles Tutorial! Klappt alles.
    Nur wie kann ich es realisieren, dass z.B. eine bestimmte Funktion ausgelöst wird, sobald ich z.B. zu 60% ein Apfel im Bild habe?
    Ist das möglich?

    Antworten
  8. Hallo,
    leider habe ich ein Problem bei dem Schritt mit dem Befehl ,,unzip coco* -d Sample_TF_Lite_Model“. Immer wenn ich diesen ausführe, bekomme ich als Ausgabe, dass es diese ZIP Datei nicht gibt… Kann mir da vielleicht jemand helfen?

    Antworten
      • Hallo,
        als Ausgabe nach dem Befehl „ls“ bekomme ich dann:
        ‚1?lite-format=tflite‘ test1.jpg
        Android test.mp4
        doc tflite1-env
        get_pi_requirements.sh TFLite_detection_image.py
        Raspberry_Pi_Guide.md TFLite_detection_stream.py
        README.md TFLite_detection_video.py
        ssd_mobilenet_v1_1_metadata_1.tflite TFLite_detection_webcam.py

        Viele Grüße

  9. Hallo zusammen,
    Leider komme ich nicht weiter.
    Bekomme nach: python3 -m venv tflite1-env
    immer folgende Fehlermeldung:
    Error: Command ‚[‚/home/pi/tflite1/tflite1-env/bin/python3‘, ‚-Im‘, ‚ensurepip‘, ‚–upgrade‘, ‚–default-pip‘]‘ returned non-zero exit status 1

    Kann mir jemand helfen?
    Vielen Dank!

    Antworten

Hinterlasse einen Kommentar

Deine Email Adresse wird nicht veröffentlicht.

Blog abonnieren

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