Ein intelligenter Objektzähler: Bilderkennung leicht gemacht mit Edge Impulse
Möchten Sie einen Raspberry Pi und eine Kamera mit Edge Impulse in ein intelligentes Werkzeug zur Objektzählung verwandeln? Dieses Projekt zeigt, wie einfach es ist, mit Edge Impulse auf einem Raspberry Pi zu starten. Mach mit.
Edge Impulse ist auf die Bereitstellung von Tools und Plattformen für die Entwicklung von maschinellen Lernmodellen für insbesondere auf eingebettetes Edge-Computing spezialisiert. Edge-Computing bedeutet die Verarbeitung von Daten in der Nähe der Datenquelle anstatt auf einem entfernten Server. Das ist perfekt für die Implementierung auf einem Raspberry Pi! In diesem Beispiel wollen wir kleine Objekte zählen, und zwar gewöhnliche Knöpfe auf gewöhnlichem Stoff.
Plattformen für maschinelles Lernen wie Edge Impulse verwenden so genannte Modelle, das heißt, bestimmte Arten von Algorithmen, die zur Datenanalyse und Mustererkennung eingesetzt werden. Diese Modelle werden darauf trainiert, Muster zu erkennen, Vorhersagen zu treffen oder Aufgaben auf der Grundlage von Eingabedaten auszuführen.
Die Klassifizierung von Objekten ist mit Edge-Impulse-Modellen leicht möglich. Sie können zwischen Menschen und Tieren, zwischen Fahrrädern und Autos und so weiter unterscheiden. Außerdem können Sie eine bestimmte Art von Objekten leicht von anderen Arten von Objekten unterscheiden. Alles, was Sie brauchen, ist eine Kamera von guter Qualität, ausreichend Licht, eine gute Fokussierung und schließlich einen einigermaßen gut gebauten Computer wie einen Raspberry Pi 3 oder Raspberry Pi 4.
Dieses Projekt war von Anfang an für die Installation auf Mikrocontroller-Ebene gedacht, einem Espressif ESP32, einem Arduino Nicla Vision oder ähnlichem. Aus diesem Grund wurde es für einen sehr kleinen Zählbereich (120 Pixel × 120 Pixel) mit einem relativ kleinen Knopf als Objekt der Begierde entwickelt. Letztendlich stellte sich heraus, dass diese MCUs selbst für den kleinsten Bereich überhaupt nicht geeignet waren. Die maschinellen Lernmodelle werden auf den Edge-Impulse-Servern vortrainiert, und es wird eine so genannte Modelldatei erstellt, die auf dem eingebetteten Gerät gespeichert wird. Dabei ist die Modelldatei selbst etwa 8 MB groß! Daher wurde das Projekt schließlich auf einem Raspberry Pi installiert, wo es problemlos funktioniert.
Wissen und Weisheit
Wenn Sie Edge Impulse kennen, dann, das können Sie mir glauben, ist die Hälfte der Arbeit bereits erledigt. Für die andere Hälfte müssen Sie Ihr Modell nur noch optimieren, um es auf ein akzeptables Leistungsniveau abzustimmen. Ein Computer-KI-Modell funktioniert, entschuldigen Sie, wie ein Kind. Stellen Sie sich vor, wie Sie Dinge wie „A steht für Apfel“ und „B steht für Ball“ gelernt haben. Man hat Ihnen einen Apfel aus verschiedenen Blickwinkeln gezeigt und Ihnen dann beigebracht, das Objekt „Apfel“ zu nennen. Das Gleiche gilt für „Ball“. Heute können Sie einen Apfel und einen Ball aus allen möglichen Blickwinkeln relativ leicht erkennen! Und auch eine künstliche Intelligenz kann diese Objekte leicht identifizieren.
Stellen Sie sich vor, es gibt einen Korb, in dem apfelgroße Bälle und ballgroße Äpfel gemischt sind, die alle gleich aussehen. Was würden Sie als Kind tun? Da es nur die Begriffe Apfel und Ball kennt, würde es die Objekte einfach nicht unterscheiden können! Auch eine KI würde danebenliegen. Aber stellen Sie sich vor, der Obstkorb steht bei einem Obst- und Gemüsehändler. Dann ist höchstwahrscheinlich keines der Objekte ein Ball, und einige oder alle davon könnten Äpfel sein. Diesen „Trick“, einen Apfel mit einem Obst- und Gemüsehändler in Verbindung zu bringen, nennt man Weisheit, die man weder von einem Kind noch von einer KI erwarten kann, bis man ihm/ihr den Bezug lehrt. Der Mensch lernt im Laufe seines Lebens viele solcher Bezüge, so dass er schließlich weise genug ist, einen Apfel mit einem Obst- und Gemüsehändler in Verbindung zu bringen.
KI entwickelt sich so schnell weiter, dass sie eines Tages ebenfalls über die nötige Weisheit verfügen dürfte. Aber bis dahin muss man dem ML-Modell für Äpfel und Bälle aus allen möglichen Blickwinkeln beibringen, sie ohne Verwirrung zu erkennen, zum Beispiel durch das Texturprofil eines Apfels, seines Stiels, seine Rillen an der Oberfläche, den Blick von oben und unten und vieles mehr. Auf jeden Fall stehen in Edge Impulse viele verschiedene Modelle mit unterschiedlichen Fähigkeiten zum Testen und Experimentieren zur Verfügung.
Erste Schritte mit Edge Impulse
Eröffnen Sie zunächst ein Konto bei Edge Impulse , wofür Sie eine E-Mail-ID benötigen. Sammeln Sie eine Handvoll ähnlicher Knöpfe. Wenn Sie die Website von einem Raspberry Pi aus öffnen und dessen Kamera verwenden (angeschlossen entweder über USB oder über den Cam-Port), können Sie Bilder der Knöpfe aus verschiedenen Winkeln aufnehmen (was erforderlich ist, wenn das Modell in einem realen Arbeitsfeld eingesetzt werden soll). Edge Impulse bietet auch die Möglichkeit, Ihr Mobiltelefon oder Ihren Laptop als Eingabegerät für die Datenerfassung zu nutzen, was für die Datenerfassung mancher Edge-Impulse-Projekte sehr praktisch ist.
Das Projekt
Das Edge-Impulse-Projekt ist grob gesagt in die folgenden Schritte unterteilt, die alle auf der Edge-Impulse-Website ausgeführt werden müssen.
1. Datenerfassung (data acquisition): Das können Bilder, Töne, Temperaturen, Entfernungen und so weiter sein. Ein Teil der Daten wird als Testdaten abgetrennt, während alle anderen Daten als Trainingsdaten verwendet werden.
2. Impulsentwurf (impulse design): Der Hauptteil davon wird als Create Impulse bezeichnet. In diesem Zusammenhang bezieht sich ein „Impuls“ auf eine Art Pipeline oder einen Arbeitsablauf zur Erstellung eines maschinellen Lernmodells. Dieser Impuls umfasst mehrere Stufen, darunter die Anpassung der Eingabeparameter im Zusammenhang mit den gerade erfassten Daten, die Signalverarbeitung, die Feature-Extraktion und das maschinelle Lernmodell selbst. „Features" sind einzelne messbare Eigenschaften oder Merkmale des beobachteten Phänomens. Im Wesentlichen sind Features die Datenattribute, die von Modellen verwendet werden, um Muster zu erkennen und Entscheidungen zu treffen. Die Impulse-Pipeline ist unterteilt in:
- Eingabeparameter (input parameters): Bild (Breite, Höhe), Ton (Tonparameter)
- Verarbeitungsblock (processing block): Wie werden die Daten verarbeitet?
- Lernblock (learning block): Objektdaten dieses Modells
Sie müssen diese drei Schritte auswählen und konfigurieren.
3. Bildverarbeitung (image processing): Erzeugen von Merkmalen aus den gesammelten Bildern.
4. Objekterkennung (object detection): Wählen Sie Ihr neuronales Netzwerkmodell und trainieren Sie es.
Im letzten Teil, der Objekterkennung, ist Ihre Expertise gefragt (ich würde es eher als Versuch und Irrtum bezeichnen), damit die Genauigkeit des Modells 85 % oder mehr beträgt. Manchmal müssen Sie einige schlechte Bilder (auch Ausreißer genannt) aus dem Modell werfen, um seine Effizienz zu verbessern.
Es gibt eine Handvoll Modelle, die Sie ausprobieren können, um die Genauigkeit des Modells zu ermitteln. Alles, was über 90 % liegt, ist großartig, aber natürlich sollte es nicht 100 % genau sein! Wenn das der Fall ist, dann stimmt etwas mit Ihren Daten nicht. Es könnten zu wenige Daten oder unzureichende Merkmale vorhanden sein. Überprüfen und korrigieren Sie die Daten und versuchen Sie es erneut! Bei diesem Projekt lag die Genauigkeit bei 98,6 %. Sicherlich war die Anzahl der Daten (etwa 40) gering, aber für ein Einsteigerprojekt ist das ziemlich gut (siehe Bild 1). Die Dateien für dieses Projekt sind auf der Elektor-Labs-Webseite des Projekts verfügbar.
Testen des Modells
Sie können Ihr Modell zunächst mit den Testdaten testen. Beginnen Sie dort, und gehen Sie mit Ihrem Gerät dann zu lebensechten Daten über, um zu sehen, ob es funktioniert!
Auf dem Dashboard der Edge-Impulse-Startseite ist die Testfunktion verfügbar. Sie können das Modell direkt im Browser ausführen, oder Sie können es mit Ihrem Smartphone testen. Dazu bietet Edge Impulse einen QR-Code, den Sie mit dem Smartphone scannen können (Bild 2). Richten Sie die Kamera auf die Knöpfe (Bild 3, Bild 4 und Bild 5) und sehen Sie, ob sie gezählt werden oder nicht!
Einsatz des Raspberry Pi
Um das Modell auf einem Raspberry-Pi-Computer auszuführen, müssen Sie die *.eim-Datei herunterladen. Aber anders als bei Hardware wie Arduino, Nicla Vision oder ESP32, wo man die Datei direkt herunterladen kann, muss man hier zuerst Edge Impulse auf dem Raspberry Pit installieren und innerhalb der Edge-Impulse-Daemon-Software diese Datei herunterladen. Aber keine Sorge, Edge Impulse hat eine ganze Seite der Installation von Edge Impulse auf dem Raspberry Pi gewidmet. Es gibt ein paar Abhängigkeiten, die zuerst installiert werden müssen. Schauen Sie sich an, wo der Vorgang ziemlich gut beschrieben ist. Es ist wirklich ziemlich einfach.
OK, jetzt haben Sie Edge Impulse auf dem Raspberry Pi installiert; der Spaß kann beginnen. Vergessen Sie nicht, den Raspberry Pi mit dem Internet zu verbinden.
Führen Sie im Terminal des Raspberry Pi den Befehl edge-impulse-linux-runner aus. Dadurch wird ein Assistent gestartet, der Sie auffordert, sich anzumelden und ein Edge-Impulse-Projekt auszuwählen. Wenn Sie später zwischen den Projekten wechseln möchten, führen Sie den Befehl erneut mit der Option --clean aus. Dieser Befehl kompiliert und lädt das KI-Modell Ihres Projekts automatisch herunter und startet es dann auf Ihrem Raspberry Pi. Zeigen Sie der Kamera, die an Ihren Raspberry Pi angeschlossen ist, die Knöpfe, und sie sollte sie zählen. Das ist gut so! Im Folgenden werden wir das System mit Hilfe von Python und einem Sprachsynthesizer modifizieren, der nach dem Zählen die Anzahl der Knöpfe, die er zu zählen hat, ausspricht.
Einsatz des Modells in Python
In der obigen Implementierung würde es so funktionieren, wie es im Edge-Impulse-Modell vorgesehen ist. Damit Sie es für Ihren speziellen Zweck anpassen, zum Beispiel um einen akustischen Alarm auszulösen oder eine LED aufleuchten zu lassen, wenn der Zähler „2 oder mehr“ erreicht, müssen Sie einen anderen Weg finden! Hier kommt Python 3 hinzu, um Ihnen dabei zu helfen, wenn Linux-sdk-python auf Ihrem Raspberry Pi installiert ist.
Das Edge Impulse SDK Software Development Kit (SDK) ist für viele Modelle verfügbar, einschließlich Python, Node.js, C++ und so weiter. Informieren Sie sich auf der SDK-Python-Seite .
Sobald linux-sdk-python installiert ist, gehen Sie in das Verzeichnis linux-sdk-python/examples/image und führen Sie die Python-Datei zur Bilderkennung aus. Lassen Sie sich nicht verwirren: Im Beispielverzeichnis gibt es drei Unterverzeichnisse - jeweils eines für Audiodaten, Bilddaten und benutzerdefinierte Daten. Im Bildverzeichnis ist die Videoklassifizierungsdatei auch für Videoeingangsdaten verfügbar. Das Verzeichnis custom ist für die Anpassung anderer Daten (nur für Experten!).
Führen Sie nun den Befehl aus:
python3 classify-image.py /home/bera/downloads/model.eim
Die Modelldatei *.eim ist aus dem jeweiligen Verzeichnis ihres Speicherortes zu laden. Wenn Sie möchten, können Sie sie auch in das SDK-Verzeichnis kopieren!
Auf diese Weise müssen Sie die Python-Datei mit der heruntergeladenen model.eim-Datei laden. Das Programm findet automatisch das über USB oder den Cam-Port angeschlossene Kameramodul und startet! In der oberen linken Ecke öffnet sich ein kleines Kamera-Fenster (120 × 120), und die identifizierten Knöpfe werden mit einer kleinen roten Markierung versehen. Die identifizierte Anzahl wird im Terminal angezeigt. Achten Sie auf ausreichend Licht und darauf, dass die Kamera für die Knöpfe richtig fokussiert ist. Dies ist besonders bei billigen Kameras wichtig. Wenn Sie das Modell auf Ihrem Smartphone laufen lassen, liefert es weitaus bessere Bilder und zählt viel schneller. Achten Sie dennoch auch hier auf das richtige Licht und die richtige Fokussierung, dann werden Sie bessere Ergebnisse erzielen.
In den obigen Bildschirmfotos des Raspberry Pi ist oben links das kleine 120 × 120-Fenster zu sehen, in dem alle drei Knöpfe vom Modell identifiziert und gezählt werden. Sehen Sie die deutlich sichtbare rote Markierung auf allen drei Knöpfen!
In Bild 6 fehlen vier Knöpfe, weil der Fokus und das Licht unzureichend sind. Die Kamera hat auch kein Stativ, das man für diese Arbeit verwenden sollte! Deshalb empfehle ich, die Kamera auf einem Stativ zu befestigen, wie bei einem „Mikroskop-Setup“. Achten Sie darauf, dass Sie nicht schräg von oben auf die Objekte schauen.
In Bild 7 habe ich einen Knopf entfernt, und das Modell hat ihn zuerst richtig gezählt. Es zeigte zwei Knöpfe an, aber als ich die Auslösetaste drückte, wurde die Kamera falsch ausgerichtet und verlor die Knöpfe. Die Kamera sollte deshalb über ein langes (Flachband-) Kabel wie in Bild 8 verfügen, damit sie sich nicht bewegt, wenn man am Computer etwas drückt. Solche Kabel sind unter anderem bei Amazon erhältlich. Sobald die Kamera dann auf einem Stativ befestigt ist und ausreichend (Tages-) Licht auf die Objekte fällt, wird das Modell unfehlbar funktionieren.
Passen Sie Ihr Modell an
Schauen Sie sich bitte die Datei classify-image.py an. Es handelt sich um eine einfache Python-Datei, die mit wenig Aufwand angepasst werden kann. In dieser Python-Datei habe ich ein espeak-Modul eingefügt, das, sobald ein Knopf oder mehrere gefunden werden, deren Anzahl über einen Lautsprecher ansagt. Um espeak auf Ihrem Raspberry Pi zu installieren, führen Sie den Befehl aus:
sudo apt-get install espeak
In Listing 1 ist die Python-Datei einschließlich meiner Änderungen dargestellt. Der offene Sprachsynthesizer Espeak ist ein eigenständiges Text-to-Speech-Modul für Python. Er benötigt keine Internetverbindung, um zu funktionieren.
Geänderte Ausführung
Sie haben das Python-Programm modifiziert. Wenn Sie die Python-Datei jetzt ausführen, findet sie die Knöpfe (oben links öffnet sich unser kleines Kamerafenster). Die Zahlen werden im Terminalfenster angezeigt und Espeak sagt die Anzahl an: „Found five buttons“ und so weiter. Wenn Sie ein Relais ansteuern möchten oder eine LED aufleuchten soll, importieren Sie die GPIO-Bibliothek von Python und feuern dann den zugehörigen GPIO, um (wegen des hohen Spulenstroms über einen Schalttransistor) das Relais anzusteuern.
Nachspiel
Edge Impulse wurde 2019 mit dem Ziel gegründet, Entwicklern die Möglichkeit zu geben, die nächste Generation von intelligenten Geräten zu entwickeln. Seitdem sind KI-gesteuerte Programme und Geräte auf ESP32, Jetson Nano, Raspberry Pi, Orange Pi, Maixduino, OpenMV, Nicla Vision und vielen anderen erschienen. Dieser Trend wird sich in den kommenden Tagen noch verstärken! Vorbei sind die Zeiten der Super- oder der großen Markencomputer. Kleine, modulare Geräte mit geringer Stromaufnahme nehmen diesen Raum schnell ein. Und wer weiß? Vielleicht können wir schon bald die eingebaute Weisheit direkt aus der Verpackung heraus installieren!
Anmerkung der Redaktion: Dieser Artikel (230575-02) erscheint in Elektor März/April 2024.
Haben Sie Fragen oder Kommentare?
Wenn Sie technische Fragen oder Kommentare zu diesem Artikel haben, wenden Sie sich bitte per E-Mail an den Autor unter berasomnath@gmail.com oder an die Elektor-Redaktion unter redaktion@elektor.de.