INHOUDSOPGAWE:

Is dit 'n hand? (Raspberry Pi -kamera + neurale netwerk) Deel 1/2: 16 stappe (met foto's)
Is dit 'n hand? (Raspberry Pi -kamera + neurale netwerk) Deel 1/2: 16 stappe (met foto's)

Video: Is dit 'n hand? (Raspberry Pi -kamera + neurale netwerk) Deel 1/2: 16 stappe (met foto's)

Video: Is dit 'n hand? (Raspberry Pi -kamera + neurale netwerk) Deel 1/2: 16 stappe (met foto's)
Video: Before safety was invented... 2024, November
Anonim
Is dit 'n hand? (Raspberry Pi -kamera + neurale netwerk) Deel 1/2
Is dit 'n hand? (Raspberry Pi -kamera + neurale netwerk) Deel 1/2
Is dit 'n hand? (Raspberry Pi -kamera + neurale netwerk) Deel 1/2
Is dit 'n hand? (Raspberry Pi -kamera + neurale netwerk) Deel 1/2
Is dit 'n hand? (Raspberry Pi -kamera + neurale netwerk) Deel 1/2
Is dit 'n hand? (Raspberry Pi -kamera + neurale netwerk) Deel 1/2

'N Paar dae gelede het ek my regterhand by die gimnasium beseer. Elke keer as ek my rekenaarmuis gebruik het, veroorsaak dit baie pyn as gevolg van die steil polshoek.

Dit is toe dat dit my tref "sou dit nie wonderlik wees as ons enige oppervlak in 'n trackpad kon omskep nie" en ek weet nie hoekom nie, maar om een of ander rede het ek aan haar gedink, die film HER, ek sal julle laat dink uit. Dit was 'n opwindende gedagte, maar ek het nie geweet of ek dit kon doen nie, ek het besluit om dit te probeer.

Hierdie artikel beskryf wat daaruit gekom het.

Voordat ons begin, het ek 'n vrywaring:

'Aan die einde van hierdie artikel kon ek geen oppervlak in 'n trackpad omskep nie, maar ek het nie veel geleer nie en het groot gereedskap by my arsenaal gevoeg. Ek hoop dit gebeur met jou ook '

Laat ons begin.

Stap 1: Video

Image
Image

Hier is 'n klein video van 5 minute wat alle stappe dek. Kyk.

Stap 2: Hardeware

Hardeware
Hardeware

Ek stel 'n framboos pi saam met 'n framboos pi kamera op 'n hoogte van ongeveer 45 cm op. Dit gee ons 'n moniteringsgebied van ongeveer 25x25 cm onder die kamera.

Raspberry pi en framboos pi kamera is maklik beskikbaar, google dit net en u behoort 'n plaaslike winkel te vind.

Kyk na hierdie skakel of een van my Raspberry pi -snitlys om u koplose pi aan die gang te kry.

Na hierdie opstelling benodig ons 'n stuk kode wat besluit of daar 'n hand in die omgewing is wat die kamera monitor, en indien wel, waar is dit?

Stap 3: Stuk kode

Stuk kode
Stuk kode
Stuk kode
Stuk kode

'N Stukkie kode waarmee ons kan besluit of daar 'n belanghebbende is, gebruik iets wat neurale netwerk genoem word. Hulle val onder die kategorie van programmering, waar ons nie reëls definieer om 'n besluit te neem nie, maar ons wys die neurale netwerk genoeg data om reëls self te bepaal.

In ons geval, in plaas van die kodering van hoe die hand lyk, wys ons neurale netwerkbeelde wat geneem is van framboos pi wat hand bevat en wat nie hand bevat nie. Hierdie fase word opleiding van neurale netwerk genoem en beelde wat gebruik word, word opleidingsdatastel genoem.

Stap 4: Beelde kry

Beelde kry
Beelde kry

Ek het by my framboospie aangemeld en 'n klomp beelde geneem met die volgende opdrag.

sudo raspistill -w 640 -h 480 -rot 90 -t 250000 -t1 5000 -o raam%04d.jpg

Ek het 80 beelde met die hand geneem en 80 beelde wat nie hand bevat nie. 160 beelde is nie genoeg om 'n neurale netwerk behoorlik op te lei nie, maar dit behoort genoeg te wees om die konsep te bewys.

Behalwe 160 beelde, het ek nog 20 beelde geneem om ons netwerk te toets sodra dit opgelei is.

Sodra die datastel gereed was, het ek kode vir neurale netwerk begin skryf.

Stap 5: Gereedskap en taal gebruik

Gereedskap en taal gebruik
Gereedskap en taal gebruik
Gereedskap en taal gebruik
Gereedskap en taal gebruik

Ek het my neurale netwerk in die python deep learning -biblioteek met die naam Keras geskryf, en die kode word op die jupyter -notaboek van anaconda -navigator geskryf.

Stap 6: Voorbereiding van 'n datastel vir opleiding

Voorbereiding van 'n datastel vir opleiding
Voorbereiding van 'n datastel vir opleiding
Voorbereiding van 'n datastel vir opleiding
Voorbereiding van 'n datastel vir opleiding
Voorbereiding van 'n datastel vir opleiding
Voorbereiding van 'n datastel vir opleiding
Voorbereiding van 'n datastel vir opleiding
Voorbereiding van 'n datastel vir opleiding

Eerstens (prent 1) het ek al die biblioteke ingesluit wat nodig is vir hierdie projek, wat PIL, matplotlib, numpy, os en Keras insluit. In die tweede sel van die python -notaboek (prent #2) definieer ek paaie na die datastel en druk ek die aantal monsters uit. Nou moet ons alle beelde in 'n numpy -skikking laai, daarom het ek in die derde sel (prent 2) 'n numpy -reeks van 82 (aantal handmonsters) +75 (aantal nie -handmonsters) geskep, dit wil sê 157x100x100x3. 157 is die totale aantal beelde wat ek het, 100x100 is die grootte van ons beeld en 3 is vir rooi, groen en blou kleurlae in die prent.

In die vierde en vyfde sel laai ons beelde met die hand gevolg deur beelde wat nie die hand in die numpy -skikking bevat nie. In die sesde sel deel ons elke waarde met 255, en beperk dus die waarde van 0 tot 1. (prent #3)

Ek is jammer as die aangehegte beelde nie goed genoeg is nie. Hier is 'n skakel na die GITHUB -bewaarplek, sodat u na die kode kan kyk. Moenie vergeet om gidspaadname met u pad te vervang nie:).

Beweeg saam.

Vervolgens moet ons elke prentjie benoem, sodat ons 'n eendimensionele numpy -skikking van 157 in lengte kan skep. Die eerste 82 inskrywings word op 1 gestel, en die oorblywende 75 inskrywings is ingestel op 0 wat die neurale netwerk oordra dat die eerste 82 beelde uit een klas is en die res van 'n ander. (Beeld #4)

Laat ons nou 'n neurale netwerk skep.

Stap 7: Neurale netwerk

Neurale netwerk
Neurale netwerk
Neurale netwerk
Neurale netwerk

In die negende sel definieer ons ons neurale netwerk. Dit bevat drie herhalings van die konvolusielaag gevolg deur maxpool -lae met onderskeidelik 8, 12 en 16 konvolusiefilters. Daarna het ons twee digte neurale nette. Heg twee beelde vir hierdie stap aan. Die eerste is 'n kort kode wat 'n neurale netwerk skep, en die tweede 'n voorstelling van 'n neurale netwerk met 'n afmeting en 'n geannoteerde bewerking.

Stap 8: Opleiding van neurale netwerk

Opleiding Neurale Netwerk
Opleiding Neurale Netwerk

In die tiende sel stel ons die neurale netwerkoptimaliseerder op na 'adam' en die verliesfunksie in 'binary_crossentropy'. Dit speel 'n belangrike rol in die opdatering van netwerkgewigte. As ons uiteindelik die elfde sel gebruik, begin die neurale netwerk begin oefen. Terwyl die netwerk oefen, kyk na die verliesfunksie en maak seker dat dit afneem.

Stap 9: Toets neurale netwerk

Toets neurale netwerk
Toets neurale netwerk

Sodra die neurale netwerk opgelei is, moet ons die toetsdatastel voorberei. Ons herhaal die prosedure wat gedoen is om die opleidingsstel in die derde, vierde, vyfde en sesde sel voor te berei vir toetsdata om 'n toetsstel te maak. Ons berei ook die etiket vir die toetsstel voor, maar hierdie keer gebruik ons 'n model vir hierdie datastel om voorspellings te kry en nie om op te lei nie.

Stap 10: Resultaat en volgende deel …

Uitslag en volgende deel…
Uitslag en volgende deel…

Ek het 'n toetsnauwkeurigheid van 88%, maar neem dit met 'n knippie sout, aangesien die datastel wat gebruik is om hierdie model op te lei, baie klein is en onvoldoende is om hierdie model behoorlik op te lei.

Ek hoop in elk geval dat u hierdie artikel geniet het. My bedoeling agter hierdie oefening is nog nie voltooi nie, en let op die tweede deel. Ek sal dit so gou as moontlik oplaai.

In die volgende deel sal ons 'n ander neurale netwerk oplei wat ons die ligging van die hand in 'n met die hand opgespoorde beeld sal vertel.

Alle navrae is welkom.

As iemand belangstel om my klein datastel te gebruik, laat weet my in die kommentaar. Ek sal dit beskikbaar stel.

Dankie vir die lees. Ek sien u binnekort met die tweede deel tot dan, waarom bou u nie 'n neurale netwerk op en lei dit op nie?

Edit:- Die volgende stappe is vir die tweede deel.

Stap 11: Voorwerpopsporing

Voorwerpopsporing
Voorwerpopsporing

In vorige stappe het ons 'n NN geskep wat ons vertel of die toetsbeeld hand bevat of nie. Wel, wat volgende? As NN die beeld as hand bevat, wil ons graag die ligging van die hand weet. Dit word objekopsporing in rekenaarvisie -literatuur genoem. Laat ons dus NN oplei wat presies dieselfde doen.

Stap 12: Video

Image
Image

'N Video van 3 minute wat alle oorblywende stappe verduidelik. Kyk.

Stap 13: Etikettering

Etikettering
Etikettering
Etikettering
Etikettering
Etikettering
Etikettering

As u wil hê dat 'n neurale netwerk die ligging van die hand moet uitvoer, moet ons dit op so 'n manier oplei, dws anders as die vorige neurale netwerk, waar elke beeld met die hand of sonder die hand gemerk is. Hierdie keer het alle beelde met die hand vier etikette wat ooreenstem met diagonale koördinate van die omhulsel rondom die hand in die prent.

Die aangehegte prent van die csv -lêer bevat 'n etiket vir elke prent. Let daarop dat koördinate genormaliseer word met die beeldafmeting, dit wil sê as die boonste X -koördinaat 'n 320ste pixel in die prentjie met 'n breedte van 640 pixels het, sal ons dit as 0,5 benoem.

Stap 14: Etikettering van GUI

Etikettering GUI
Etikettering GUI
Etikettering GUI
Etikettering GUI
Etikettering GUI
Etikettering GUI
Etikettering GUI
Etikettering GUI

U wonder miskien hoe ek dit reggekry het om al die 82 beelde te benoem, ek het 'n GUI in python geskryf wat my gehelp het met hierdie taak. Sodra die prent in die GUI gelaai is. Ek het met die linkermuisknop by die boonste koördinaat klik en met die rechtermuisknop op die onderste koördinaat van die moontlike omhulsel om die hand. Hierdie koördinate word dan na 'n lêer geskryf, waarna ek op die volgende knoppie klik om die volgende prent te laai. Ek het hierdie prosedure herhaal vir alle 82 trein- en 4 toetsbeelde. Sodra die etikette gereed was, was dit opleidingstyd.

Stap 15: biblioteke benodig

Biblioteke benodig
Biblioteke benodig
Biblioteke benodig
Biblioteke benodig
Biblioteke benodig
Biblioteke benodig

Eerstens moet ons alle nodige biblioteke laai. Wat insluit

  • PIL vir beeldmanipulasie,
  • matplotlib vir plot,
  • numpy vir matriksbediening,
  • os vir bedryfstelselafhanklike funksies en
  • keras vir neurale netwerk.

Stap 16: Oorblywende selle

Oorblywende selle
Oorblywende selle
Oorblywende selle
Oorblywende selle
Oorblywende selle
Oorblywende selle
Oorblywende selle
Oorblywende selle

In die 2de, 3de, 4de en 5de sel laai ons beelde in 'n numpy -skikking en skep ons 'n vier -dimensionele skikking uit csv -lêer om as etikette op te tree. In sel nommer 6 skep ons ons neurale netwerk. Die argitektuur is identies aan die neurale netwerk wat vir klassifikasie gebruik word, behalwe die afmeting van die uitvoerlaag wat 4 is en nie 1. 'n Ander verskil kom van die verliesfunksie wat gebruik word, die gemiddelde kwadraatfout. In sel nommer 8 begin ons met die opleiding van ons neurale netwerk, sodra ek opgelei is, het ek hierdie model op die toetsstel gehardloop om voorspellings te kry vir die omhulsel van die koördinate van die omhulsel, dit lyk redelik akkuraat.

Dankie vir die lees.

Aanbeveel: