Sadržaj:

Je li to ruka? (Raspberry Pi kamera + neuronska mreža) 1/2 dio: 16 koraka (sa slikama)
Je li to ruka? (Raspberry Pi kamera + neuronska mreža) 1/2 dio: 16 koraka (sa slikama)

Video: Je li to ruka? (Raspberry Pi kamera + neuronska mreža) 1/2 dio: 16 koraka (sa slikama)

Video: Je li to ruka? (Raspberry Pi kamera + neuronska mreža) 1/2 dio: 16 koraka (sa slikama)
Video: Raspberry Pi 3: Камера (#1) – введение, подключение, базовые утилиты, TimeLapse, библиотека PiCamera 2024, Studeni
Anonim
Je li to ruka? (Raspberry Pi kamera + neuronska mreža) Dio 1/2
Je li to ruka? (Raspberry Pi kamera + neuronska mreža) Dio 1/2
Je li to ruka? (Raspberry Pi kamera + neuronska mreža) Dio 1/2
Je li to ruka? (Raspberry Pi kamera + neuronska mreža) Dio 1/2
Je li to ruka? (Raspberry Pi kamera + neuronska mreža) Dio 1/2
Je li to ruka? (Raspberry Pi kamera + neuronska mreža) Dio 1/2

Prije nekoliko dana ozlijedio sam zglob desne ruke u teretani. Nakon toga svaki put kad sam koristio računalni miš, uzrokovao je mnogo boli zbog strmog kuta zgloba.

Tada mi je palo na pamet "zar ne bi bilo sjajno da bilo koju površinu možemo pretvoriti u trackpad" i ne znam zašto, ali iz nekog sam razloga pomislio na nju, na film HER, dopustit ću vam da to shvatite van. Bila je to uzbudljiva misao, ali nisam znala mogu li to učiniti, odlučila sam pokušati.

Ovaj članak bilježi ono što je iz toga proizašlo.

Prije nego počnemo, odričem se odgovornosti-

'Na kraju ovog članka nisam mogao pretvoriti nijednu površinu u trackpad, ali nisam puno naučio i dodao veliki alat u svoj arsenal. Nadam se da će se to dogoditi i vama '

Započnimo.

Korak 1: Video

Image
Image

Ovdje je mali video zapis od 5 minuta koji pokriva sve korake. Pogledaj.

Korak 2: Hardver

Hardver
Hardver

Postavio sam malinu pi zajedno s kamerom maline pi na visini od oko 45 cm. To nam daje nadzorno područje od oko 25x25 cm ispod kamere.

Raspberry pi i malina pi kamera su lako dostupni, samo ih proguglajte i trebali biste pronaći lokalnu trgovinu.

Pogledajte ovu vezu ili neki od mojih popisa za reprodukciju Raspberry pi da biste pokrenuli svoj pi bez glave.

Nakon ovog postavljanja potreban nam je dio koda koji odlučuje ima li ruke u području koje kamera nadzire i ako ima gdje je.

Korak 3: Dio koda

Dio koda
Dio koda
Dio koda
Dio koda

Dio koda koji nam omogućuje da odlučimo postoji li ruka u području interesa koristi nešto što se zove neuronska mreža. Oni spadaju u kategoriju programiranja gdje ne definiramo pravila za donošenje odluka, ali mi prikazujemo neuronskoj mreži dovoljno podataka da ona sama utvrđuje pravila.

U našem slučaju, umjesto kodiranja izgleda ruke, prikazujemo slike neuronske mreže snimljene s maline pi koje sadrže ruku, a koje ne sadrže. Ova faza naziva se trening neuronske mreže, a korištene slike nazivaju se skupovi podataka za obuku.

Korak 4: Dobivanje slika

Dobivanje slika
Dobivanje slika

Daljinski sam se prijavio na svoj maline pi i snimio hrpu slika pomoću sljedeće naredbe.

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

Snimio sam 80 slika rukom i 80 slika koje ne sadrže ruku. 160 slika nije dovoljno za pravilno treniranje neuronske mreže, ali bi trebalo biti dovoljno za dokaz koncepta.

Osim 160 slika, snimio sam još 20 slika kako bih testirao našu mrežu nakon što se obuči.

Kad je skup podataka bio spreman, počeo sam pisati kôd za neuronsku mrežu.

Korak 5: Korišteni alati i jezik

Korišteni alati i jezik
Korišteni alati i jezik
Korišteni alati i jezik
Korišteni alati i jezik

Napisao sam svoju neuronsku mrežu u python biblioteci za duboko učenje koja se zove Keras, a kod je napisan na jupyter prijenosniku iz anaconda navigatora.

Korak 6: Priprema skupa podataka za obuku

Priprema skupa podataka za obuku
Priprema skupa podataka za obuku
Priprema skupa podataka za obuku
Priprema skupa podataka za obuku
Priprema skupa podataka za obuku
Priprema skupa podataka za obuku
Priprema skupa podataka za obuku
Priprema skupa podataka za obuku

Prvo (slika #1) uključio sam sve knjižnice potrebne za ovaj projekt, koji uključuje PIL, matplotlib, numpy, os i Keras. U drugoj ćeliji bilježnice Python (Slika #2) definiram putove do skupa podataka i ispisujem uzorak. Sada moramo učitati sve slike u niz numpy, stoga sam u trećoj ćeliji (slika #2) stvorio niz numpy od 82 (broj ručnog uzorka) +75 (broj uzorka koji nije ručni), tj. 157x100x100x3. 157 je ukupan broj slika koje imam, 100x100 je naša dimenzija slike promijenjene veličine, a 3 je za slojeve crvene, zelene i plave boje na slici.

U četvrtu i petu ćeliju učitavamo slike koje sadrže ruku, a zatim slike koje ne sadrže ruku u nizu numpy. U šestoj ćeliji dijelimo svaku vrijednost sa 255, stoga ograničava raspon vrijednosti od 0 do 1. (Slika #3)

Žao mi je ako priložene slike nisu dovoljno dobre. Ovdje je veza na GITHUB spremište za pregled koda. Ne zaboravite zamijeniti nazive staza direktorija sa svojim putem:).

Krećući se zajedno.

Zatim moramo označiti svaku sliku, pa stvaramo jednodimenzionalni numerički niz dužine 157. Prvih 82 unosa postavljeno je na 1, a preostalih 75 unosa postavljenih na 0 koji prenose neuronsku mrežu, tako da su prve 82 slike iz jedne klase, a preostale iz druge. (Slika #4)

Sada stvorimo neuronsku mrežu.

Korak 7: Neuronska mreža

Živčana mreža
Živčana mreža
Živčana mreža
Živčana mreža

U devetoj ćeliji definiramo svoju neuronsku mrežu. Sadrži tri ponavljanja sloja zavoja nakon čega slijede maxpool slojevi s 8, 12 i 16 filtera za zavoj. Nakon toga imamo dvije guste neuronske mreže. Prilažete dvije slike za ovaj korak. Prvi je snap koda koji stvara neuronsku mrežu, a drugi slikovni prikaz neuronske mreže s izlaznom dimenzijom i označenim operacijama.

Korak 8: Obuka neuronske mreže

Neuronska mreža za obuku
Neuronska mreža za obuku

U desetoj ćeliji optimiziranje neuronske mreže konfiguriramo na 'adam', a funkciju gubitka na 'binary_crossentropy'. Oni igraju veliku ulogu u ažuriranju težina mreže. Konačno, kad pokrenemo jedanaestu ćeliju, počinje se trenirati neuronska mreža. Dok mreža trenira, pogledajte funkciju gubitka i uvjerite se da se smanjuje.

Korak 9: Testiranje neuronske mreže

Testiranje neuronske mreže
Testiranje neuronske mreže

Nakon što se neuronska mreža osposobi, moramo pripremiti testne skupove podataka. Ponavljamo postupak napravljen za pripremu seta za obuku u 3., 4., 5. i 6. ćeliji na testnim podacima za izradu testnog skupa. Također pripremamo naljepnicu za testni skup, ali ovaj put pokrećemo model na tim skupovima podataka kako bismo dobili predviđanja, a ne za trening.

Korak 10: Rezultat i sljedeći dio…

Rezultat i sljedeći dio…
Rezultat i sljedeći dio…

Dobio sam točnost ispitivanja od 88%, ali uzmite ovo s prstohvatom soli jer su skupovi podataka koji se koriste za uvježbavanje i testiranje ovog modela vrlo vrlo vrlo mali i neodgovarajući za pravilno uvježbavanje ovog modela.

U svakom slučaju nadam se da vam se svidio ovaj članak. Moja namjera iza ove vježbe još nije dovršena i pripazite na drugi dio. Prenijet ću ga čim budem mogao.

U sljedećem dijelu trenirat ćemo drugu neuronsku mrežu koja će nam reći lokaciju ruke na slici otkrivenoj rukom.

Svi upiti su dobrodošli.

Ako je netko zainteresiran za korištenje mog malog skupa podataka, javite mi u komentarima. Učinit ću ga dostupnim.

Hvala na čitanju. Vidimo se uskoro s drugim dijelom do tada. Zašto ne stvorite i obučite neuronsku mrežu.

Edit:- Sljedeći koraci su za drugi dio.

Korak 11: Otkrivanje objekta

Otkrivanje objekata
Otkrivanje objekata

U prethodnim smo koracima stvorili NN koji nam govori sadrži li testna slika ruku ili ne. Pa što dalje? Ako NN klasificira sliku kao ruku koja sadrži, htjeli bismo znati gdje se nalazi ruka. To se u literaturi o računalnom vidu naziva detekcija objekata. Pa hajde da istreniramo NN koji radi potpuno isto.

Korak 12: Video

Image
Image

3 -minutni video koji objašnjava sve preostale korake. Pogledaj.

Korak 13: Označavanje

Označavanje
Označavanje
Označavanje
Označavanje
Označavanje
Označavanje

Ako želite da neuronska mreža emitira lokaciju ruke, moramo je trenirati na takav način, tj. Za razliku od prethodne neuronske mreže gdje je svaka slika označena kao s rukom ili bez ruke. Ovaj put će sve slike sa rukom imati četiri oznake koje odgovaraju dijagonalnim koordinatama graničnog okvira oko ruke na toj slici.

Priložena slika csv datoteke sadrži oznaku za svaku sliku. Imajte na umu da su koordinate normalizirane s dimenzijom slike, tj. Ako je gornja X koordinata na 320. pikselu na slici širine 640 piksela, označit ćemo je kao 0,5.

Korak 14: Označavanje GUI -ja

Označavanje GUI -ja
Označavanje GUI -ja
Označavanje GUI -ja
Označavanje GUI -ja
Označavanje GUI -ja
Označavanje GUI -ja
Označavanje GUI -ja
Označavanje GUI -ja

Možda se pitate kako sam uspio označiti svih 82 slike, pa napisao sam GUI u pythonu koji mi je pomogao u ovom zadatku. Nakon što se slika učita u GUI. Kliknuo sam lijevi klik na gornju koordinatu i desni klik na donju koordinatu vjerojatnog graničnog okvira oko ruke. Ove koordinate se zatim zapisuju u datoteku nakon čega ja kliknem gumb next za učitavanje sljedeće slike. Ponovio sam ovaj postupak za svih 82 slike vlaka i 4 probne slike. Kad su oznake bile spremne, došlo je vrijeme za obuku.

Korak 15: Potrebne knjižnice

Potrebne knjižnice
Potrebne knjižnice
Potrebne knjižnice
Potrebne knjižnice
Potrebne knjižnice
Potrebne knjižnice

Prvo moramo učitati sve potrebne knjižnice. Koje uključuje

  • PIL za manipulaciju slikom,
  • matplotlib za crtanje,
  • numpy za rad matrice,
  • os za funkcionalnost ovisnu o operacijskom sustavu i
  • keras za neuronsku mrežu.

Korak 16: Preostale ćelije

Preostale ćelije
Preostale ćelije
Preostale ćelije
Preostale ćelije
Preostale ćelije
Preostale ćelije
Preostale ćelije
Preostale ćelije

U 2., 3., 4. i 5. ćeliju učitavamo slike u numpy niz i stvaramo četverodimenzionalni niz iz csv datoteke koji će djelovati kao oznake. U ćeliji broj 6 stvaramo svoju neuronsku mrežu. Njegova je arhitektura identična neuronskoj mreži koja se koristi za klasifikaciju, osim dimenzije izlaznog sloja koja je 4, a ne 1. Druga razlika dolazi od korištene funkcije gubitka koja je srednja kvadratna pogreška. U ćeliji broj 8 započinjemo obuku naše neuronske mreže nakon što sam je obučio. Pokrenuo sam ovaj model na skupu testova kako bih dobio predviđanja za granični okvir na preklapajućim koordinatama graničnog okvira koji su izgledali prilično točno.

Hvala na čitanju.

Preporučeni: