INHOUDSOPGAWE:

Maak 'n Pi Trash Classifier met ML !: 8 stappe (met foto's)
Maak 'n Pi Trash Classifier met ML !: 8 stappe (met foto's)

Video: Maak 'n Pi Trash Classifier met ML !: 8 stappe (met foto's)

Video: Maak 'n Pi Trash Classifier met ML !: 8 stappe (met foto's)
Video: Jetson Nano Custom Object Detection - how to train your own AI 2024, Desember
Anonim
Maak 'n Pi asblik klassifiseerder met ML!
Maak 'n Pi asblik klassifiseerder met ML!
Maak 'n Pi asblik klassifiseerder met ML!
Maak 'n Pi asblik klassifiseerder met ML!

Die Trash Classifier -projek, liefdevol bekend as 'Waar gaan dit heen ?!', is bedoel om dinge vinniger en betroubaarder weg te gooi.

Hierdie projek gebruik 'n Machine Learning (ML) -model wat opgelei is in Lobe, 'n beginnervriendelike (geen kode!) ML-modelbouer, om te bepaal of 'n voorwerp in die vullis, herwinning, kompos of gevaarlike afval gaan. Die model word dan op 'n Raspberry Pi 4 -rekenaar gelaai om dit bruikbaar te maak oral waar u vullisdromme kry!

In hierdie handleiding word u geleer hoe u u eie Trash Classifier -projek op 'n Raspberry Pi kan skep vanaf 'n Lobe TensorFlow -model in Python3.

Moeilikheidsgraad: Beginner ++ ('n bietjie kennis met stroombane en kodering is nuttig)

Lees tyd: 5 min

Bou tyd: 60 - 90 min

Koste: $ 70 (Pi 4 ingesluit)

Benodighede:

Sagteware (aan die kant van die rekenaar)

  • Lob
  • WinSCP (of ander SSH -lêeroordragmetode, kan CyberDuck vir Mac gebruik)
  • Terminal
  • Remote Desktop -verbinding of RealVNC

Hardeware

  • Framboos Pi, SD-kaart en USB-C-kragtoevoer (5V, 2.5A)
  • Pi kamera
  • Druk knoppie
  • 5 LED's (4 LED's en 1 status LED's)

    • Geel LED: vullis
    • Blou LED: herwin
    • Groen LED: kompos
    • Rooi LED: gevaarlike afval
    • Wit LED: status
  • 6 220 Ohm weerstande
  • 10 M-tot-M springdrade
  • Broodbord, halfgrootte

As u kies om te soldeer:

  • 1 JST -aansluiting, slegs vroulike uiteinde
  • 2 M-tot-F springdrade
  • 10 F-to-F springdrade
  • PCB

Omhulsel

  • Projekkas (byvoorbeeld karton, hout of plastiek boks, ongeveer 6 "x 5" x 4 ")
  • 2 x 2 cm (2 x 2 duim) helder plastiek vierkant

    Bv. van 'n deksel van 'n plastiese voedselhouer

  • Klittenband

Gereedskap

  • Draadknipper
  • Presisie mes (bv. Exacto mes) en snymat
  • Soldeerbout (opsioneel)
  • Warmsmeltgereedskap (of ander nie-geleidende gom-epoksie werk goed, maar is permanent)

Stap 1: Voordat ons begin

Voordat ons begin
Voordat ons begin

Hierdie projek veronderstel dat u begin met 'n volledig opgestelde Raspberry Pi in 'n koplose konfigurasie. Hier is 'n beginner-vriendelike gids oor hoe u dit moet doen.

Dit help ook om kennis te dra van die volgende:

  1. Vertroudheid met die Raspberry Pi

    • Hier is 'n handige aanvangsgids!
    • Ook nuttig: Aan die gang met die Pi -kamera
  2. Lees en redigeer Python -kode (u hoef nie 'n program te skryf nie, net wysig)

    Inleiding tot Python met die Raspberry Pi

  3. Lees Fritzing -bedradingsdiagramme
  4. Gebruik 'n broodbord

    Hoe om 'n broodbord -tutoriaal te gebruik

Vind uit waar jou asblik gaan

Elke stad in die VSA (en ek sal die wêreld aanneem) het sy eie vullis/herwinning/kompos/ens. versamelingstelsel. Dit beteken dat ons 'n aangepaste ML -model moet bou om 'n akkurate asblikindeling te maak (ons sal dit in die volgende stap dek - geen kode nie!) En 2) weet waar elke vullis gaan.

Aangesien ek nie altyd die regte asblik vir elke item wat ek vir my model opgelei het, geweet het nie, het ek die flyer van Seattle Utilities (Foto 1) gebruik, en ook hierdie handige "Waar gaan dit heen?" soekinstrument vir die stad Seattle! Kyk na die hulpbronne wat u in u stad beskikbaar het, deur die vullisverwyderingsprogram van u stad op te soek en na die webwerf te kyk.

Stap 2: Skep 'n aangepaste ML -model in Lobe

Skep 'n pasgemaakte ML -model in Lobe
Skep 'n pasgemaakte ML -model in Lobe
Skep 'n pasgemaakte ML -model in Lobe
Skep 'n pasgemaakte ML -model in Lobe
Skep 'n persoonlike ML -model in Lobe
Skep 'n persoonlike ML -model in Lobe
Skep 'n pasgemaakte ML -model in Lobe
Skep 'n pasgemaakte ML -model in Lobe

Lobe is 'n maklik om te gebruik instrument wat alles bevat wat u nodig het om u idees vir masjienleer lewendig te maak. Wys voorbeelde van wat u wil hê, en dit lei outomaties 'n pasgemaakte model vir masjienleer op wat uitgevoer kan word vir randtoestelle en -programme. Dit verg geen ervaring om aan die gang te kom nie. U kan gratis op u eie rekenaar oefen!

Hier is 'n vinnige oorsig oor hoe om Lobe te gebruik:

1. Maak die Lobe -program oop en skep 'n nuwe projek.

2. Neem of voer foto's in en merk dit in gepaste kategorieë. (Foto 1) Ons benodig hierdie etikette later in die sagtewaregedeelte van die projek.

Daar is twee maniere om foto's in te voer:

  1. Neem foto's van items direk vanaf u rekenaarwebcam, of
  2. Voer foto's uit bestaande vouers op u rekenaar in.

    Hou in gedagte dat die naam van die fotomap as die kategorie -etiketnaam gebruik sal word, dus maak seker dat dit by bestaande etikette pas

Afgesien: ek het uiteindelik beide metodes gebruik, aangesien hoe meer foto's u het, hoe meer akkuraat is u model.

3. Gebruik die "Speel" -funksie om die akkuraatheid van die model te toets. Verander afstande, beligting, handposisies, ens. Om te bepaal waar die model is en nie akkuraat is nie. Voeg indien nodig meer foto's by. (Foto's 3-4)

4. As u gereed is, voer u Lobe ML -model uit in 'n TensorFlow (TF) Lite -formaat.

Wenke:

  • Voordat u foto's invoer, maak 'n lys van al die kategorieë wat u benodig en hoe u dit wil benoem (bv. "Vullis", "herwinning", "kompos", ens.)

    Nota: Gebruik dieselfde etikette as in die foto "Lobe Model Labels" hierbo, om die hoeveelheid kode wat u moet verander, te verminder

  • Sluit 'n kategorie in vir 'nie asblik' nie, met foto's van alles wat op die foto voorkom (bv. U hande en arms, die agtergrond, ens.)
  • Neem indien moontlik foto's van die Pi -kamera en voer dit in Lobe in. Dit sal die akkuraatheid van u model aansienlik verbeter!
  • Meer foto's nodig? Kyk na die open source-datastelle op Kaggle, insluitend hierdie vullisklassifikasie-beeldstel!
  • Meer hulp nodig? Maak kontak met die Lobe -gemeenskap op Reddit!

Stap 3: Bou dit: hardeware

Bou dit: hardeware!
Bou dit: hardeware!
Bou dit: hardeware!
Bou dit: hardeware!
Bou dit: hardeware!
Bou dit: hardeware!

1. Koppel die Pi -kamera versigtig aan Pi (besoek die aanvangsgids vir Pi Foundation vir meer inligting). (Foto 1)

2. Volg die bedradingsdiagram om die drukknop en LED's aan die Pi GPIO -penne te koppel.

  • Drukknop: Verbind die een been van die drukknop met GPIO -pen 2. Koppel die ander een, via 'n weerstand, aan 'n GPIO GND -pen.
  • Geel LED: Verbind die positiewe (langer) been met GPIO -pen 17. Verbind die ander been, via 'n weerstand, met 'n GPIO GND -pen.
  • Blou LED: Verbind die positiewe been met GPIO -pen 27. Verbind die ander been, via 'n weerstand, met 'n GPIO GND -pen.
  • Groen LED: Verbind die positiewe been met GPIO -pen 22. Verbind die ander been, via 'n weerstand, met 'n GPIO GND -pen.
  • Rooi LED: Koppel die positiewe been aan GPIO -pen 23. Koppel die ander been, via 'n weerstand, aan 'n GPIO GND -pen.
  • Wit LED: Koppel die positiewe been aan GPIO -pen 24. Koppel die ander been, via 'n weerstand, aan 'n GPIO GND -pen.

3. Dit word aanbeveel om u stroombaan op 'n broodbord te toets en die program uit te voer voordat u soldeer of enige van die verbindings permanent maak. Om dit te kan doen, moet ons ons sagtewareprogram skryf en oplaai, dus gaan ons na die volgende stap!

Stap 4: Kodeer dit: sagteware

Kodeer dit: sagteware!
Kodeer dit: sagteware!
Kodeer dit: sagteware!
Kodeer dit: sagteware!

1. Maak WinSCP op u rekenaar oop en maak verbinding met u Pi. Skep 'n Lobe -vouer in die tuisgids van u Pi en skep 'n modelmap in die gids.

2. Sleep die inhoud van die Lobe TF -lêergids na die Pi. Let op die lêerpad:/home/pi/Lobe/model

3. Open op die Pi 'n terminale en laai die lobe-python-biblioteek vir Python3 af deur die volgende bash-opdragte uit te voer:

pip3 installeer

pip3 installeer lob

4. Laai die Trash Classifier -kode (rpi_trash_classifier.py) van hierdie repo af op die Pi af (klik op die "Code" -knoppie soos op foto 1 getoon).

  • Verkies om te kopieer/plak? Kry die rou kode hier.
  • Wil u dit op u rekenaar aflaai? Laai die repo/kode op u rekenaar af en dra dan die Python -kode oor na die Pi via WinSCP (of u voorkeurprogram vir eksterne lêeroordrag).

5. Nadat u die hardeware aan die Pi se GPIO -penne gekoppel het, lees die voorbeeldkode deur en werk die lêerpaaie op soos nodig:

  • Reël 29: filepath na die Lobe TF -model
  • Reëls 47 en 83: filepath na beelde met Pi -kamera

6. Werk indien nodig die modeletikette in die kode op om presies te pas by die etikette in u Lobe -model (insluitend hoofletters, leestekens, ens.):

  • Reël 57: "vullis"
  • Reël 60: "herwin"
  • Reël 63: "kompos"
  • Reël 66: "fasiliteit vir gevaarlike afval"
  • Reël 69: "nie asblik nie!"

7. Begin die program met behulp van Python3 in die terminale venster:

python3 rpi_trash_classifier.py

Stap 5: Toets dit: voer die program uit

Toets dit: voer die program uit!
Toets dit: voer die program uit!
Toets dit: voer die program uit!
Toets dit: voer die program uit!
Toets dit: voer die program uit!
Toets dit: voer die program uit!

Programoorsig

As u die program die eerste keer uitvoer, sal dit tyd neem om die TensorFlow -biblioteek en die Lobe ML -model te laai. As die program gereed is om 'n beeld te neem, sal die statuslig (wit LED) pols.

Sodra u 'n prentjie geneem het, vergelyk die program die prent met die Lobe ML -model en lewer die voorspelling (reël 83). Die uitset bepaal watter lig aangeskakel word: geel (vullis), blou (herwin), groen (kompos) of rooi (gevaarlike afval).

As nie een van die LED's aanskakel nie en die status -LED na die polsmodus terugkeer, beteken dit dat die foto wat geneem is, "nie asblik was nie", met ander woorde, neem die foto weer!

'N Beeld opneem

Druk op die drukknop om 'n beeld te neem. Let daarop dat u die drukknop vir ten minste 1 s moet ingedruk hou sodat die program die pers kan registreer. Dit word aanbeveel om 'n paar toetsbeelde te neem en dit dan op die lessenaar oop te maak om die kamera -aansig en raam beter te verstaan.

Om die gebruiker tyd te gee om die voorwerp te posisioneer en om die kamera se ligvlakke aan te pas, neem dit ongeveer 5 sekondes om 'n beeld volledig te neem. U kan hierdie instellings in die kode verander (reëls 35 en 41), maar hou in gedagte dat die Pi Foundation 'n minimum van 2 sekondes aanbeveel vir die aanpassing van die ligvlak.

Probleemoplossing

Die grootste uitdaging is om te verseker dat die vasgelegde beeld is wat ons verwag, dus neem 'n rukkie om die beelde na te gaan en die verwagte resultate te vergelyk met die aanduiding van LED's. Indien nodig, kan u beelde aan die Lobe ML -model deurgee vir direkte afleidings en vinniger vergelyking.

'N Paar dinge om op te let:

  • Die TensorFlow -biblioteek sal waarskynlik 'n paar waarskuwingsboodskappe gooi - dit is tipies vir die weergawe wat in hierdie voorbeeldkode gebruik word.
  • Die voorspellingsetikette moet presies wees soos geskryf in die funksie led_select (), insluitend hoofletters, leestekens en spasiëring. Maak seker dat u dit verander as u 'n ander Lobe -model het.
  • Die Pi benodig 'n konstante kragtoevoer. Die kraglig van die Pi moet helder, soliede rooi wees.
  • As een of meer LED's nie aanskakel wanneer dit verwag word nie, moet u dit opdwing met die opdrag:

red_led.on ()

Stap 6: (opsioneel) Bou dit: finaliseer u stroombaan

(Opsioneel) Bou dit: finaliseer u stroombaan!
(Opsioneel) Bou dit: finaliseer u stroombaan!
(Opsioneel) Bou dit: finaliseer u stroombaan!
(Opsioneel) Bou dit: finaliseer u stroombaan!
(Opsioneel) Bou dit: finaliseer u stroombaan!
(Opsioneel) Bou dit: finaliseer u stroombaan!

Noudat ons ons projek getoets en, indien nodig, ontfout, sodat dit werk soos verwag, is ons gereed om ons stroombaan te soldeer!

Nota: as u nie 'n soldeerbout het nie, kan u hierdie stap oorslaan. Een alternatief is om die draadverbindings met warm gom te bedek (met hierdie opsie kan u dinge later regmaak/byvoeg/gebruik, maar dit is meer geneig om te breek), of epoxy of 'n soortgelyke permanente gom te gebruik (hierdie opsie is baie duursamer maar u kan nie die kring of moontlik die Pi gebruik nie)

Vinnige opmerking oor my ontwerpkeuses (foto 1):

  • Ek het gekies vir vroulike springdrade vir die LED's en Pi GPIO, want dit laat my toe om LED's te verwyder en kleure te ruil of om te skuif indien nodig. U kan dit oorslaan as u verbindings permanent wil maak.
  • Net so het ek 'n JST -aansluiting vir die drukknop gekies.

Na die bou

1. Sny elk van die vroulike springdrade in die helfte (ja, almal!). Verwyder ongeveer 1/2 cm van die draadisolasie met draadstroppers.

2. Vir elk van die LED's, soldeer 'n 220Ω -weerstand aan die negatiewe (korter) been. (Foto 2)

3. Sny 'n klein stukkie, ongeveer 2 cm (2 ) krimpbuis en druk die LED en weerstandsverbinding oor. Maak seker dat die ander weerstandsbeen toeganklik is, verhit dan die krimpbuis totdat dit die verbinding vasmaak. (Foto 3)

4. Steek elke LED in 'n paar vroulike springdrade. (Foto 4)

5. Merk die jumperdrade (bv. Met band), en soldeer dan die jumperdrade op jou printplaat (PCB). (Foto 5)

6. Gebruik vervolgens 'n (sny) vroulike springdraad om elke LED aan sy onderskeie Pi GPIO -pen te koppel. Soldeer en merk 'n jumperdraad sodat die kaal metaal via die PCB met die positiewe LED -been verbind word. (Foto 5)

Let wel: Waar u hierdie draad soldeer, sal afhang van u PCB -uitleg. U kan hierdie draad ook direk aan die positiewe LED -jumperdraad soldeer.

7. Soldeer 'n 220Ω -weerstand aan die negatiewe (swart) kant van die JST -aansluiting. (Foto 6)

8. Soldeer die JST -aansluiting en weerstand aan die drukknop. (Foto 6)

9. Koppel die M-na-F-draaddrade tussen die drukknopaansluiting en die GPIO-penne (herinnering: swart is GND).

10. Bedek die PCB met warm gom of epoxy vir 'n veiliger verbinding.

Let wel: as u kies om epoxy te gebruik, kan u in die toekoms moontlik nie die Pi se GPIO -penne vir ander projekte gebruik nie. As u hieroor bekommerd is, voeg 'n GPIO -lintkabel by en koppel die jumperdrade daaraan.

Stap 7: (opsioneel) Build It: Case

(Opsioneel) Bou dit: omhulsel!
(Opsioneel) Bou dit: omhulsel!
(Opsioneel) Bou dit: omhulsel!
(Opsioneel) Bou dit: omhulsel!
(Opsioneel) Bou dit: omhulsel!
(Opsioneel) Bou dit: omhulsel!
(Opsioneel) Bou dit: omhulsel!
(Opsioneel) Bou dit: omhulsel!

Skep 'n omhulsel vir u Pi wat die kamera, drukknop en LED's op hul plek hou en die Pi beskerm. Ontwerp u eie omhulsel of volg ons bouinstruksies hieronder om 'n kartonomhulsel vinnig te prototipe!

  1. Bepaal bo -op die klein kartondoos die liggings vir die drukknop, statuslig, identifiseerersligte en die pi -kamera -venster (Foto 1).

    Let wel: die venster van die Pi -kamera moet ongeveer 3/4 "x 1/2" groot wees

  2. Sny die spore met u presisie mes.

    Let wel: u wil moontlik die groottes toets (foto 1)

  3. Opsioneel: verf die kas! Ek het gekies vir spuitverf:)
  4. Knip 'n reghoekige "venster" omslag vir die Pi -kamera uit (foto 4) en plak aan die binnekant van die boks vas
  5. Knip laastens die gleuf vir die Pi -kragkabel uit.

    Dit word aanbeveel om eers alle elektronika te installeer om die beste plek vir die gleuf vir die pi -kabel te vind

Stap 8: Installeer en implementeer

Installeer en implementeer!
Installeer en implementeer!

Dis dit! U is gereed om u projek te installeer en te implementeer! Plaas die omhulsel bo u asblikke, steek die Pi in en voer die program uit om 'n vinniger en meer betroubare manier om ons afval te verminder. Yay!

Vorentoe gaan

  • Deel u projekte en idees met ander mense via die Lobe Reddit -gemeenskap!
  • Kyk na die Lobe Python GitHub repo vir 'n algemene oorsig oor hoe u Python kan gebruik om 'n groter verskeidenheid Lobe -projekte te implementeer
  • Vrae of projekversoeke? Gee 'n opmerking oor hierdie projek of kontak ons direk: [email protected]

Aanbeveel: