Inhaltsverzeichnis:

Erstellen Sie einen Pi-Trash-Klassifizierer mit ML! - Gunook
Erstellen Sie einen Pi-Trash-Klassifizierer mit ML! - Gunook

Video: Erstellen Sie einen Pi-Trash-Klassifizierer mit ML! - Gunook

Video: Erstellen Sie einen Pi-Trash-Klassifizierer mit ML! - Gunook
Video: Jetson Nano Custom Object Detection - how to train your own AI 2024, November
Anonim
Erstellen Sie einen Pi-Trash-Klassifizierer mit ML!
Erstellen Sie einen Pi-Trash-Klassifizierer mit ML!
Erstellen Sie einen Pi-Papierkorb-Klassifizierer mit ML!
Erstellen Sie einen Pi-Papierkorb-Klassifizierer mit ML!

Das Projekt Trash Classifier, liebevoll bekannt als "Wohin geht das?!", soll das Wegwerfen von Dingen schneller und zuverlässiger machen.

Dieses Projekt verwendet ein Machine Learning (ML)-Modell, das in Lobe, einem anfängerfreundlichen (kein Code!) ML-Modellersteller, trainiert wurde, um zu identifizieren, ob ein Objekt in den Müll, Recycling, Kompost oder Sondermüll gelangt. Das Modell wird dann auf einen Raspberry Pi 4 Computer geladen, um es überall dort einsetzbar zu machen, wo Sie Mülleimer finden!

In diesem Tutorial erfahren Sie, wie Sie aus einem Lobe TensorFlow-Modell in Python3 Ihr eigenes Trash Classifier-Projekt auf einem Raspberry Pi erstellen.

Schwierigkeit: Anfänger++ (einige Kenntnisse mit Schaltungen und Codierung sind hilfreich)

Lesezeit: 5 Minuten

Bauzeit: 60 - 90 min

Kosten: ~70 $ (einschließlich Pi 4)

Lieferungen:

Software (PC-seitig)

  • Lappen
  • WinSCP (oder eine andere SSH-Dateiübertragungsmethode, kann CyberDuck für Mac verwenden)
  • Terminal
  • Remotedesktopverbindung oder RealVNC

Hardware

  • Raspberry Pi, SD-Karte und USB-C-Netzteil (5V, 2,5A)
  • Pi-Kamera
  • Druckknopf
  • 5 LEDs (4 Anzeige-LEDs und 1 Status-LED)

    • Gelbe LED: Müll
    • Blaue LED: recyceln
    • Grüne LED: Kompost
    • Rote LED: Sondermüll
    • Weiße LED: Status
  • 6 220 Ohm Widerstände
  • 10 M-zu-M-Überbrückungsdrähte
  • Steckbrett, halbe Größe

Wenn Sie sich zum Löten entscheiden:

  • 1 JST-Stecker, nur weibliches Ende
  • 2 M-zu-F-Überbrückungsdrähte
  • 10 F-zu-F-Überbrückungsdrähte
  • PCB

Gehege

  • Projektkoffer (z. B. Karton-, Holz- oder Kunststoffbox, ca. 6" x 5" x 4")
  • 0,5" x 0,5" (2cm x 2cm) durchsichtiges Plastikquadrat

    Z. B. aus einem Plastikbehälterdeckel

  • Klettverschluss

Werkzeuge

  • Kabelschneider
  • Präzisionsmesser (z. B. Exacto-Messer) und Schneidematte
  • Lötkolben (optional)
  • Heißschmelzwerkzeug (oder ein anderer nicht leitender Kleber - Epoxid funktioniert gut, ist aber dauerhaft)

Schritt 1: Bevor wir beginnen

Bevor wir anfangen
Bevor wir anfangen

Dieses Projekt geht davon aus, dass Sie mit einem vollständig eingerichteten Raspberry Pi in einer Headless-Konfiguration beginnen. Hier ist eine anfängerfreundliche Anleitung, wie das geht.

Es hilft auch, einige Kenntnisse über Folgendes zu haben:

  1. Vertrautheit mit dem Raspberry Pi

    • Hier ist ein praktischer Leitfaden für die ersten Schritte!
    • Auch hilfreich: Erste Schritte mit der Pi-Kamera
  2. Lesen und Bearbeiten von Python-Code (Sie müssen kein Programm schreiben, sondern nur bearbeiten)

    Einführung in Python mit dem Raspberry Pi

  3. Fritzing-Schaltpläne lesen
  4. Mit einem Steckbrett

    So verwenden Sie ein Steckbrett-Tutorial

Finden Sie heraus, wo Ihr Müll landet

Jede Stadt in den USA (und ich nehme an, der Globus) hat ihren eigenen Müll/Recycling/Kompost/etc. Sammelsystem. Das bedeutet, dass wir, um einen genauen Müllklassifizierer zu erstellen, 1) ein benutzerdefiniertes ML-Modell erstellen müssen (wir werden dies im nächsten Schritt behandeln – kein Code!) und 2) wissen, wo jedes Stück Müll landet.

Da ich nicht immer den richtigen Mülleimer für jedes Objekt kannte, mit dem ich mein Modell trainierte, benutzte ich den Seattle Utilities-Flyer (Foto 1) und auch dieses praktische "Wohin gehört es?" Suchtool für die Stadt Seattle! Überprüfen Sie, welche Ressourcen in Ihrer Stadt verfügbar sind, indem Sie das Müllsammeldienstprogramm Ihrer Stadt nachschlagen und die Website durchsehen.

Schritt 2: Erstellen Sie ein benutzerdefiniertes ML-Modell in Lobe

Erstellen Sie ein benutzerdefiniertes ML-Modell in Lobe
Erstellen Sie ein benutzerdefiniertes ML-Modell in Lobe
Erstellen Sie ein benutzerdefiniertes ML-Modell in Lobe
Erstellen Sie ein benutzerdefiniertes ML-Modell in Lobe
Erstellen Sie ein benutzerdefiniertes ML-Modell in Lobe
Erstellen Sie ein benutzerdefiniertes ML-Modell in Lobe
Erstellen Sie ein benutzerdefiniertes ML-Modell in Lobe
Erstellen Sie ein benutzerdefiniertes ML-Modell in Lobe

Lobe ist ein benutzerfreundliches Tool, das alles enthält, was Sie brauchen, um Ihre Ideen für maschinelles Lernen zum Leben zu erwecken. Zeigen Sie ihm Beispiele dafür, was Sie tun möchten, und es trainiert automatisch ein benutzerdefiniertes Modell für maschinelles Lernen, das für Edge-Geräte und -Apps exportiert werden kann. Es erfordert keine Erfahrung, um loszulegen. Sie können kostenlos an Ihrem eigenen Computer trainieren!

Hier ist ein kurzer Überblick über die Verwendung von Lobe:

1. Öffnen Sie das Lobe-Programm und erstellen Sie ein neues Projekt.

2. Nehmen Sie Fotos auf oder importieren Sie sie und ordnen Sie sie den entsprechenden Kategorien zu. (Foto 1) Diese Etiketten benötigen wir später im Softwareteil des Projekts.

Es gibt zwei Möglichkeiten, Fotos zu importieren:

  1. Nehmen Sie Fotos von Gegenständen direkt von Ihrer Computer-Webcam auf, oder
  2. Importieren Sie Fotos aus vorhandenen Ordnern auf Ihrem Computer.

    Denken Sie daran, dass der Name des Fotoordners als Name für die Kategoriebezeichnung verwendet wird. Stellen Sie also sicher, dass er mit den vorhandenen Etiketten übereinstimmt

Nebenbei: Ich habe beide Methoden verwendet, denn je mehr Fotos Sie haben, desto genauer ist Ihr Modell.

3. Verwenden Sie die Funktion "Play", um die Modellgenauigkeit zu testen. Ändern Sie Entfernungen, Beleuchtung, Handpositionen usw., um zu erkennen, wo sich das Modell befindet und wo es nicht genau ist. Fügen Sie bei Bedarf weitere Fotos hinzu. (Fotos 3 - 4)

4. Wenn Sie fertig sind, exportieren Sie Ihr Lobe ML-Modell in ein TensorFlow (TF) Lite-Format.

Tipps:

  • Erstellen Sie vor dem Importieren von Fotos eine Liste aller Kategorien, die Sie benötigen und wie Sie sie beschriften möchten (z. B. "Müll", "Recyclen", "Kompost" usw.)

    Hinweis: Verwenden Sie die gleichen Etiketten wie im obigen Foto "Lobe Model Labels", um die Codemenge zu reduzieren, die Sie ändern müssen

  • Fügen Sie eine Kategorie für "kein Papierkorb" hinzu, die Fotos von allem enthält, was sonst auf dem Foto zu sehen sein könnte (z. B. Ihre Hände und Arme, der Hintergrund usw.).
  • Nehmen Sie nach Möglichkeit Fotos von der Pi-Kamera auf und importieren Sie sie in Lobe. Dies wird die Genauigkeit Ihres Modells erheblich verbessern!
  • Benötigen Sie mehr Fotos? Schauen Sie sich Open-Source-Datensätze auf Kaggle an, einschließlich dieses Bildsatzes zur Müllklassifizierung!
  • Benötigen Sie weitere Hilfe? Verbinde dich mit der Lobe Coommunity auf Reddit!

Schritt 3: Erstellen Sie es: Hardware

Bauen Sie es: Hardware!
Bauen Sie es: Hardware!
Bauen Sie es: Hardware!
Bauen Sie es: Hardware!
Bauen Sie es: Hardware!
Bauen Sie es: Hardware!

1. Verbinden Sie die Pi-Kamera vorsichtig mit dem Pi (weitere Informationen finden Sie in der Anleitung für die ersten Schritte der Pi Foundation). (Bild 1)

2. Folgen Sie dem Schaltplan, um den Taster und die LEDs mit den Pi GPIO-Pins zu verbinden.

  • Taster: Verbinden Sie ein Bein des Tasters mit dem GPIO-Pin 2. Verbinden Sie das andere über einen Widerstand mit einem GPIO-GND-Pin.
  • Gelbe LED: Verbinden Sie das positive (längere) Bein mit dem GPIO-Pin 17. Verbinden Sie das andere Bein über einen Widerstand mit einem GPIO-GND-Pin.
  • Blaue LED: Verbinden Sie das positive Bein mit dem GPIO-Pin 27. Verbinden Sie das andere Bein über einen Widerstand mit einem GPIO-GND-Pin.
  • Grüne LED: Verbinden Sie das positive Bein mit dem GPIO-Pin 22. Verbinden Sie das andere Bein über einen Widerstand mit einem GPIO-GND-Pin.
  • Rote LED: Verbinden Sie das positive Bein mit dem GPIO-Pin 23. Verbinden Sie das andere Bein über einen Widerstand mit einem GPIO-GND-Pin.
  • Weiße LED: Verbinden Sie das positive Bein mit dem GPIO-Pin 24. Verbinden Sie das andere Bein über einen Widerstand mit einem GPIO-GND-Pin.

3. Es wird empfohlen, Ihre Schaltung auf einem Steckbrett zu testen und das Programm auszuführen, bevor Sie eine der Verbindungen löten oder dauerhaft herstellen. Dazu müssen wir unser Softwareprogramm schreiben und hochladen, also gehen wir zum nächsten Schritt!

Schritt 4: Code it: Software

Code it: Software!
Code it: Software!
Code it: Software!
Code it: Software!

1. Öffnen Sie auf Ihrem PC WinSCP und verbinden Sie sich mit Ihrem Pi. Erstellen Sie einen Lobe-Ordner im Home-Verzeichnis Ihres Pi und erstellen Sie einen Modellordner in diesem Verzeichnis.

2. Ziehen Sie den resultierenden Lobe TF-Ordnerinhalt auf das Pi. Notieren Sie sich den Dateipfad: /home/pi/Lobe/model

3. Öffnen Sie auf dem Pi ein Terminal und laden Sie die lobe-python-Bibliothek für Python3 herunter, indem Sie die folgenden Bash-Befehle ausführen:

pip3-Installation

pip3 install lobe

4. Laden Sie den Trash Classifier-Code (rpi_trash_classifier.py) aus diesem Repo auf den Pi herunter (klicken Sie auf die Schaltfläche "Code", wie in Foto 1 gezeigt).

  • Lieber kopieren/einfügen? Holen Sie sich den Rohcode hier.
  • Möchten Sie lieber auf Ihren Computer herunterladen? Laden Sie das Repo/den Code auf Ihren Computer herunter und übertragen Sie dann den Python-Code über WinSCP (oder Ihr bevorzugtes Remote-Dateiübertragungsprogramm) auf den Pi.

5. Nachdem Sie die Hardware mit den GPIO-Pins des Pi verbunden haben, lesen Sie den Beispielcode durch und aktualisieren Sie alle Dateipfade nach Bedarf:

  • Zeile 29: Dateipfad zum Lobe TF-Modell
  • Zeilen 47 und 83: Dateipfad zu aufgenommenen Bildern über Pi Camera

6. Aktualisieren Sie bei Bedarf die Modellbezeichnungen im Code so, dass sie genau mit den Bezeichnungen in Ihrem Lobe-Modell übereinstimmen (einschließlich Großschreibung, Satzzeichen usw.):

  • Zeile 57: "Müll"
  • Zeile 60: "recyceln"
  • Zeile 63: "Kompost"
  • Zeile 66: „Gefahrgutanlage“
  • Zeile 69: "kein Müll!"

7. Führen Sie das Programm mit Python3 im Terminalfenster aus:

python3 rpi_trash_classifier.py

Schritt 5: Testen Sie es: Führen Sie das Programm aus

Testen Sie es: Führen Sie das Programm aus!
Testen Sie es: Führen Sie das Programm aus!
Testen Sie es: Führen Sie das Programm aus!
Testen Sie es: Führen Sie das Programm aus!
Testen Sie es: Führen Sie das Programm aus!
Testen Sie es: Führen Sie das Programm aus!

Programmübersicht

Wenn Sie das Programm zum ersten Mal ausführen, dauert es einige Zeit, die TensorFlow-Bibliothek und das Lobe ML-Modell zu laden. Wenn das Programm bereit ist, ein Bild aufzunehmen, pulsiert die Statusleuchte (weiße LED).

Sobald Sie ein Bild aufgenommen haben, vergleicht das Programm das Bild mit dem Lobe-ML-Modell und gibt die resultierende Vorhersage aus (Zeile 83). Der Ausgang bestimmt, welches Licht eingeschaltet wird: Gelb (Müll), Blau (Recycling), Grün (Kompost) oder Rot (Gefahrmüll).

Wenn keine der Anzeige-LEDs aufleuchtet und die Status-LED in den Pulsmodus zurückkehrt, bedeutet dies, dass das aufgenommene Bild "kein Papierkorb" war, mit anderen Worten, das Foto erneut aufnehmen!

Ein Bild aufnehmen

Drücken Sie die Drucktaste, um ein Bild aufzunehmen. Beachten Sie, dass Sie die Drucktaste möglicherweise mindestens 1 Sekunde lang gedrückt halten müssen, damit das Programm die Presse registriert. Es wird empfohlen, einige Testbilder aufzunehmen und diese dann auf dem Desktop zu öffnen, um die Kameraansicht und den Rahmen besser zu verstehen.

Um dem Benutzer Zeit zu geben, das Objekt zu positionieren und die Lichtstärke der Kamera anzupassen, dauert es etwa 5 Sekunden, um ein Bild vollständig aufzunehmen. Sie können diese Einstellungen im Code ändern (Zeilen 35 und 41), aber denken Sie daran, dass die Pi Foundation mindestens 2 Sekunden für die Anpassung der Lichtstärke empfiehlt.

Fehlerbehebung

Die größte Herausforderung besteht darin, sicherzustellen, dass das aufgenommene Bild unseren Erwartungen entspricht. Nehmen Sie sich also etwas Zeit, um die Bilder zu überprüfen und die erwarteten Ergebnisse mit der LED-Ausgabe des Anzeigers zu vergleichen. Bei Bedarf können Sie Bilder für eine direkte Inferenz und einen schnelleren Vergleich an das Lobe ML-Modell übergeben.

Ein paar Dinge zu beachten:

  • Die TensorFlow-Bibliothek gibt wahrscheinlich einige Warnmeldungen aus – dies ist typisch für die in diesem Beispielcode verwendete Version.
  • Die Vorhersagelabels müssen genau so sein, wie sie in der Funktion led_select() geschrieben wurden, einschließlich Großschreibung, Satzzeichen und Leerzeichen. Stellen Sie sicher, dass Sie diese ändern, wenn Sie ein anderes Lobe-Modell haben.
  • Der Pi benötigt eine stetige Stromversorgung. Die Power-LED des Pi sollte hell und durchgehend rot leuchten.
  • Wenn eine oder mehrere LEDs nicht wie erwartet aufleuchten, überprüfen Sie dies, indem Sie sie mit dem folgenden Befehl erzwingen:

red_led.on()

Schritt 6: (Optional) Erstellen Sie es: Schließen Sie Ihre Schaltung ab

(Optional) Bauen Sie es: Fertigen Sie Ihre Schaltung ab!
(Optional) Bauen Sie es: Fertigen Sie Ihre Schaltung ab!
(Optional) Bauen Sie es: Fertigen Sie Ihre Schaltung ab!
(Optional) Bauen Sie es: Fertigen Sie Ihre Schaltung ab!
(Optional) Bauen Sie es: Fertigen Sie Ihre Schaltung ab!
(Optional) Bauen Sie es: Fertigen Sie Ihre Schaltung ab!

Nachdem wir unser Projekt nun getestet und ggf. debuggt haben, damit es wie erwartet funktioniert, sind wir bereit, unsere Schaltung zu löten!

Hinweis: Wenn Sie keinen Lötkolben haben, können Sie diesen Schritt überspringen. Eine Alternative besteht darin, die Drahtverbindungen mit Heißkleber zu beschichten (mit dieser Option können Sie Dinge später reparieren / hinzufügen / verwenden, brechen jedoch eher) oder verwenden Sie Epoxidharz oder einen ähnlichen dauerhaften Kleber (diese Option ist viel haltbarer) aber Sie können die Schaltung oder möglicherweise den Pi danach nicht mehr verwenden.)

Kurzer Kommentar zu meinen Designentscheidungen (Bild 1):

  • Ich habe mich für weibliche Überbrückungsdrähte für die LEDs und den Pi GPIO entschieden, da ich damit LEDs entfernen und Farben austauschen oder bei Bedarf verschieben kann. Sie können diese überspringen, wenn Sie Verbindungen dauerhaft herstellen möchten.
  • Ebenso habe ich einen JST-Anschluss für den Taster gewählt.

Weiter zum Bauen

1. Schneiden Sie jede der weiblichen Überbrückungsdrähte in zwei Hälften (ja, alle!). Entfernen Sie mit einer Abisolierzange etwa 1/2 cm der Drahtisolierung.

2. Löten Sie für jede der LEDs einen 220-Ω-Widerstand an das negative (kürzere) Bein. (Bild 2)

3. Schneiden Sie ein kleines Stück (ca. 2 cm) des Schrumpfschlauchs ab und schieben Sie es über die LED- und Widerstandsverbindung. Stellen Sie sicher, dass das andere Widerstandsbein zugänglich ist, und erhitzen Sie dann den Schrumpfschlauch, bis er die Verbindung sichert. (Foto 3)

4. Stecken Sie jede LED in ein Paar weiblicher Überbrückungsdrähte. (Bild 4)

5. Beschriften Sie die Überbrückungsdrähte (z. B. mit Klebeband), dann löten Sie die Überbrückungsdrähte auf Ihre Leiterplatte (PCB). (Bild 5)

6. Verwenden Sie als Nächstes ein (abgeschnittenes) weibliches Überbrückungskabel, um jede LED mit ihrem jeweiligen Pi GPIO-Pin zu verbinden. Löten und beschriften Sie einen Überbrückungsdraht, so dass das blanke Metall über die Platine mit dem positiven LED-Bein verbunden ist. (Bild 5)

Hinweis: Wo Sie diesen Draht löten, hängt von Ihrem PCB-Layout ab. Sie können diesen Draht auch direkt an den positiven LED-Überbrückungsdraht anlöten.

7. Löten Sie einen 220Ω Widerstand an das negative (schwarze) Ende des JST-Steckers. (Bild 6)

8. Löten Sie den JST-Stecker und den Widerstand an den Druckknopf. (Foto 6)

9. Verbinden Sie die M-zu-F-Überbrückungsdrähte zwischen dem Drucktastenanschluss und den GPIO-Pins (Erinnerung: Schwarz ist GND).

10. Beschichten Sie die Leiterplatte der Anschlüsse mit Heißkleber oder Epoxid für eine sicherere Verbindung.

Hinweis: Wenn Sie sich für die Verwendung von Epoxid entscheiden, können Sie die GPIO-Pins des Pi in Zukunft möglicherweise nicht für andere Projekte verwenden. Wenn Sie sich diesbezüglich Sorgen machen, fügen Sie ein GPIO-Flachbandkabel hinzu und schließen Sie stattdessen die Überbrückungsdrähte an.

Schritt 7: (Optional) Erstellen Sie es: Gehäuse

(Optional) Bauen Sie es: Koffer!
(Optional) Bauen Sie es: Koffer!
(Optional) Bauen Sie es: Koffer!
(Optional) Bauen Sie es: Koffer!
(Optional) Bauen Sie es: Koffer!
(Optional) Bauen Sie es: Koffer!
(Optional) Bauen Sie es: Koffer!
(Optional) Bauen Sie es: Koffer!

Erstellen Sie ein Gehäuse für Ihren Pi, das die Kamera, den Druckknopf und die LEDs an Ort und Stelle hält und gleichzeitig den Pi schützt. Entwerfen Sie Ihr eigenes Gehäuse oder befolgen Sie unsere unten stehenden Bauanleitungen, um schnell ein Pappgehäuse als Prototyp zu erstellen!

  1. Verfolgen Sie auf der Oberseite des kleinen Kartons die Positionen für die Drucktaste, die Statusleuchte, die Identifikationsleuchten und das Pi-Kamerafenster (Foto 1).

    Hinweis: Das Pi-Kamerafenster sollte etwa 3/4 "x 1/2" groß sein

  2. Schneiden Sie die Spuren mit Ihrem Präzisionsmesser aus.

    Hinweis: Möglicherweise möchten Sie die Größen testen (Foto 1)

  3. Optional: Gehäuse lackieren! Ich habe mich für Sprühfarbe entschieden:)
  4. Schneiden Sie eine rechteckige "Fenster" -Abdeckung für die Pi-Kamera aus (Foto 4) und kleben Sie sie auf die Innenseite der Box
  5. Schneiden Sie schließlich den Schlitz für das Pi-Stromkabel aus.

    Es wird empfohlen, zuerst die gesamte Elektronik zu installieren, um den besten Platz für den Steckplatz für das Pi-Stromkabel zu finden

Schritt 8: Installieren und bereitstellen

Installieren und bereitstellen!
Installieren und bereitstellen!

Das ist es! Sie können Ihr Projekt installieren und bereitstellen! Platzieren Sie das Gehäuse über Ihren Mülleimern, schließen Sie den Pi an und führen Sie das Programm aus, um schneller und zuverlässiger unseren Abfall zu reduzieren. Yay!

Vorwärts gehen

  • Teilen Sie Ihre Projekte und Ideen mit anderen über die Lobe Reddit-Community!
  • Sehen Sie sich das Lobe Python GitHub-Repository an, um einen allgemeinen Überblick über die Verwendung von Python zum Bereitstellen einer größeren Vielfalt von Lobe-Projekten zu erhalten
  • Fragen oder Projektwünsche? Hinterlassen Sie einen Kommentar zu diesem Projekt oder wenden Sie sich direkt an uns: [email protected]

Empfohlen: