Inhoudsopgave:

Maak een Pi Trash Classifier met ML! 8 stappen (met afbeeldingen) Antwoorden op al uw "Hoe?"
Maak een Pi Trash Classifier met ML! 8 stappen (met afbeeldingen) Antwoorden op al uw "Hoe?"

Video: Maak een Pi Trash Classifier met ML! 8 stappen (met afbeeldingen) Antwoorden op al uw "Hoe?"

Video: Maak een Pi Trash Classifier met ML! 8 stappen (met afbeeldingen) Antwoorden op al uw
Video: Jetson Nano Custom Object Detection - how to train your own AI 2024, Juli-
Anonim
Maak een Pi Trash Classifier met ML!
Maak een Pi Trash Classifier met ML!
Maak een Pi Trash Classifier met ML!
Maak een Pi Trash Classifier met ML!

Het Trash Classifier-project, liefkozend "Waar gaat het heen?!", is ontworpen om het weggooien van dingen sneller en betrouwbaarder te maken.

Dit project maakt gebruik van een Machine Learning (ML) -model dat is getraind in Lobe, een beginnersvriendelijke (geen code!) ML-modelbouwer, om te bepalen of een object in de vuilnisbak, recycling, compost of gevaarlijk afval gaat. Het model wordt vervolgens op een Raspberry Pi 4-computer geladen om het overal bruikbaar te maken waar u vuilnisbakken vindt!

Deze tutorial laat je zien hoe je je eigen Trash Classifier-project op een Raspberry Pi kunt maken vanuit een Lobe TensorFlow-model in Python3.

Moeilijkheidsgraad: Beginner ++ (enige kennis met circuits en codering is handig)

Leestijd: 5 min

Bouwtijd: 60 - 90 min

Kosten: ~ $ 70 (inclusief Pi 4)

Benodigdheden:

Software (PC-zijde)

  • Kwab
  • WinSCP (of een andere SSH-bestandsoverdrachtmethode, kan CyberDuck voor Mac gebruiken)
  • Terminal
  • Verbinding met extern bureaublad of RealVNC

Hardware

  • Raspberry Pi, SD-kaart en USB-C-voeding (5V, 2,5A)
  • Pi-camera
  • Druk op de knop
  • 5 LED's (4 indicatie-LED's en 1 status-LED)

    • Gele LED: afval
    • Blauwe LED: recyclen
    • Groene LED: compost
    • Rode LED: gevaarlijk afval
    • Witte LED: status
  • 6 220 Ohm weerstanden
  • 10 M-naar-M jumperdraden
  • Breadboard, halve maat

Als u ervoor kiest om te solderen:

  • 1 JST-connector, alleen vrouwelijk uiteinde
  • 2 M-naar-F jumperdraden
  • 10 F-naar-F jumperdraden
  • PCB

Behuizing

  • Projectkoffer (bijv. kartonnen, houten of plastic doos, ongeveer 6" x 5" x 4")
  • 0,5 "x 0,5" (2 cm x 2 cm) doorzichtig plastic vierkant

    bijv. van een plastic voedselcontainerdeksel

  • klittenband

Gereedschap

  • Draadsnijders
  • Precisiemes (bijv. exacto mes) en snijmat
  • Soldeerbout (optioneel)
  • Hotmelt-tool (of andere niet-geleidende lijm - epoxy werkt geweldig, maar is permanent)

Stap 1: Voordat we beginnen

Voor we beginnen
Voor we beginnen

Dit project gaat ervan uit dat je begint met een volledig ingestelde Raspberry Pi in een headless-configuratie. Hier is een beginnersvriendelijke gids over hoe u dit kunt doen.

Het helpt ook om enige kennis te hebben van het volgende:

  1. Bekendheid met de Raspberry Pi

    • Hier is een handige handleiding om aan de slag te gaan!
    • Ook handig: aan de slag met de Pi-camera
  2. Python-code lezen en bewerken (u hoeft geen programma te schrijven, alleen bewerken)

    Inleiding tot Python met de Raspberry Pi

  3. Fritzing-bedradingsschema's lezen
  4. Een breadboard gebruiken

    Een breadboard-tutorial gebruiken

Ontdek waar uw afval naartoe gaat

Elke stad in de VS (en ik neem aan dat de hele wereld) heeft zijn eigen afval/recycling/compost/etc. inzamelsysteem. Dit betekent dat om een nauwkeurige prullenbakclassificatie te maken, we 1) een aangepast ML-model moeten bouwen (we zullen dit in de volgende stap behandelen -- geen code!) en 2) weten waar elk stuk afval naartoe gaat.

Omdat ik niet altijd de juiste bak wist voor elk item dat ik gebruikte om mijn model te trainen, gebruikte ik de Seattle Utilities-flyer (foto 1) en ook dit handige "Waar gaat het naartoe?" opzoektool voor de stad Seattle! Bekijk welke bronnen beschikbaar zijn in uw stad door het hulpprogramma voor het verzamelen van afval van uw stad op te zoeken en de website te bekijken.

Stap 2: Maak een aangepast ML-model in Lobe

Maak een aangepast ML-model in Lobe
Maak een aangepast ML-model in Lobe
Maak een aangepast ML-model in Lobe
Maak een aangepast ML-model in Lobe
Maak een aangepast ML-model in Lobe
Maak een aangepast ML-model in Lobe
Maak een aangepast ML-model in Lobe
Maak een aangepast ML-model in Lobe

Lobe is een gebruiksvriendelijke tool die alles heeft wat je nodig hebt om je machine learning-ideeën tot leven te brengen. Laat het voorbeelden zien van wat je wilt dat het doet, en het traint automatisch een aangepast machine learning-model dat kan worden geëxporteerd voor edge-apparaten en apps. Het vereist geen ervaring om te beginnen. Je traint gratis op je eigen computer!

Hier is een kort overzicht van het gebruik van Lobe:

1. Open het Lobe-programma en maak een nieuw project aan.

2. Maak of importeer foto's en label ze in de juiste categorieën. (Foto 1) We hebben deze labels later nodig in het softwaregedeelte van het project.

Er zijn twee manieren om foto's te importeren:

  1. Maak foto's van items rechtstreeks vanaf uw computerwebcam, of
  2. Importeer foto's uit bestaande mappen op uw computer.

    Houd er rekening mee dat de naam van de fotomap wordt gebruikt als de naam van het categorielabel, dus zorg ervoor dat deze overeenkomt met bestaande labels

Terzijde: ik heb uiteindelijk beide methoden gebruikt, want hoe meer foto's je hebt, hoe nauwkeuriger je model is.

3. Gebruik de functie "Afspelen" om de nauwkeurigheid van het model te testen. Verander afstanden, verlichting, handposities, enz. om te bepalen waar het model wel en niet nauwkeurig is. Voeg indien nodig meer foto's toe. (Foto's 3 - 4)

4. Als u klaar bent, exporteert u uw Lobe ML-model in een TensorFlow (TF) Lite-indeling.

Tips:

  • Maak voordat u foto's importeert een lijst met alle categorieën die u nodig hebt en hoe u ze wilt labelen (bijv. "vuilnis", "recyclen", "compost", enz.)

    Opmerking: Gebruik dezelfde labels als getoond in de foto "Lobe Model Labels" hierboven om de hoeveelheid code die u moet wijzigen te verminderen

  • Voeg een categorie toe voor "geen prullenbak" met foto's van wat er nog meer op de foto staat (bijvoorbeeld je handen en armen, de achtergrond, enz.)
  • Maak indien mogelijk foto's van de Pi-camera en importeer deze in Lobe. Dit zal de nauwkeurigheid van uw model aanzienlijk verbeteren!
  • Meer foto's nodig? Bekijk open-source datasets op Kaggle, inclusief deze afbeeldingsset voor afvalclassificatie!
  • Meer hulp nodig? Maak contact met de Lobe Community op Reddit!

Stap 3: Bouw het: hardware

Bouw het: hardware!
Bouw het: hardware!
Bouw het: hardware!
Bouw het: hardware!
Bouw het: hardware!
Bouw het: hardware!

1. Sluit de Pi Camera voorzichtig aan op Pi (bekijk de Pi Foundation-handleiding om aan de slag te gaan voor meer informatie). (Foto 1)

2. Volg het bedradingsschema om de drukknop en LED's aan te sluiten op de Pi GPIO-pinnen.

  • Drukknop: Sluit een poot van de drukknop aan op GPIO-pin 2. Sluit de andere, via een weerstand, aan op een GPIO GND-pin.
  • Gele LED: sluit het positieve (langere) been aan op GPIO-pin 17. Sluit het andere been, via een weerstand, aan op een GPIO GND-pin.
  • Blauwe LED: sluit het positieve been aan op GPIO-pin 27. Sluit het andere been, via een weerstand, aan op een GPIO GND-pin.
  • Groene LED: sluit het positieve been aan op GPIO-pin 22. Sluit het andere been, via een weerstand, aan op een GPIO GND-pin.
  • Rode LED: sluit het positieve been aan op GPIO-pin 23. Sluit het andere been, via een weerstand, aan op een GPIO GND-pin.
  • Witte LED: sluit het positieve been aan op GPIO-pin 24. Sluit het andere been, via een weerstand, aan op een GPIO GND-pin.

3. Het wordt aanbevolen om uw circuit op een breadboard te testen en het programma uit te voeren voordat u gaat solderen of een van de verbindingen permanent maakt. Om dit te doen, moeten we ons softwareprogramma schrijven en uploaden, dus laten we naar de volgende stap gaan!

Stap 4: Codeer het: software

Codeer het: software!
Codeer het: software!
Codeer het: software!
Codeer het: software!

1. Open WinSCP op uw pc en maak verbinding met uw Pi. Maak een Lobe-map in de thuismap van je Pi en maak een modelmap in die map.

2. Sleep de inhoud van de resulterende Lobe TF-map naar de Pi. Noteer het bestandspad: /home/pi/Lobe/model

3. Open op de Pi een terminal en download de lobe-python-bibliotheek voor Python3 door de volgende bash-opdrachten uit te voeren:

pip3 installeren

pip3 installeer kwab

4. Download de Trash Classifier-code (rpi_trash_classifier.py) van deze repo naar de Pi (klik op de knop "Code" zoals weergegeven in Foto 1).

  • Liever kopiëren/plakken? Download hier de onbewerkte code.
  • Liever downloaden op uw computer? Download de repo/code naar uw computer en breng vervolgens de Python-code over naar de Pi via WinSCP (of uw favoriete programma voor bestandsoverdracht op afstand).

5. Nadat je de hardware hebt aangesloten op de GPIO-pinnen van de Pi, lees je de voorbeeldcode door en werk je eventuele bestandspaden bij:

  • Regel 29: bestandspad naar het Lobe TF-model
  • Regel 47 en 83: bestandspad naar vastgelegde afbeeldingen via Pi Camera

6. Werk indien nodig de modellabels in de code bij zodat ze exact overeenkomen met de labels in uw Lobe-model (inclusief hoofdletters, leestekens, enz.):

  • Regel 57: "vuilnis"
  • Regel 60: "recyclen"
  • Regel 63: "compost"
  • Lijn 66: "installatie voor gevaarlijk afval"
  • Regel 69: "geen afval!"

7. Voer het programma uit met Python3 in het terminalvenster:

python3 rpi_trash_classifier.py

Stap 5: Test het: voer het programma uit

Test het: voer het programma uit!
Test het: voer het programma uit!
Test het: voer het programma uit!
Test het: voer het programma uit!
Test het: voer het programma uit!
Test het: voer het programma uit!

Programma overzicht

Wanneer u het programma voor het eerst uitvoert, duurt het even voordat de TensorFlow-bibliotheek en het Lobe ML-model zijn geladen. Wanneer het programma klaar is om een afbeelding vast te leggen, gaat het statuslampje (witte LED) knipperen.

Nadat u een afbeelding hebt gemaakt, vergelijkt het programma de afbeelding met het Lobe ML-model en voert de resulterende voorspelling uit (regel 83). De uitgang bepaalt welk licht aan gaat: geel (vuilnis), blauw (recycle), groen (compost) of rood (gevaarlijk afval).

Als geen van de indicatie-LED's gaat branden en de status-LED keert terug naar de pulsmodus, betekent dit dat de vastgelegde afbeelding "geen afval" was, met andere woorden, maak de foto opnieuw!

Een afbeelding vastleggen

Druk op de drukknop om een afbeelding vast te leggen. Houd er rekening mee dat u de drukknop mogelijk minimaal 1s moet ingedrukt houden voordat het programma de pers registreert. Het wordt aanbevolen om enkele testbeelden te maken en deze vervolgens op het bureaublad te openen om de cameraweergave en het frame beter te begrijpen.

Om de gebruiker tijd te geven om het object te positioneren en om de lichtniveaus van de camera aan te passen, duurt het ongeveer 5 seconden om een volledig beeld vast te leggen. U kunt deze instellingen in de code wijzigen (regel 35 en 41), maar houd er rekening mee dat de Pi Foundation een minimum van 2 seconden aanbeveelt voor het aanpassen van het lichtniveau.

Probleemoplossen

De grootste uitdaging is ervoor te zorgen dat het vastgelegde beeld is wat we verwachten, dus neem even de tijd om de afbeeldingen te bekijken en de verwachte resultaten te vergelijken met de LED-uitgang van de indicator. Indien nodig kunt u afbeeldingen doorgeven aan het Lobe ML-model voor directe gevolgtrekking en snellere vergelijking.

Een paar dingen om op te merken:

  • De TensorFlow-bibliotheek zal waarschijnlijk enkele waarschuwingsberichten genereren -- dit is typisch voor de versie die in deze voorbeeldcode wordt gebruikt.
  • De voorspellingslabels moeten precies zijn zoals geschreven in de led_select()-functie, inclusief hoofdletters, interpunctie en spatiëring. Zorg ervoor dat u deze wijzigt als u een ander Lobe-model heeft.
  • De Pi heeft een constante stroomvoorziening nodig. Het aan/uit-lampje van de Pi moet helder, effen rood zijn.
  • Als een of meer LED's niet branden wanneer verwacht, controleer dan door ze te forceren met het commando:

rode_led.on()

Stap 6: (Optioneel) Bouw het: voltooi uw circuit

(Optioneel) Bouw het: voltooi je circuit!
(Optioneel) Bouw het: voltooi je circuit!
(Optioneel) Bouw het: voltooi je circuit!
(Optioneel) Bouw het: voltooi je circuit!
(Optioneel) Bouw het: voltooi je circuit!
(Optioneel) Bouw het: voltooi je circuit!

Nu we ons project hebben getest en, indien nodig, debuggen, zodat het werkt zoals verwacht, zijn we klaar om ons circuit te solderen!

Let op: Als je geen soldeerbout hebt, kun je deze stap overslaan. Een alternatief is om de draadverbindingen met hete lijm te coaten (met deze optie kunt u dingen later repareren/toevoegen/gebruiken, maar de kans is groter dat ze breken), of epoxy of een vergelijkbare permanente lijm gebruiken (deze optie is veel duurzamer maar je kunt het circuit of mogelijk de Pi niet gebruiken nadat je dit hebt gedaan)

Korte opmerking over mijn ontwerpkeuzes (foto 1):

  • Ik heb gekozen voor vrouwelijke jumperdraden voor de LED's en Pi GPIO omdat ze me in staat stellen om LED's te verwijderen en kleuren te wisselen of ze indien nodig te verplaatsen. U kunt deze overslaan als u verbindingen permanent wilt maken.
  • Evenzo koos ik een JST-connector voor de drukknop.

Op naar de bouw

1. Knip elk van de vrouwelijke jumperdraden doormidden (ja, allemaal!). Verwijder met behulp van draadstrippers ongeveer 1/4 (1/2 cm) van de draadisolatie.

2. Soldeer voor elk van de LED's een 220Ω-weerstand aan het negatieve (kortere) been. (Foto 2)

3. Knip een klein stukje, ongeveer 2 cm (1 inch) van de krimpkous en duw over de LED en de weerstandsverbinding. Zorg ervoor dat de andere weerstandspoot toegankelijk is en verwarm vervolgens de krimpkous totdat deze de verbinding vastzet. (Foto 3)

4. Steek elke LED in een paar vrouwelijke jumperdraden. (Foto 4)

5. Label de jumperdraden (bijv. met plakband) en soldeer vervolgens de jumperdraden op uw printplaat (PCB). (Foto 5)

6. Gebruik vervolgens een (geknipte) vrouwelijke jumperdraad om elke LED aan te sluiten op de respectievelijke Pi GPIO-pin. Soldeer en label een jumperdraad zodat het blanke metaal via de PCB wordt aangesloten op de positieve LED-poot. (Foto 5)

Opmerking: waar u deze draad soldeert, hangt af van uw PCB-lay-out. U kunt deze draad ook rechtstreeks op de positieve LED-jumperdraad solderen.

7. Soldeer een weerstand van 220Ω aan het negatieve (zwarte) uiteinde van de JST-connector. (Foto 6)

8. Soldeer de JST-connector en weerstand aan de drukknop. (Foto 6)

9. Sluit de M-naar-F jumperdraden aan tussen de drukknopconnector en de GPIO-pinnen (herinnering: zwart is GND).

10. Smeer de printplaat van de verbindingen in met hete lijm of epoxy voor een veiligere verbinding.

Opmerking: als u ervoor kiest om epoxy te gebruiken, kunt u in de toekomst mogelijk de GPIO-pinnen van de Pi niet voor andere projecten gebruiken. Als je je hier zorgen over maakt, voeg dan een GPIO-lintkabel toe en sluit in plaats daarvan de jumperdraden daarop aan.

Stap 7: (Optioneel) Build It: Case

(Optioneel) Build It: Case!
(Optioneel) Build It: Case!
(Optioneel) Build It: Case!
(Optioneel) Build It: Case!
(Optioneel) Build It: Case!
(Optioneel) Build It: Case!
(Optioneel) Build It: Case!
(Optioneel) Build It: Case!

Maak een behuizing voor uw Pi die de camera, drukknop en LED's op hun plaats houdt en tegelijkertijd de Pi beschermt. Ontwerp je eigen behuizing of volg onze bouwinstructies hieronder om snel een prototype van een kartonnen behuizing te maken!

  1. Traceer op de bovenkant van de kleine kartonnen doos de locaties voor de drukknop, het statuslampje, de identificatielampjes en het pi-cameravenster (foto 1).

    Opmerking: het Pi-cameravenster moet ongeveer 3/4 "x 1/2" zijn

  2. Gebruik je precisiemes om de sporen uit te snijden.

    Let op: misschien wilt u de maten testen terwijl u bezig bent (foto 1)

  3. Optioneel: Verf de behuizing! Ik heb gekozen voor spuitverf:)
  4. Knip een rechthoekig "venster" -deksel uit voor de Pi-camera (foto 4) en lijm aan de binnenkant van de doos
  5. Knip ten slotte de sleuf voor de Pi-stroomkabel uit.

    Aanbevolen wordt om eerst alle elektronica te installeren om de beste plaats voor de pi-stroomkabelsleuf te vinden

Stap 8: installeren en implementeren

Installeren en implementeren!
Installeren en implementeren!

Dat is het! U bent klaar om uw project te installeren en te implementeren! Plaats de behuizing boven uw prullenbakken, sluit de Pi aan en voer het programma uit om een snellere, betrouwbaardere manier te krijgen om ons afval te verminderen. Hoera!

Vooruit gaan

  • Deel uw projecten en ideeën met andere mensen via de Lobe Reddit-community!
  • Bekijk de Lobe Python GitHub-repo voor een algemeen overzicht van het gebruik van Python om een grotere verscheidenheid aan Lobe-projecten te implementeren
  • Vragen of projectaanvragen? Laat een reactie achter op dit project of neem rechtstreeks contact met ons op: [email protected]

Aanbevolen: