Tutorial: Durchführen einer Beispielbildklassifizierungsinferenz für Bilder von einer Kamera mit TensorFlow Lite - AWS IoT Greengrass

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Tutorial: Durchführen einer Beispielbildklassifizierungsinferenz für Bilder von einer Kamera mit TensorFlow Lite

Dieses Tutorial zeigt Ihnen, wie Sie die Inferenzkomponente der TensorFlow Lite-Bildklassifizierung verwenden, um eine Beispiel-Bildklassifizierungsinferenz auf Bildern von einer Kamera lokal auf einem Greengrass-Kerngerät durchzuführen. Diese Komponente umfasst die folgenden Komponentenabhängigkeiten:

  • TensorFlow Lite-Bildklassifizierungsmodellspeicherkomponente

  • TensorFlow Lite-Laufzeitkomponente

Anmerkung

Dieses Tutorial greift auf das Kameramodul für Raspberry Pi- oder NVIDIA Jetson Nano-Geräte zu, AWS IoT Greengrass unterstützt jedoch andere Geräte auf Armv7l, Armv8- oder x86_64-Plattformen. Informationen zum Einrichten einer Kamera für ein anderes Gerät finden Sie in der entsprechenden Dokumentation für Ihr Gerät.

Weitere Informationen zum Machine Learning auf Greengrass-Geräten finden Sie unter Durchführen von Machine Learning-Inferenzen.

Voraussetzungen

Um dieses Tutorial abzuschließen, müssen Sie zuerst abschließenTutorial: Durchführen einer Inferenz bei der Bildklassifizierung mit TensorFlow Lite.

Sie benötigen außerdem Folgendes:

  • Ein Linux-Greengrass-Core-Gerät mit einer Kameraschnittstelle. Dieses Tutorial greift auf das Kameramodul auf einem der folgenden unterstützten Geräte zu:

    Informationen zum Einrichten eines Greengrass-Core-Geräts finden Sie unter Tutorial: Erste Schritte mit AWS IoT Greengrass V2.

    Das Core-Gerät muss die folgenden Anforderungen erfüllen:

    • Auf Greengrass-Core-Geräten, auf denen Amazon Linux 2 oder Ubuntu 18.04 ausgeführt wird, ist GNU C Library (glibc) Version 2.27 oder höher auf dem Gerät installiert.

    • Auf Armv7l-Geräten wie Raspberry Pi sind Abhängigkeiten für OpenCV-Python auf dem Gerät installiert. Führen Sie den folgenden Befehl aus, um die Abhängigkeiten zu installieren.

      sudo apt-get install libopenjp2-7 libilmbase23 libopenexr-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libgtk-3-0 libwebp-dev
    • Raspberry Pi-Geräte, auf denen Raspberry Pi OS Bullseye ausgeführt wird, müssen die folgenden Anforderungen erfüllen:

      • NumPy 1.22.4 oder höher ist auf dem Gerät installiert. Raspberry Pi OS Bullseye enthält eine frühere Version von NumPy, sodass Sie den folgenden Befehl ausführen können, um ein Upgrade NumPy auf dem Gerät durchzuführen.

        pip3 install --upgrade numpy
      • Der auf dem Gerät aktivierte Legacy-Kamera-Stack. Raspberry Pi OS Bullseye enthält einen neuen Kamera-Stack, der standardmäßig aktiviert und nicht kompatibel ist, daher müssen Sie den Legacy-Kamera-Stack aktivieren.

        So aktivieren Sie den Legacy-Kamera-Stack
        1. Führen Sie den folgenden Befehl aus, um das Raspberry Pi-Konfigurationstool zu öffnen.

          sudo raspi-config
        2. Wählen Sie Schnittstellenoptionen aus.

        3. Wählen Sie Legacy-Kamera aus, um den Legacy-Kamera-Stack zu aktivieren.

        4. Starten Sie den Raspberry Pi neu.

  • Für Raspberry Pi- oder NVIDIA Jetson Nano-Geräte Raspberry Pi Camera Module V2 – 8 Megapixel, 1080p. Weitere Informationen zum Einrichten der Kamera finden Sie unter Verbinden der Kamera in der Raspberry Pi-Dokumentation.

Schritt 1: Konfigurieren des Kameramoduls auf Ihrem Gerät

In diesem Schritt installieren und aktivieren Sie das Kameramodul für Ihr Gerät. Führen Sie die folgenden Befehle auf dem Gerät aus.

Raspberry Pi (Armv7l)
  1. Installieren Sie die picamera Schnittstelle für das Kameramodul. Führen Sie den folgenden Befehl aus, um das Kameramodul und die anderen Python-Bibliotheken zu installieren, die für dieses Tutorial erforderlich sind.

    sudo apt-get install -y python3-picamera
  2. Überprüfen Sie, ob Picamera erfolgreich installiert wurde.

    sudo -u ggc_user bash -c 'python3 -c "import picamera"'

    Wenn die Ausgabe keine Fehler enthält, ist die Überprüfung erfolgreich.

    Anmerkung

    Wenn die ausführbare Python-Datei, die auf Ihrem Gerät installiert ist, istpython3.7, verwenden Sie python3.7 anstelle von python3 für die Befehle in diesem Tutorial. Stellen Sie sicher, dass Ihre pip-Installation der richtigen python3.7- oder python3-Version zugeordnet ist, um Abhängigkeitsfehler zu vermeiden.

  3. Starten Sie das Gerät neu.

    sudo reboot
  4. Öffnen Sie das Raspberry Pi-Konfigurations-Tool.

    sudo raspi-config
  5. Verwenden Sie die Pfeiltasten zum Öffnen von Interfacing Options (Verbindungsoptionen) und aktivieren Sie die Kameraschnittstelle. Wenn Sie dazu aufgefordert werden, lassen Sie den Neustart des Geräts zu.

  6. Führen Sie den folgenden Befehl aus, um die Kameraeinrichtung zu testen.

    raspistill -v -o test.jpg

    So werden ein Vorschaufenster im Raspberry Pi geöffnet, ein Bild mit dem Namen test.jpg in Ihrem aktuellen Verzeichnis gespeichert und Informationen über die Kamera im Raspberry Pi-Terminal angezeigt.

  7. Führen Sie den folgenden Befehl aus, um einen Symlink zu erstellen, damit die Inferenzkomponente aus der virtuellen Umgebung, die von der Laufzeitkomponente erstellt wird, auf Ihre Kamera zugreifen kann.

    sudo ln -s /usr/lib/python3/dist-packages/picamera "MLRootPath/greengrass_ml_tflite_venv/lib/python3.7/site-packages"

    Der Standardwert für MLRootPath für dieses Tutorial ist /greengrass/v2/work/variant.TensorFlowLite/greengrass_ml. Der greengrass_ml_tflite_venv Ordner an diesem Speicherort wird erstellt, wenn Sie die Inferenzkomponente zum ersten Mal in bereitstellenTutorial: Durchführen einer Inferenz bei der Bildklassifizierung mit TensorFlow Lite.

Jetson Nano (Armv8)
  1. Führen Sie den folgenden Befehl aus, um die Kameraeinrichtung zu testen.

    gst-launch-1.0 nvarguscamerasrc num-buffers=1 ! "video/x-raw(memory:NVMM), width=1920, height=1080, format=NV12, framerate=30/1" ! nvjpegenc ! filesink location=test.jpg

    Dadurch wird ein Image mit dem Namen erfasst und test.jpg in Ihrem aktuellen Verzeichnis gespeichert.

  2. (Optional) Starten Sie das Gerät neu. Wenn beim Ausführen des gst-launch Befehls im vorherigen Schritt Probleme auftreten, kann ein Neustart Ihres Geräts diese Probleme möglicherweise beheben.

    sudo reboot
Anmerkung

Für Armv8 (AArch64)-Geräte, wie z. B. Jetson Nano, müssen Sie keinen Symlink erstellen, damit die Inferenzkomponente aus der virtuellen Umgebung, die von der Laufzeitkomponente erstellt wird, auf die Kamera zugreifen kann.

Schritt 2: Überprüfen Ihres Abonnements für das Standardbenachrichtigungsthema

In haben Sie den AWS IoT MQTT-Client in der AWS IoTKonsole so konfiguriertTutorial: Durchführen einer Inferenz bei der Bildklassifizierung mit TensorFlow Lite, dass er MQTT-Nachrichten überwacht, die von der TensorFlow Lite-Bildklassifizierungskomponente zum ml/tflite/image-classification Thema veröffentlicht wurden. Überprüfen Sie in der -AWS IoTKonsole, ob dieses Abonnement vorhanden ist. Andernfalls führen Sie die Schritte unter aus, Schritt 1: Abonnieren des Themas mit Standardbenachrichtigungen um dieses Thema zu abonnieren, bevor Sie die Komponente auf Ihrem Greengrass-Kerngerät bereitstellen.

Schritt 3: Ändern der Konfiguration der TensorFlow Lite-Image-Klassifizierungskomponente und Bereitstellen

In diesem Schritt konfigurieren Sie die TensorFlow Lite-Bildklassifizierungskomponente und stellen sie auf Ihrem Core-Gerät bereit:

  1. Wählen Sie im Navigationsmenü der AWS IoT GreengrassKonsole Komponenten aus.

  2. Wählen Sie auf der Seite Komponenten auf der Registerkarte Öffentliche Komponenten die Option aws.greengrass.TensorFlowLiteImageClassification aus.

  3. Wählen Sie auf der aws.greengrass.TensorFlowLiteImageClassification Seite Bereitstellen aus.

  4. Wählen Sie unter Zur Bereitstellung hinzufügen eine der folgenden Optionen aus:

    1. Um diese Komponente mit einer auf Ihrem Zielgerät vorhandenen Bereitstellung zusammenzuführen, wählen Sie Zu vorhandener Bereitstellung hinzufügen und wählen Sie dann die Bereitstellung aus, die Sie überarbeiten möchten.

    2. Um auf Ihrem Zielgerät eine neue Bereitstellung zu erstellen, wählen Sie Neue Bereitstellung erstellen aus. Wenn auf Ihrem Gerät bereits eine Bereitstellung vorhanden ist, ersetzt die Auswahl in diesem Schritt die vorhandene Bereitstellung.

  5. Gehen Sie auf der Seite Ziel angeben wie folgt vor:

    1. Geben Sie unter Bereitstellungsinformationen den Anzeigenamen für Ihre Bereitstellung ein oder ändern Sie ihn.

    2. Wählen Sie unter Bereitstellungsziele ein Ziel für Ihre Bereitstellung aus und klicken Sie auf Weiter. Wenn Sie eine vorhandene Bereitstellung überarbeiten, können Sie das Bereitstellungsziel nicht ändern.

  6. Überprüfen Sie auf der Seite Komponenten auswählen unter Öffentliche Komponenten, ob die aws.greengrass.TensorFlowLiteImageClassification Komponente ausgewählt ist, und wählen Sie Weiter aus.

  7. Gehen Sie auf der Seite Komponenten konfigurieren wie folgt vor:

    1. Wählen Sie die Inferenzkomponente und dann Komponente konfigurieren aus.

    2. Geben Sie unter Konfigurationsaktualisierung das folgende Konfigurationsupdate in das Feld Zusammenzuführende Konfiguration ein.

      { "InferenceInterval": "60", "UseCamera": "true" }

      Mit diesem Konfigurationsupdate greift die Komponente auf das Kameramodul auf Ihrem Gerät zu und führt Inferenzen auf Bildern durch, die von der Kamera aufgenommen wurden. Der Inferenzcode wird alle 60 Sekunden ausgeführt.

    3. Wählen Sie Bestätigen aus, und wählen Sie dann Weiter.

  8. Behalten Sie auf der Seite Erweiterte Einstellungen konfigurieren die Standardkonfigurationseinstellungen bei und wählen Sie Weiter.

  9. Wählen Sie auf der Seite Überprüfen die Option Bereitstellen aus.

  1. Erstellen Sie eine -deployment.jsonDatei, um die Bereitstellungskonfiguration für die TensorFlow Lite-Image-Klassifizierungskomponente zu definieren. Diese Datei sollte wie folgt aussehen:

    { "targetArn":"targetArn", "components": { "aws.greengrass.TensorFlowLiteImageClassification": { "componentVersion": 2.1.0, "configurationUpdate": { "InferenceInterval": "60", "UseCamera": "true" } } } }
    • Ersetzen Sie im targetArn Feld targetArn durch den Amazon-Ressourcennamen (ARN) des Objekts oder der Objektgruppe, auf die die Bereitstellung ausgerichtet werden soll, und zwar im folgenden Format:

      • Objekt: arn:aws:iot:region:account-id:thing/thingName

      • Objektgruppe: arn:aws:iot:region:account-id:thinggroup/thingGroupName

    • In diesem Tutorial wird die Komponentenversion 2.1.0 verwendet. Ersetzen Sie im aws.greengrass.TensorFlowLiteImageClassification Komponentenobjekt 2.1.0, um eine andere Version der TensorFlow Lite-Bildklassifizierungskomponente zu verwenden.

    Mit diesem Konfigurationsupdate greift die Komponente auf das Kameramodul auf Ihrem Gerät zu und führt Inferenzen auf Bildern durch, die von der Kamera aufgenommen wurden. Der Inferenzcode wird alle 60 Sekunden ausgeführt. Ersetzen Sie die folgenden Werte

  2. Führen Sie den folgenden Befehl aus, um die TensorFlow Lite-Bildklassifizierungskomponente auf dem Gerät bereitzustellen:

    aws greengrassv2 create-deployment \ --cli-input-json file://path/to/deployment.json

Es kann einige Minuten dauern, bis die Bereitstellung abgeschlossen ist. Überprüfen Sie im nächsten Schritt im Komponentenprotokoll, ob die Bereitstellung erfolgreich abgeschlossen wurde, und schauen Sie sich die Inference-Ergebnisse an.

Schritt 4: Anzeigen von Inferenzergebnissen

Nachdem Sie die Komponente bereitgestellt haben, können Sie die Inferenzergebnisse im Komponentenprotokoll auf Ihrem Greengrass-Kerngerät und im AWS IoT MQTT-Client in der AWS IoT Konsole anzeigen. Informationen zum Abonnieren des Themas, zu dem die Komponente Inferenzergebnisse veröffentlicht, finden Sie unter Schritt 2: Überprüfen Ihres Abonnements für das Standardbenachrichtigungsthema.

Themen
    • AWS IoT MQTT-Client – Führen Sie die folgenden Schritte aus, um die Ergebnisse anzuzeigen, die die Inferenzkomponente im Standardbenachrichtigungsthema veröffentlicht:

      1. Wählen Sie im Navigationsmenü der AWS IoT Konsole Test, MQTT-Testclient aus.

      2. Wählen Sie unter Abonnements die Option ausml/tflite/image-classification.

    • Komponentenprotokoll – Um die Inferenzergebnisse im Komponentenprotokoll anzuzeigen, führen Sie den folgenden Befehl auf Ihrem Greengrass-Kerngerät aus.

      sudo tail -f /greengrass/v2/logs/aws.greengrass.TensorFlowLiteImageClassification.log

    Wenn Sie keine Inferenzergebnisse im Komponentenprotokoll oder im MQTT-Client sehen können, ist die Bereitstellung fehlgeschlagen oder hat das Core-Gerät nicht erreicht. Dies kann passieren, wenn Ihr Core-Gerät nicht mit dem Internet verbunden ist oder nicht über die erforderlichen Berechtigungen zum Ausführen der Komponente verfügt. Führen Sie den folgenden Befehl auf Ihrem Core-Gerät aus, um die AWS IoT Greengrass Core-Softwareprotokolldatei anzuzeigen. Diese Datei enthält Protokolle aus dem Bereitstellungsservice des Greengrass-Core-Geräts.

    sudo tail -f /greengrass/v2/logs/greengrass.log

    Weitere Informationen finden Sie unter Fehlerbehebung bei Machine Learning-Inferenzen.

    Nächste Schritte

    In diesem Tutorial erfahren Sie, wie Sie die TensorFlow Lite-Bildklassifizierungskomponente mit benutzerdefinierten Konfigurationsoptionen verwenden, um eine Beispielbildklassifizierung für von einer Kamera aufgenommene Bilder durchzuführen.

    Weitere Informationen zum Anpassen der Konfiguration öffentlicher Komponenten oder zum Erstellen benutzerdefinierter Machine-Learning-Komponenten finden Sie unter Anpassen Ihrer Machine-Learning-Komponenten.