Innehållsförteckning:
- Steg 1: Video
- Steg 2: Hårdvara
- Steg 3: kodbit
- Steg 4: Skaffa bilder
- Steg 5: Verktyg och språk som används
- Steg 6: Förbered datauppsättning för utbildning
- Steg 7: Neuralt nätverk
- Steg 8: Utbildning av neurala nätverk
- Steg 9: Testa neuralt nätverk
- Steg 10: Resultat och nästa del…
- Steg 11: Objektdetektering
- Steg 12: Video
- Steg 13: Märkning
- Steg 14: Märkning GUI
- Steg 15: Behövs bibliotek
- Steg 16: Återstående celler
Video: Är det en hand? (Raspberry Pi Camera + Neural Network) Del 1/2: 16 steg (med bilder)
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:46
För några dagar sedan skadade jag min högra handled på gymmet. Efteråt varje gång jag använde min datormus orsakade det mycket smärta på grund av brant handledsvinkel.
Det var då det slog mig "skulle det inte vara bra om vi kunde konvertera vilken yta som helst till en styrplatta" och jag vet inte varför men av någon anledning tänkte jag på henne, filmen HER, jag låter er förstå det ut. Det var en spännande tanke men jag visste inte om jag kunde göra det, jag bestämde mig för att prova.
Denna artikel fångar vad som kom ut ur det.
Innan vi börjar har jag en ansvarsfriskrivning
'I slutet av den här artikeln kunde jag inte konvertera någon yta till en styrplatta, men jag lär mig inte mycket och har lagt till stora verktyg i min arsenal. Jag hoppas att det händer dig också '
Låt oss börja.
Steg 1: Video
Här är en liten video på 5 minuter som täcker alla steg. Ta en titt.
Steg 2: Hårdvara
Jag installerar en hallon pi tillsammans med hallon pi kamera på en höjd av ca 45 cm. Detta ger oss en övervakningsyta på cirka 25x25 cm under kameran.
Raspberry pi och hallon pi -kamera är lätt tillgängliga, bara googla den så ska du kunna hitta en lokal butik.
Ta en titt på den här länken eller en av mina Raspberry pi -spellistor för att få din huvudlösa pi igång.
Efter denna inställning behöver vi en kodbit som avgör om det finns en hand i området som kameran övervakar och i så fall var är den.
Steg 3: kodbit
En bit kod som låter oss avgöra om det finns en hand i intresseområdet använder något som kallas Neural Network. De faller under kategorin programmering där vi inte definierar regler för att fatta beslut men vi visar neuralt nätverk tillräckligt med data för att det ska räkna ut regler på egen hand.
I vårt fall, istället för att koda hur handen ser ut, visar vi neurala nätverksbilder tagna från hallon pi som innehåller hand och som inte innehåller hand. Denna fas kallas utbildning för neurala nätverk och bilder som används kallas träningsdataset.
Steg 4: Skaffa bilder
Jag fjärrloggade in på min hallon pi och tog en massa bilder med följande kommando.
sudo raspistill -w 640 -h 480 -rot 90 -t 250000 -t1 5000 -o ram%04d.jpg
Jag tog 80 bilder med handen och 80 bilder som inte innehåller hand. 160 bilder räcker inte för att träna ett neuralt nätverk på rätt sätt, men borde vara tillräckligt för att bevisa konceptet.
Förutom 160 bilder tog jag 20 bilder till för att testa vårt nätverk när det har tränats.
När datauppsättningen var klar började jag skriva kod för neuralt nätverk.
Steg 5: Verktyg och språk som används
Jag skrev mitt neurala nätverk i python deep learning -biblioteket som heter Keras och koden är skriven på jupyter notebook från anaconda navigator.
Steg 6: Förbered datauppsättning för utbildning
Först (bild #1) inkluderade jag alla bibliotek som behövs för detta projekt, vilket inkluderar PIL, matplotlib, numpy, os och Keras. I den andra cellen i python -anteckningsboken (bild #2) definierar jag sökvägar till dataset och skriver ut provantal. Nu måste vi ladda alla bilder i en numpy -array, därför skapade jag i den tredje cellen (bild #2) en numpy -array på 82 (antal handprover) +75 (antal icke -handprover) dvs 157x100x100x3. 157 är totalt antal bilder som jag har, 100x100 är vår storlek på bilddimensionen och 3 är för röda, gröna och blåa färglager i bilden.
I fjärde och femte cellen laddar vi bilder som innehåller hand följt av bilder som inte innehåller hand i numpy -arrayen. I den sjätte cellen dividerar vi varje värde med 255 och begränsar därför värdeintervallet från 0 till 1. (Bild #3)
Jag är ledsen om bifogade bilder inte är tillräckligt bra. Här är en länk till GITHUB -förvaret så att du kan titta på koden. Glöm inte att ersätta katalogvägsnamn med din sökväg:).
Går med.
Därefter måste vi märka varje bild, så vi skapar en endimensionell numpy -matris på 157 i längd. Första 82 poster är inställda på 1 och återstående 75 poster är inställda på 0 som förmedlar neurala nätverk att de första 82 bilderna är från en klass och återstående är från en annan. (Bild #4)
Låt oss nu skapa ett neuralt nätverk.
Steg 7: Neuralt nätverk
I nionde cellen definierar vi vårt neurala nätverk. Den innehåller tre upprepningar av konvolutionslagret följt av maxpool -lager med 8, 12 respektive 16 konvolutionsfilter. Efter det har vi två täta neurala nät. Bifogar två bilder för detta steg. Först är snap -kod som skapar neuralt nätverk och andra är bildrepresentation av neuralt nätverk med utdatadimension och funktioner som kommenteras.
Steg 8: Utbildning av neurala nätverk
I den tionde cellen konfigurerar vi neuralt nätverksoptimering till "adam" och förlustfunktion till "binary_crossentropy". De spelar en viktig roll i hur nätverksvikter uppdateras. Slutligen när vi kör elfte cell, börjar neuralt nätverk att träna. Medan nätverket tränar, titta på förlustfunktionen och se till att den minskar.
Steg 9: Testa neuralt nätverk
När ett neuralt nätverk är utbildat måste vi förbereda testdatauppsättningen. Vi upprepar proceduren som gjorts för att förbereda träningsuppsättningen i tredje, fjärde, femte och sjätte cellen på testdata för att skapa testuppsättning. Vi förbereder också etiketten för testuppsättningen men den här gången kör vi modell på denna datamängd för att få förutsägelser och inte för att träna.
Steg 10: Resultat och nästa del…
Jag fick testnoggrannhet på 88% men ta detta med en nypa salt eftersom datauppsättningen som används för att träna och testa den här modellen är väldigt mycket väldigt liten och otillräcklig för att korrekt träna den här modellen.
Jag hoppas i alla fall att du gillade den här artikeln. Min avsikt bakom denna övning är ännu inte klar och se upp för andra delen. Jag kommer att ladda upp den så snart jag kan.
I nästa del kommer vi att träna ett annat neuralt nätverk som kommer att berätta handens placering i en handdetekterad bild.
Alla frågor är välkomna.
Om någon är intresserad av att använda min lilla dataset, låt mig veta i kommentarerna. Jag kommer att göra det tillgängligt.
Tack för att du läser. Jag ses snart med andra delen tills dess varför inte skapa och utbilda ett neuralt nätverk.
Edit:- Nästa steg är för andra delen.
Steg 11: Objektdetektering
I tidigare steg skapade vi ett NN som berättar om testbilden innehåller hand eller inte. Tja vad nästa? Om NN klassificerar bilden som innehållande hand skulle vi vilja veta platsen för handen. Detta kallas för objektdetektering i datorsynlitteratur. Så låt oss träna NN som gör exakt samma sak.
Steg 12: Video
En video på 3 minuter som förklarar alla återstående steg. Ta en titt.
Steg 13: Märkning
Om du vill att ett neuralt nätverk ska mata ut plats för handen måste vi träna det på ett sådant sätt, dvs till skillnad från tidigare neurala nätverk där varje bild var märkt antingen med hand och utan hand. Den här gången kommer alla bilder med handen att ha fyra etiketter som motsvarar diagonala koordinater för begränsningsrutan runt handen i den bilden.
Bifogad bild av csv -filen innehåller etikett för varje bild. Observera att koordinaterna normaliseras med bilddimension, dvs. om övre X -koordinaten är 320: e pixel i bilden med en bredd på 640 pixlar, kommer vi att märka den som 0,5.
Steg 14: Märkning GUI
Du kanske undrar hur jag lyckades märka alla 82 bilder, jag skrev ett GUI i python som hjälpte mig med denna uppgift. När bilden har laddats i GUI. Jag vänsterklickar vid den övre koordinaten och högerklickar på den nedre koordinaten för den troliga gränsrutan runt handen. Dessa koordinater skrivs sedan till en fil efter att jag klickar på nästa knapp för att ladda nästa bild. Jag upprepade denna procedur för alla 82 tåg- och 4 testbilder. När etiketterna var klara var det träningstid.
Steg 15: Behövs bibliotek
Först måste vi ladda alla nödvändiga bibliotek. Vilket ingår
- PIL för bildmanipulation,
- matplotlib för plottning,
- numpy för matrisdrift,
- os för operativsystemberoende funktionalitet och
- keras för neurala nätverk.
Steg 16: Återstående celler
I andra, tredje, fjärde och femte cellen laddar vi bilder i numpy array och skapar en fyrdimensionell array från csv -fil för att fungera som etiketter. I cell nummer 6 skapar vi vårt neurala nätverk. Arkitekturen är identisk med det neurala nätverk som används för klassificering förutom utmatningsskiktdimensionen som är 4 och inte 1. En annan skillnad kommer från förlustfunktionen som används, vilket betyder medelvärde i kvadratfel. I cell nummer 8 börjar vi träna vårt neurala nätverk när jag tränade. Jag körde den här modellen på testuppsättningen för att få förutsägelser för avgränsningslåda på överliggande koordinater för avgränsningslåda, de såg ganska exakta ut.
Tack för att du läser.
Rekommenderad:
Skriv det ! Gör det ! Dela det!: 4 steg
Skriv det ! Gör det ! Dela det!: Mina elever har använt Legos hjälp att lägga till kreativitet i sitt skrivande, organisering av skrivande och för att visa upp sitt arbete digitalt med sin familj och med sina kamrater i klassen
Password Keeper på Aruino Pro Micro eller varför hålla det enkelt när det finns ett utarbetat sätt !: 15 steg (med bilder)
Password Keeper på Aruino Pro Micro eller varför hålla det enkelt när utarbetade sätt finns !: Det verkar som att huvudproblemet med mikrokontroller för fan av elektronik (speciellt nybörjare) är att ta reda på var de ska tillämpas :) Numera elektronik, särskilt digital , ser mer och mer ut som en svart magi. Endast 80-Lvl visards är
Arduino Neural Network Robot: 21 steg (med bilder)
Arduino Neural Network Robot: Denna instruerbara är baserad på en 3 -delars serie som jag gjorde för Make YouTube Channel som visar dig exakt hur du prototyper, designar, monterar och programmerar din egen Arduino neurala nätverksrobot. Efter att ha sett hela serien bör du ha en satsning
Hur man hämtar musik från NÄSTAN någon (Haha) webbplats (så länge du kan höra det kan du få det Ok fint om det är inbäddat i Flash kanske du inte kan) REDIGERA !!!!! Tillagd info: 4 steg
Hur man hämtar musik från NÄSTAN någon (Haha) webbplats (så länge du kan höra det kan du få det … Ok fint om det är inbäddat i Flash kanske du inte kan) REDIGERA !!!!! Tillagd info: om du någonsin går till en webbplats och den spelar en låt som du gillar och vill ha den, så här är instruktionen för mig, inte mitt fel om du förstör något (enda sättet det kommer att hända är om du börjar ta bort saker utan anledning ) Jag har kunnat få musik för
Vattentäta högtalare som svävar - " Det svävar, det stötar och det gör noterna! &Quot;: 7 steg (med bilder)
Vattentäta högtalare som svävar - " Det svävar, det ryser och det stenar noterna! ). Vi kommer att flyta nerför floden, eller fästa linjer till stranden så att våra flottar stannar precis vid vår campingplats. Alla h