Përmbajtje:

A është kjo një dorë? (Kamera Raspberry Pi + Rrjeti Neural) Pjesa 1/2: 16 hapa (me fotografi)
A është kjo një dorë? (Kamera Raspberry Pi + Rrjeti Neural) Pjesa 1/2: 16 hapa (me fotografi)

Video: A është kjo një dorë? (Kamera Raspberry Pi + Rrjeti Neural) Pjesa 1/2: 16 hapa (me fotografi)

Video: A është kjo një dorë? (Kamera Raspberry Pi + Rrjeti Neural) Pjesa 1/2: 16 hapa (me fotografi)
Video: Ещё немного красивых пикселей ► 2 Прохождение Huntdown 2024, Nëntor
Anonim
A është kjo një dorë? (Kamera Raspberry Pi + Rrjeti Neural) Pjesa 1/2
A është kjo një dorë? (Kamera Raspberry Pi + Rrjeti Neural) Pjesa 1/2
A është kjo një dorë? (Kamera Raspberry Pi + Rrjeti Neural) Pjesa 1/2
A është kjo një dorë? (Kamera Raspberry Pi + Rrjeti Neural) Pjesa 1/2
A është kjo një dorë? (Kamera Raspberry Pi + Rrjeti Neural) Pjesa 1/2
A është kjo një dorë? (Kamera Raspberry Pi + Rrjeti Neural) Pjesa 1/2

Disa ditë më parë, unë dëmtova dorën e djathtë në palestër. Më pas sa herë që kam përdorur miun kompjuterik, më shkaktoi shumë dhimbje për shkak të këndit të pjerrët të kyçit të dorës.

Atëherë ai më goditi "a nuk do të ishte mirë nëse mund të shndërronim çdo sipërfaqe në një pista" dhe nuk e di pse, por për disa arsye mendova për të, filmin HER, do t'ju lejoj ta kuptoni. jashtë Ishte një mendim emocionues, por nuk e dija nëse mund ta bëja, vendosa ta provoja.

Ky artikull kap atë që doli prej tij.

Para se të fillojmë, unë kam një mohim-

"Në fund të këtij artikulli, unë nuk mund të konvertoja asnjë sipërfaqe në një pistë, por nuk mësova shumë dhe shtova mjete të mëdha në arsenalin tim. Shpresoj qe te ndodhe edhe ty"

Le të fillojmë.

Hapi 1: Video

Image
Image

Këtu është një video e vogël 5 minutëshe që mbulon të gjitha hapat. Hidhi nje sy.

Hapi 2: Pajisje kompjuterike

Hardware
Hardware

Vendosa një pi mjedër së bashku me kamerën e mjedrës pi në një lartësi prej rreth 45 cm. Kjo na jep një zonë monitorimi prej rreth 25x25 cm nën kamerë.

Kamera Raspberry pi dhe mjedër pi janë lehtësisht të disponueshme, mjafton të kërkoni në Google dhe të jeni në gjendje të gjeni një dyqan lokal.

Hidhini një sy kësaj lidhjeje ose një prej listave të mia të luajtjes të Raspberry pi për të filluar funksionimin e pi -së tuaj pa kokë.

Pas këtij konfigurimi, ne kemi nevojë për një pjesë të kodit që vendos nëse ka një dorë në zonën që kamera po monitoron dhe nëse po ku është.

Hapi 3: Pjesë e Kodit

Copë e Kodit
Copë e Kodit
Copë e Kodit
Copë e Kodit

Një pjesë e kodit që na lejon të vendosim nëse ka një dorë në fushën e interesit përdor diçka të quajtur Rrjeti Neural. Ato bien nën kategorinë e programimit ku ne nuk përcaktojmë rregullat për të marrë vendime, por ne i tregojmë rrjetit nervor të dhëna të mjaftueshme që të nxjerrë rregulla më vete.

Në rastin tonë, në vend që të kodojmë se si duket dora, ne tregojmë imazhe të rrjetit nervor të kapur nga mjedra pi që përmban dorë dhe që nuk përmban dorë. Kjo fazë quhet trajnim i rrjetit nervor dhe imazhet e përdorura quhen të dhëna të trajnimit.

Hapi 4: Marrja e imazheve

Marrja e Imazheve
Marrja e Imazheve

U regjistrova në distancë në pi tim mjedër dhe kapa një mori imazhesh duke përdorur komandën e mëposhtme.

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

Kam kapur 80 imazhe me dorë dhe 80 imazhe që nuk përmbajnë dorë. 160 imazhe nuk janë të mjaftueshme për të trajnuar siç duhet një rrjet nervor, por duhet të jenë të mjaftueshme për të provuar konceptin.

Përveç 160 imazheve, unë kapa 20 imazhe të tjera për të testuar rrjetin tonë pasi të jetë trajnuar.

Pasi grupi i të dhënave ishte gati, fillova të shkruaj kod për rrjetin nervor.

Hapi 5: Mjetet dhe gjuha e përdorur

Mjetet dhe gjuha e përdorur
Mjetet dhe gjuha e përdorur
Mjetet dhe gjuha e përdorur
Mjetet dhe gjuha e përdorur

Shkrova rrjetin tim nervor në bibliotekën e mësimit të thellë python të quajtur Keras dhe kodi është shkruar në fletoren jupyter nga anaconda navigator.

Hapi 6: Përgatitja e grupit të të dhënave për trajnim

Përgatitja e bazës së të dhënave për trajnim
Përgatitja e bazës së të dhënave për trajnim
Përgatitja e bazës së të dhënave për trajnim
Përgatitja e bazës së të dhënave për trajnim
Përgatitja e bazës së të dhënave për trajnim
Përgatitja e bazës së të dhënave për trajnim
Përgatitja e bazës së të dhënave për trajnim
Përgatitja e bazës së të dhënave për trajnim

Së pari (Imazhi #1) Kam përfshirë të gjitha bibliotekat e nevojshme për këtë projekt, i cili përfshin PIL, matplotlib, numpy, os dhe Keras. Në qelizën e dytë të fletores python (Imazhi #2) unë përcaktoj shtigjet për në grupin e të dhënave dhe printoj numrin e mostrave. Tani duhet të ngarkojmë të gjitha imazhet në një grup të mpirë, prandaj në qelizën e tretë (Imazhi #2) krijova një grup numpy prej 82 (numri i mostrës së dorës) +75 (numri i mostrës jo me dorë) dmth. 157x100x100x3. 157 është numri i përgjithshëm i imazheve që kam, 100x100 është dimensioni ynë i madhësisë së imazhit dhe 3 është për shtresat e ngjyrave të kuqe, jeshile dhe blu në imazh.

Në qelizën e katërt dhe të pestë, ne ngarkojmë imazhe që përmbajnë dorën e ndjekur nga imazhe që nuk përmbajnë dorë në grupin numpy. Në qelizën e gjashtë, ne ndajmë secilën vlerë me 255, duke kufizuar kështu gamën e vlerës nga 0 në 1. (Imazhi #3)

Më vjen keq nëse imazhet e bashkangjitura nuk janë mjaft të mira. Këtu është lidhja me depon GITHUB që të shikoni kodin. Mos harroni të zëvendësoni emrat e drejtorive të drejtorisë me rrugën tuaj:).

Duke lëvizur së bashku.

Tjetra ne duhet të etiketojmë çdo imazh, kështu që, ne krijojmë një grup numpin dimensional prej 157 në gjatësi. 82 hyrjet e para janë vendosur në 1 dhe 75 hyrjet e tjera janë vendosur në 0 duke përcjellë rrjetin nervor që 82 imazhet e para janë nga një klasë dhe të tjerat janë nga një tjetër. (Imazhi #4)

Tani le të krijojmë një rrjet nervor.

Hapi 7: Rrjeti nervor

Rrjeti nervor
Rrjeti nervor
Rrjeti nervor
Rrjeti nervor

Në qelizën e nëntë, ne përcaktojmë rrjetin tonë nervor. Ai përmban tre përsëritje të shtresës së rrotullimit të ndjekur nga shtresa maxpool me 8, 12 dhe 16 filtra konvolucioni respektivisht. Pas kësaj kemi dy rrjeta nervore të dendura. Bashkangjit dy imazhe për këtë hap. E para është kapja e kodit që krijon rrjetin nervor dhe e dyta është përfaqësimi piktural i rrjetit nervor me dimensionin e daljes dhe operacionet e shënuara.

Hapi 8: Trajnimi i Rrjetit Neural

Trajnimi i Rrjetit Neural
Trajnimi i Rrjetit Neural

Në qelizën e dhjetë, ne konfigurojmë optimizuesin e rrjetit nervor në 'adam' dhe funksionin e humbjes në 'binary_crossentropy'. Ato luajnë rol të madh në mënyrën se si azhurnohen peshat e rrjetit. Më në fund kur drejtojmë qelizën e njëmbëdhjetë, rrjeti nervor fillon të stërvitet. Ndërsa rrjeti është duke u trajnuar, shikoni funksionin e humbjes dhe sigurohuni që ai po zvogëlohet.

Hapi 9: Testimi i Rrjetit Neural

Testimi i Rrjetit Neural
Testimi i Rrjetit Neural

Pasi të trajnohet rrjeti nervor, ne duhet të përgatisim grupin e të dhënave të testit. Ne përsërisim procedurën e bërë për të përgatitur grupin e trajnimit në qelizën e 3 -të, të 4 -të, të 5 -të dhe të 6 -të në të dhënat e testit për të krijuar grup testimi. Ne gjithashtu përgatisim etiketë për grupin e testit, por këtë herë ne ekzekutojmë modelin në këto grupe të dhënash për të marrë parashikime dhe jo për t'u stërvitur.

Hapi 10: Rezultati dhe Pjesa Tjetër…

Rezultati dhe Pjesa Tjetër…
Rezultati dhe Pjesa Tjetër…

Kam marrë saktësinë e testit prej 88%, por merre këtë me një majë kripe pasi të dhënat e përdorura për të stërvitur dhe testuar këtë model janë shumë shumë të vogla dhe të papërshtatshme për të trajnuar siç duhet këtë model.

Gjithsesi shpresoj se ju ka pëlqyer ky artikull. Synimi im pas këtij ushtrimi nuk është ende i plotë dhe shikoni pjesën e dytë. Do ta ngarkoj sa më shpejt që të mundem.

Në pjesën tjetër, ne do të trajnojmë një rrjet tjetër nervor që do të na tregojë vendndodhjen e dorës në një imazh të zbuluar me dorë.

Të gjitha pyetjet janë të mirëseardhura.

Nëse dikush është i interesuar të përdor të dhënat e mia të vogla, më tregoni në komente. Do ta vë në dispozicion.

Faleminderit per leximin. Do të shihemi së shpejti me pjesën e dytë deri atëherë pse nuk krijoni dhe stërvitni një rrjet nervor.

Ndrysho:- Hapat e ardhshëm janë për pjesën e dytë.

Hapi 11: Zbulimi i objektit

Zbulimi i objekteve
Zbulimi i objekteve

Në hapat e mëparshëm ne krijuam një NN që na tregon nëse imazhi i testit përmban dorë apo jo. Epo, çfarë tjetër? Nëse NN klasifikon imazhin si dorën që përmban, ne do të donim të dinim vendndodhjen e dorës. Ky quhet zbulimi i objekteve në literaturën e vizionit kompjuterik. Pra, le të trajnojmë NN që bën saktësisht të njëjtën gjë.

Hapi 12: Video

Image
Image

Një video 3 minutëshe që shpjegon të gjitha hapat e mbetur. Hidhi nje sy.

Hapi 13: Etiketimi

Etiketimi
Etiketimi
Etiketimi
Etiketimi
Etiketimi
Etiketimi

Nëse dëshironi që një rrjet nervor të nxjerrë vendndodhjen e dorës, ne duhet ta stërvitim atë në një mënyrë të tillë, domethënë ndryshe nga rrjeti nervor i mëparshëm ku çdo imazh ishte etiketuar ose me dorë dhe pa dorë. Këtë herë të gjitha imazhet me dorë do të kenë katër etiketa që korrespondojnë me koordinatat diagonale të kutisë kufizuese rreth dorës në atë imazh.

Imazhi i bashkangjitur i skedarit csv përmban etiketë për secilën imazh. Ju lutemi vini re se koordinatat janë normalizuar me dimensionin e figurës, domethënë nëse koordinata e sipërme X është në pikselin 320 të imazhit me gjerësi 640 piksele, ne do ta etiketojmë atë si 0.5.

Hapi 14: Etiketimi i GUI

Etiketa GUI
Etiketa GUI
Etiketa GUI
Etiketa GUI
Etiketa GUI
Etiketa GUI
Etiketa GUI
Etiketa GUI

Ju mund të pyesni veten se si arrita të etiketoj të gjitha 82 imazhet, mirë unë shkrova një GUI në python që më ndihmoi me këtë detyrë. Pasi imazhi të ngarkohet në GUI. Unë klikova majtas në koordinatën e sipërme dhe kliko djathtas në koordinatën e poshtme të kutisë së mundshme të kufizimit rreth dorës. Këto koordinata më pas shkruhen në një skedar, pas së cilës klikoj butonin tjetër për të ngarkuar imazhin tjetër. E përsërita këtë procedurë për të gjitha 82 trenat dhe 4 imazhet e provës. Pasi etiketat ishin gati, ishte koha e stërvitjes.

Hapi 15: Kërkohen biblioteka

Nevojiten biblioteka
Nevojiten biblioteka
Nevojiten biblioteka
Nevojiten biblioteka
Nevojiten biblioteka
Nevojiten biblioteka

Së pari ne duhet të ngarkojmë të gjitha bibliotekat e nevojshme. Që përfshin

  • PIL për manipulimin e imazhit,
  • matplotlib për komplotimin,
  • i mpirë për funksionimin e matricës,
  • os për funksionalitetin e varur nga sistemi operativ dhe
  • keras për rrjetin nervor.

Hapi 16: Qelizat e mbetura

Qelizat e mbetura
Qelizat e mbetura
Qelizat e mbetura
Qelizat e mbetura
Qelizat e mbetura
Qelizat e mbetura
Qelizat e mbetura
Qelizat e mbetura

Në qelizën e dytë, të tretë, të katërt dhe të pestë ne i ngarkojmë imazhet në grupin numpy dhe krijojmë një grup katër dimensional nga skedari csv për të vepruar si etiketa. Në qelizën numër 6 ne krijojmë rrjetin tonë nervor. Arkitektura e tij është identike me rrjetin nervor të përdorur për klasifikim përveç dimensionit të shtresës dalëse i cili është 4 dhe jo 1. Një ndryshim tjetër vjen nga funksioni i humbjes i përdorur që është gabimi mesatar në katror. Në qelizën numër 8, ne fillojmë stërvitjen e rrjetit tonë nervor, pasi të stërvitem, e drejtova këtë model në grup provash për të marrë parashikime për kutinë kufizuese në koordinatat e mbivendosjes së kutisë kufizuese që dukeshin mjaft të sakta.

Faleminderit per leximin.

Recommended: