Sadržaj:

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

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

Video: Je li to ruka? (Raspberry Pi kamera + neuronska mreža) Dio 1/2: 16 koraka (sa slikama)
Video: Raspberry Pi 3: Камера (#1) – введение, подключение, базовые утилиты, TimeLapse, библиотека PiCamera 2024, Novembar
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čunarski miš, to je uzrokovalo 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 razloga pomislio sam na nju, film ONA, dopustit ću vam da shvatite van. Bila je to uzbudljiva misao, ali nisam znala mogu li to učiniti, odlučila sam pokušati.

Ovaj članak prikazuje 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 '

Hajde da počnemo.

Korak 1: Video zapis

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 sa kamerom maline pi na visini od oko 45 cm. To nam daje površinu za nadzor 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 neku od mojih Raspberry pi playlista da pokrenete 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 kako izgleda ruka, prikazujemo slike neuronske mreže snimljene sa 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: Dobijanje slika

Getting Images
Getting Images

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 kod 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 prijenosnom računaru 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 biblioteke potrebne za ovaj projekat, uključujući PIL, matplotlib, numpy, os i Keras. U drugoj ćeliji python bilježnice (Slika #2) definiram putanje do skupa podataka i ispisujem uzorak. Sada moramo učitati sve slike u niz numpy, stoga sam u trećoj ćeliji (slika #2) stvorio numerički niz 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 sa promijenjenom veličinom, a 3 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 svaku vrijednost dijelimo sa 255, stoga ograničava raspon vrijednosti od 0 do 1. (Slika #3)

Žao mi je ako priložene slike nisu dovoljno dobre. Evo veze do GITHUB spremišta za pregled koda. Ne zaboravite zamijeniti nazive putanje direktorija svojom stazom:).

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 je postavljeno na 0 za prijenos neuronske mreže, tako da su prve 82 slike iz jedne klase, a preostale iz druge. (Slika #4)

Sada napravimo neuronsku mrežu.

Korak 7: Neuronska mreža

Neuronska mreža
Neuronska mreža
Neuronska mreža
Neuronska mreža

U devetoj ćeliji definiramo našu neuronsku mrežu. Sadrži tri ponavljanja sloja konvolucije nakon čega slijede maxpool slojevi s 8, 12 i 16 filtera konvolucije. 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 sa 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 optimizator neuronske mreže konfiguriramo na 'adam', a funkciju gubitka na 'binary_crossentropy'. Oni igraju važnu ulogu u ažuriranju težine mreže. Konačno, kad pokrenemo jedanaestu ćeliju, neuronska mreža počinje trenirati. 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 obuči, moramo pripremiti skup podataka za testiranje. Ponavljamo postupak za pripremu seta za obuku u 3., 4., 5. i 6. ćeliji o testnim podacima za kreiranje testnog skupa. Pripremamo i naljepnicu za testni skup, ali ovaj put pokrećemo model na tim skupovima podataka kako bismo dobili predviđanja, a ne za obuku.

Korak 10: Rezultat i sljedeći dio…

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

Dobio sam tačnost testiranja od 88%, ali uzmite ovo sa prstohvatom soli jer su skupovi podataka koji se koriste za obuku i testiranje ovog modela vrlo vrlo vrlo mali i neadekvatni za odgovarajuću obuku ovog modela.

U svakom slučaju nadam se da vam se dopao ovaj članak. Moja namjera iza ove vježbe još nije dovršena i pazite na drugi dio. Postavit ć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 neko zainteresiran za korištenje mog malog skupa podataka, javite mi u komentarima. Učinit ću to 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 objekata

Object Detection
Object Detection

U prethodnim koracima smo kreirali NN koji nam govori sadrži li test slika kazaljku ili ne. Pa šta dalje? Ako NN klasificira sliku kao ruku koja sadrži, željeli bismo znati lokaciju ruke. To se u literaturi o računarskom 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 obučiti na takav način, tj. Za razliku od prethodne neuronske mreže gdje je svaka slika označena ručno 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. Pritisnuo sam lijevi klik na gornju koordinatu i desni klik na donju koordinatu vjerovatno ograničavajućeg okvira oko ruke. Ove koordinate se zatim zapisuju u datoteku nakon čega kliknem na dugme next da učitam sljedeću sliku. Ponovio sam ovaj postupak za svih 82 slike voza i 4 probne slike. Kad su etikete bile spremne, došlo je vrijeme za obuku.

Korak 15: Potrebne biblioteke

Potrebne biblioteke
Potrebne biblioteke
Potrebne biblioteke
Potrebne biblioteke
Potrebne biblioteke
Potrebne biblioteke

Prvo moramo učitati sve potrebne biblioteke. Što uključuje

  • PIL za manipulaciju slikom,
  • matplotlib za crtanje,
  • numpy za rad matrice,
  • os za funkcionalnost zavisnu od operativnog sistema 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 arhitektura je 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 greš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čnu kutiju na preklapajuće koordinate granične kutije, izgledali su prilično precizno.

Hvala na čitanju.

Preporučuje se: