Innehållsförteckning:

Är det en hand? (Raspberry Pi Camera + Neural Network) Del 1/2: 16 steg (med bilder)
Är det en hand? (Raspberry Pi Camera + Neural Network) Del 1/2: 16 steg (med bilder)

Video: Är det en hand? (Raspberry Pi Camera + Neural Network) Del 1/2: 16 steg (med bilder)

Video: Är det en hand? (Raspberry Pi Camera + Neural Network) Del 1/2: 16 steg (med bilder)
Video: Essential Scale-Out Computing by James Cuff 2024, November
Anonim
Är det en hand? (Raspberry Pi Camera + Neural Network) Del 1/2
Är det en hand? (Raspberry Pi Camera + Neural Network) Del 1/2
Är det en hand? (Raspberry Pi Camera + Neural Network) Del 1/2
Är det en hand? (Raspberry Pi Camera + Neural Network) Del 1/2
Är det en hand? (Raspberry Pi Camera + Neural Network) Del 1/2
Är det en hand? (Raspberry Pi Camera + Neural Network) Del 1/2

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

Image
Image

Här är en liten video på 5 minuter som täcker alla steg. Ta en titt.

Steg 2: Hårdvara

Hårdvara
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

Bit av kod
Bit av kod
Bit av kod
Bit av kod

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

Skaffa bilder
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

Verktyg och språk som används
Verktyg och språk som används
Verktyg och språk som används
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örbereda datauppsättning för utbildning
Förbereda datauppsättning för utbildning
Förbereda datauppsättning för utbildning
Förbereda datauppsättning för utbildning
Förbereda datauppsättning för utbildning
Förbereda datauppsättning för utbildning
Förbereda datauppsättning för utbildning
Förbereda 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

Neuralt nätverk
Neuralt nätverk
Neuralt nätverk
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

Utbildning neuralt nätverk
Utbildning neuralt 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

Testar neuralt nätverk
Testar 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…

Resultat och nästa del…
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

Objektdetektering
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

Image
Image

En video på 3 minuter som förklarar alla återstående steg. Ta en titt.

Steg 13: Märkning

Märkning
Märkning
Märkning
Märkning
Märkning
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

Märkning GUI
Märkning GUI
Märkning GUI
Märkning GUI
Märkning GUI
Märkning GUI
Märkning GUI
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

Bibliotek behövs
Bibliotek behövs
Bibliotek behövs
Bibliotek behövs
Bibliotek behövs
Bibliotek behövs

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

Återstående celler
Återstående celler
Återstående celler
Återstående celler
Återstående celler
Återstående celler
Återstående celler
Å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: