Innholdsfortegnelse:
- Trinn 1: Video
- Trinn 2: Maskinvare
- Trinn 3: Kodebit
- Trinn 4: Få bilder
- Trinn 5: Verktøy og språk som brukes
- Trinn 6: Forberede datasett for opplæring
- Trinn 7: Nevralnettverk
- Trinn 8: Trening av nevrale nettverk
- Trinn 9: Testing av nevrale nettverk
- Trinn 10: Resultat og neste del…
- Trinn 11: Objektdeteksjon
- Trinn 12: Video
- Trinn 13: Merking
- Trinn 14: Merking GUI
- Trinn 15: Nødvendige biblioteker
- Trinn 16: Resterende celler
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-13 06:58
For noen dager siden skadet jeg høyre håndledd på treningsstudioet. Etterpå hver gang jeg brukte datamusen, forårsaket det mye smerte på grunn av bratt håndledningsvinkel.
Det var da det slo meg "ville det ikke vært flott hvis vi kunne konvertere en hvilken som helst overflate til en styreflate" og jeg vet ikke hvorfor, men av en eller annen grunn tenkte jeg på henne, filmen HER, jeg vil la dere finne ut av det ute. Det var en spennende tanke, men jeg visste ikke om jeg kunne gjøre det, jeg bestemte meg for å prøve det.
Denne artikkelen viser hva som kom ut av det.
Før vi begynner har jeg en ansvarsfraskrivelse
'På slutten av denne artikkelen kunne jeg ikke konvertere noen overflate til en styreflate, men jeg lærte ikke mye og la til store verktøy i arsenalet mitt. Jeg håper det skjer med deg også '
La oss komme i gang.
Trinn 1: Video
Her er en liten 5 min video som dekker alle trinn. Ta en titt.
Trinn 2: Maskinvare
Jeg setter opp en bringebær pi sammen med bringebær pi kamera i en høyde på ca 45 cm. Dette gir oss et overvåkingsområde på omtrent 25x25 cm under kameraet.
Bringebær pi og bringebær pi kamera er lett tilgjengelig, bare google det og du bør kunne finne en lokal butikk.
Ta en titt på denne lenken eller en av mine Raspberry pi -spillelister for å få din hodeløse pi i gang.
Etter dette oppsettet trenger vi et stykke kode som avgjør om det er en hånd i området som kameraet overvåker, og i så fall hvor er det.
Trinn 3: Kodebit
Kodebit som lar oss bestemme om det er en hånd i interesseområdet, bruker noe som kalles Neural Network. De faller inn under kategorien programmering der vi ikke definerer regler for å ta avgjørelser, men vi viser nevrale nettverk nok data til at det regner ut regler alene.
I vårt tilfelle, i stedet for å kode hvordan hånden ser ut, viser vi nevrale nettverksbilder tatt fra bringebær pi som inneholder hånd og som ikke inneholder hånd. Denne fasen kalles opplæring av nevrale nettverk og bilder som brukes kalles treningsdatasett.
Trinn 4: Få bilder
Jeg fjernlogget meg til bringebær pi og tok en haug med bilder ved hjelp av følgende kommando.
sudo raspistill -w 640 -h 480 -rot 90 -t 250000 -t1 5000 -o ramme%04d.jpg
Jeg tok 80 bilder med hånden og 80 bilder som ikke inneholder hånd. 160 bilder er ikke nok til å trene et neuralt nettverk på riktig måte, men bør være nok for bevis på konseptet.
I tillegg til 160 bilder, tok jeg 20 bilder mer for å teste nettverket vårt når det er trent.
Når datasettet var klart begynte jeg å skrive kode for nevrale nettverk.
Trinn 5: Verktøy og språk som brukes
Jeg skrev mitt nevrale nettverk i python deep learning -biblioteket kalt Keras, og koden er skrevet på jupyter notebook fra anaconda navigator.
Trinn 6: Forberede datasett for opplæring
Først (Bilde 1) Jeg inkluderte alle bibliotekene som trengs for dette prosjektet, som inkluderer PIL, matplotlib, numpy, os og Keras. I den andre cellen i python -notatboken (Bilde #2) definerer jeg stier til datasettet og skriver ut prøvetall. Nå må vi laste alle bildene inn i en numpy -matrise, derfor opprettet jeg i tredje celle (Bilde 2) en numpy -array på 82 (antall håndprøver) +75 (antall ikke -hånd -prøver) dvs. 157x100x100x3. 157 er totalt antall bilder jeg har, 100x100 er størrelsen på bildedimensjonen og 3 er for røde, grønne og blå fargelag i bildet.
I fjerde og femte celle laster vi inn bilder som inneholder hånd etterfulgt av bilder som ikke inneholder hånd i numpy -matrisen. I den sjette cellen deler vi hver verdi med 255 og begrenser dermed verdiområdet fra 0 til 1. (Bilde #3)
Jeg beklager hvis vedlagte bilder ikke er gode nok. Her er lenken til GITHUB -depotet, slik at du kan se på koden. Ikke glem å erstatte katalogbanenavn med banen din:).
Flytter med.
Deretter må vi merke hvert bilde, så vi lager et endimensjonalt numpy -utvalg på 157 i lengden. De første 82 oppføringene er satt til 1 og de resterende 75 oppføringene er satt til 0 som overfører nevrale nettverk at de første 82 bildene er fra en klasse og de resterende er fra en annen. (Bilde #4)
La oss nå lage et nevrale nettverk.
Trinn 7: Nevralnettverk
I niende celle definerer vi vårt nevrale nettverk. Den inneholder tre repetisjoner av konvolusjonslaget etterfulgt av maxpool -lag med henholdsvis 8, 12 og 16 konvolusjonsfiltre. Etter det har vi to tette nevrale nett. Legger ved to bilder for dette trinnet. Først er snap av kode som skaper nevrale nettverk og andre er billedlig representasjon av nevrale nettverk med utdata dimensjon og operasjoner kommentert.
Trinn 8: Trening av nevrale nettverk
I den tiende cellen konfigurerer vi nevrale nettverksoptimerere til 'adam' og tapsfunksjon til 'binary_crossentropy'. De spiller en viktig rolle i hvordan nettverksvekter oppdateres. Til slutt når vi kjører ellevte celle, begynner nevrale nettverk å trene. Mens nettverket trener, se på tapfunksjonen og sørg for at den avtar.
Trinn 9: Testing av nevrale nettverk
Når nevrale nettverk er opplært, må vi utarbeide testdatasett. Vi gjentar prosedyren som er utført for å forberede treningssett i tredje, fjerde, femte og sjette celle på testdata for å lage testsett. Vi forbereder også etikett for testsett, men denne gangen kjører vi modell på dette datasettet for å få spådommer og ikke for å trene.
Trinn 10: Resultat og neste del…
Jeg har testnøyaktighet på 88%, men ta dette med en klype salt ettersom datasettet brukes til å trene og teste denne modellen er veldig veldig veldig liten og utilstrekkelig til å trene denne modellen på riktig måte.
Uansett håper jeg at du likte denne artikkelen. Min intensjon bak denne øvelsen er ennå ikke fullført, og pass på 2. del. Jeg vil laste den opp så snart jeg kan.
I neste del vil vi trene et annet neuralt nettverk som vil fortelle oss håndens plassering i et hånddetektert bilde.
Alle spørsmål er velkomne.
Hvis noen er interessert i å bruke mitt lille datasett, gi meg beskjed i kommentarer. Jeg vil gjøre den tilgjengelig.
Takk for at du leste. Jeg ser deg snart med andre del til da, hvorfor ikke lage og trene et nevrale nettverk.
Edit:- Neste trinn er for andre del.
Trinn 11: Objektdeteksjon
I tidligere trinn opprettet vi et NN som forteller oss om testbildet inneholder hånd eller ikke. Hva så videre? Hvis NN klassifiserer bildet som inneholdende hånd, vil vi gjerne vite håndens plassering. Dette kalles objektgjenkjenning i datavisningslitteratur. Så la oss trene NN som gjør akkurat det samme.
Trinn 12: Video
En 3 min video som forklarer alle gjenværende trinn. Ta en titt.
Trinn 13: Merking
Hvis du vil at et nevralnettverk skal sende ut plassering av hånden, må vi trene det på en slik måte, dvs. i motsetning til tidligere nevrale nettverk der hvert bilde ble merket som enten med hånd og uten hånd. Denne gangen vil alle bilder med hånden ha fire etiketter som tilsvarer diagonale koordinater for avgrensningsboksen rundt hånden i det bildet.
Vedlagt bilde av csv -fil inneholder etikett for hvert bilde. Vær oppmerksom på at koordinatene er normalisert med bildedimensjonen, dvs. hvis øvre X -koordinat er på 320. piksel i bildet med en bredde på 640 piksler, vil vi merke det som 0,5.
Trinn 14: Merking GUI
Du lurer kanskje på hvordan jeg klarte å merke alle 82 bildene. Vel, jeg skrev en GUI i python som hjalp meg med denne oppgaven. Når bildet er lastet inn i GUI. Jeg venstreklikker ved øvre koordinat og høyreklikker på nedre koordinat for sannsynlig grenseboks rundt hånden. Disse koordinatene skrives deretter til en fil etter at jeg klikker på neste knapp for å laste neste bilde. Jeg gjentok denne prosedyren for alle 82 tog- og 4 testbilder. Når etikettene var klare, var det treningstid.
Trinn 15: Nødvendige biblioteker
Først må vi laste alle nødvendige biblioteker. Som inkluderer
- PIL for bildemanipulering,
- matplotlib for plotting,
- numpy for matrisedrift,
- os for operativsystemavhengig funksjonalitet og
- keras for nevrale nettverk.
Trinn 16: Resterende celler
I 2., 3., 4. og 5. celle laster vi inn bilder i numpy array og lager en firdimensjonal array fra csv -fil for å fungere som etiketter. I celle nummer 6 lager vi vårt nevrale nettverk. Arkitekturen er identisk med det nevrale nettverket som brukes for klassifisering, bortsett fra utdatalagdimensjonen som er 4 og ikke 1. En annen forskjell kommer fra tapfunksjonen som brukes, som er gjennomsnittlig kvadratfeil. I celle nummer 8 starter vi opplæringen av vårt nevrale nettverk når jeg trente. Jeg kjørte denne modellen på testsettet for å få spådommer for avgrensningsboks på overliggende koordinater for avgrensningsboks, de så ganske nøyaktige ut.
Takk for at du leste.