Cuprins:
- Pasul 1: Video
- Pasul 2: Hardware
- Pasul 3: Bucată de cod
- Pasul 4: Obținerea de imagini
- Pasul 5: Instrumente și limbă utilizate
- Pasul 6: Pregătirea setului de date pentru instruire
- Pasul 7: Rețea neuronală
- Pasul 8: Antrenarea rețelei neuronale
- Pasul 9: Testarea rețelei neuronale
- Pasul 10: Rezultat și partea următoare…
- Pasul 11: Detectarea obiectelor
- Pasul 12: Video
- Pasul 13: Etichetare
- Pasul 14: Etichetarea GUI
- Pasul 15: Biblioteci necesare
- Pasul 16: Celulele rămase
Video: Este asta o mână? (Camera Raspberry Pi + Rețea neuronală) Partea 1/2: 16 pași (cu imagini)
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:45
Acum câteva zile, mi-am rănit încheietura mâinii drepte la sala de sport. Ulterior, de fiecare dată când am folosit mouse-ul computerului, a cauzat multă durere din cauza unghiului abrupt al încheieturii mâinii.
Atunci m-a lovit „nu ar fi grozav dacă am putea converti orice suprafață într-un trackpad” și nu știu de ce, dar dintr-un anumit motiv m-am gândit la ea, la filmul HER, vă voi lăsa să vă dați seama afară. A fost un gând emoționant, dar nu știam dacă aș putea să-l fac, am decis să încerc.
Acest articol surprinde ceea ce a ieșit din el.
Înainte de a începe, am un disclaimer-
„La sfârșitul acestui articol, nu puteam converti nicio suprafață într-un trackpad, dar nu învățam multe și adăugam instrumente mari arsenalului meu. Sper că ți se întâmplă și ție
Să începem.
Pasul 1: Video
Iată un minuscul videoclip de 5 minute care acoperă toți pașii. Aruncă o privire.
Pasul 2: Hardware
Am configurat un raspberry pi împreună cu camera raspberry pi la o înălțime de aproximativ 45 cm. Acest lucru ne oferă o suprafață de monitorizare de aproximativ 25x25 cm sub cameră.
Raspberry pi și camera raspberry pi sunt ușor disponibile, doar google-l și ar trebui să puteți găsi un magazin local.
Aruncați o privire la acest link sau una dintre listele mele de redare Raspberry pi pentru a vă pune în funcțiune pi-ul fără cap.
După această configurare, avem nevoie de o bucată de cod care să decidă dacă există o mână în zona pe care camera o monitorizează și dacă da unde este.
Pasul 3: Bucată de cod
O bucată de cod care ne permite să decidem dacă există o zonă de interes utilizează ceva numit Neural Network. Acestea se încadrează în categoria de programare în care nu definim reguli pentru a lua decizii, dar arătăm rețelelor neuronale suficiente date pentru a stabili regulile singure.
În cazul nostru, în loc să codificăm cum arată mâna, prezentăm imagini de rețea neuronală capturate din zmeură pi care conține mână și care nu conține mână. Această fază se numește formarea rețelei neuronale, iar imaginile utilizate sunt denumite seturi de date de formare.
Pasul 4: Obținerea de imagini
M-am conectat la distanță la raspberry pi și am capturat o grămadă de imagini folosind următoarea comandă.
sudo raspistill -w 640 -h 480 -rot 90 -t 250000 -t1 5000 -o cadru% 04d.jpg
Am capturat 80 de imagini cu mâna și 80 de imagini care nu conțin mâna. 160 de imagini nu sunt suficiente pentru a antrena corect o rețea neuronală, dar ar trebui să fie suficiente pentru dovada conceptului.
Pe lângă 160 de imagini, am capturat încă 20 de imagini pentru a testa rețeaua noastră odată ce a fost antrenată.
Odată ce setul de date a fost gata, am început să scriu cod pentru rețeaua neuronală.
Pasul 5: Instrumente și limbă utilizate
Mi-am scris rețeaua neuronală într-o bibliotecă Python Deep Learning numită Keras și codul este scris pe notebook-ul jupyter de la navigatorul anaconda.
Pasul 6: Pregătirea setului de date pentru instruire
În primul rând (Imaginea # 1) Am inclus toate bibliotecile necesare pentru acest proiect, care include PIL, matplotlib, numpy, os și Keras. În a doua celulă a blocnotesului Python (Imaginea # 2) definesc căile către setul de date și imprim numărul de eșantioane. Acum trebuie să încărcăm toate imaginile într-o matrice numpy, prin urmare, în a treia celulă (imaginea # 2) am creat o matrice numpy de 82 (numărul de eșantion manual) +75 (numărul de eșantion non-manual) adică 157x100x100x3. 157 este numărul total de imagini pe care le am, 100x100 este dimensiunea redimensionată a imaginii și 3 este pentru straturile de culoare roșu, verde și albastru din imagine.
În a patra și a cincea celulă, încărcăm imagini care conțin mână urmate de imagini care nu conțin mână în matricea numpy. În cea de-a șasea celulă, împărțim fiecare valoare la 255, deci limităm intervalul de valori de la 0 la 1. (Imaginea # 3)
Îmi pare rău dacă imaginile atașate nu sunt suficient de bune. Aici este un link către depozitul GITHUB pentru a vedea codul. Nu uitați să înlocuiți numele căilor de director cu calea dvs.:).
Se deplasează de-a lungul.
Apoi trebuie să etichetăm fiecare imagine, deci creăm o matrice unidimensională numpy de 157 în lungime. Primele 82 de intrări sunt setate la 1, iar restul de 75 de intrări sunt setate la 0, care transmit rețeaua neuronală, primele 82 de imagini provin dintr-o clasă și restul provin din alta. (Imaginea # 4)
Acum să creăm o rețea neuronală.
Pasul 7: Rețea neuronală
În a noua celulă, ne definim rețeaua neuronală. Conține trei repetări ale stratului de convoluție urmate de straturi maxpool cu 8, 12 și respectiv 16 filtre de convoluție. În continuare, avem două plase neuronale dense. Atașarea a două imagini pentru acest pas. În primul rând este captura de cod care creează rețea neuronală și a doua este reprezentarea picturală a rețelei neuronale cu dimensiunea de ieșire și operațiile adnotate.
Pasul 8: Antrenarea rețelei neuronale
În a zecea celulă, configurăm optimizatorul de rețea neuronală la „Adam” și funcția de pierdere la „binary_crossentropy”. Acestea joacă un rol major în actualizarea ponderilor rețelei. În cele din urmă, atunci când rulăm celula a unsprezecea, rețeaua neuronală începe să se antreneze. În timp ce rețeaua se antrenează, uitați-vă la funcția de pierdere și asigurați-vă că aceasta scade.
Pasul 9: Testarea rețelei neuronale
Odată ce rețeaua neuronală este antrenată, trebuie să pregătim setul de date de testare. Repetăm procedura făcută pentru a pregăti setul de antrenament în celulele 3, 4, 5 și 6 pe datele de testare pentru a crea setul de testare. De asemenea, pregătim eticheta pentru setul de testare, dar de data aceasta rulăm modelul pe aceste seturi de date pentru a obține predicții și nu pentru a ne antrena.
Pasul 10: Rezultat și partea următoare…
Am o acuratețe a testului de 88%, dar iau acest lucru cu un vârf de sare, deoarece setul de date folosit pentru antrenament și testarea acestui model sunt foarte foarte foarte mici și inadecvate pentru a antrena corect acest model.
Oricum sper să vă fi plăcut acest articol. Intenția mea din spatele acestui exercițiu nu este încă completă și ai grijă la a doua parte. Îl voi încărca cât de repede pot.
În partea următoare, vom instrui o altă rețea neuronală care ne va spune locația mâinii într-o imagine detectată manual.
Toate interogările sunt binevenite.
Dacă cineva este interesat să folosească micul meu set de date, anunțați-mă în comentarii. Îl voi pune la dispoziție.
Mulțumesc pentru lectură. Ne vedem în curând cu a doua parte până atunci de ce nu creezi și nu antrenezi o rețea neuronală?
Editați: - Pașii următori sunt pentru a doua parte.
Pasul 11: Detectarea obiectelor
În pașii anteriori am creat un NN care ne spune dacă imaginea de testare conține mână sau nu. Ei bine, ce urmează? Dacă NN clasifică imaginea ca conținând mâna, am dori să aflăm locația mâinii. Aceasta se numește detectarea obiectelor în literatura de viziune pe computer. Deci, să antrenăm NN care face exact același lucru.
Pasul 12: Video
Un videoclip de 3 minute care explică toți pașii rămași. Aruncă o privire.
Pasul 13: Etichetare
Dacă doriți ca o rețea neuronală să scoată locația mâinii, trebuie să o antrenăm într-o astfel de manieră, adică spre deosebire de rețeaua neuronală anterioară în care fiecare imagine a fost etichetată fie cu mână, fie fără mână. De această dată, toate imaginile cu mâna vor avea patru etichete corespunzătoare coordonatelor diagonale ale casetei de delimitare în jurul mâinii din acea imagine.
Imaginea atașată a fișierului CSV conține etichetă pentru fiecare imagine. Rețineți că coordonatele sunt normalizate cu dimensiunea imaginii, adică dacă coordonatele X superioare sunt la 320 de pixeli în imaginea cu lățimea de 640 pixeli, o vom eticheta ca 0,5.
Pasul 14: Etichetarea GUI
S-ar putea să vă întrebați cum am reușit să etichetez toate cele 82 de imagini, ei bine, am scris un GUI în python care m-a ajutat cu această sarcină. Odată ce imaginea este încărcată în GUI. Am făcut clic stânga la coordonata superioară și clic dreapta la coordonata inferioară a casetei de delimitare probabile din jurul mâinii. Aceste coordonate sunt apoi scrise într-un fișier după care fac clic pe butonul Următor pentru a încărca următoarea imagine. Am repetat această procedură pentru toate cele 82 de trenuri și 4 imagini de testare. Odată ce etichetele erau gata, era timpul de antrenament.
Pasul 15: Biblioteci necesare
Mai întâi trebuie să încărcăm toate bibliotecile necesare. Care include
- PIL pentru manipularea imaginii,
- matplotlib pentru complot,
- numpy pentru operarea matricei,
- OS pentru funcționalitatea dependentă de sistemul de operare și
- kere pentru rețeaua neuronală.
Pasul 16: Celulele rămase
În a 2-a, a 3-a, a 4-a și a 5-a celulă încărcăm imagini în matrice numpy și creăm o matrice cu patru dimensiuni din fișierul CSV pentru a acționa ca etichete. În celula numărul 6 creăm rețeaua noastră neuronală. Arhitectura sa este identică cu rețeaua neuronală utilizată pentru clasificare, cu excepția dimensiunii stratului de ieșire care este 4 și nu 1. O altă diferență vine de la funcția de pierdere utilizată, care este eroarea pătrată medie. În celula numărul 8 începem antrenamentul rețelei noastre neuronale odată ce am fost antrenat. Am rulat acest model pe setul de testare pentru a obține predicții pentru caseta de delimitare pe coordonatele suprapuse ale casetei de delimitare, au arătat destul de precise.
Mulțumesc pentru lectură.
Recomandat:
Planetariu alimentat de rețea neuronală folosind Python, Electron și Keras: 8 pași
Planetariu alimentat de rețea neuronală folosind Python, Electron și Keras: În acest instructable, vă voi arăta cum am scris un generator automat de planetariu 3D, folosind Python și Electron. Videoclipul de mai sus arată unul dintre planetariile aleatorii pe care le-a generat programul. ** Notă: Acest program nu este în niciun caz perfect și într-un anumit loc
Nike LED Swoosh! Acesta este un decor minunat pentru o cameră. Acesta este singurul proiect pe care toată lumea îl poate repeta: 5 pași
Nike LED Swoosh! Acesta este un decor minunat pentru o cameră. Acesta este singurul proiect pe care toată lumea îl poate repeta.: Instrumente -banda de măsurat-șurubelniță-fier de lipit-ferăstrău-ferăstrău-burghie electrică-șmirghel Furnizor -Banda LED (RGB) 5m-controler cu LED-Alimentare 12V 4A-cherestea 50-50-1500 2x-cherestea 20-20-3000 2x-placaj 500-1000mm-șuruburi (45mm) 150x-șuruburi (35mm) 30x-scr
Puteți face asta cu o atingere KIndle ?: 15 pași (cu imagini)
Poți face asta cu o atingere KIndle ?: Nu aș putea înțelege niciodată de ce ar vrea cineva să dețină un e-Reader. Apoi, copiii mei mari mi-au dat un Kindle Touch și am găsit modalități de a-l face să facă pentru mine o mare parte din ceea ce face un telefon inteligent sau un iPad pentru alte persoane. Într-o zi, îmi va înlocui îmbătrânirea
Controler de rețea IoT. Partea 9: IoT, Home Automation: 10 pași (cu imagini)
Controler de rețea IoT. Partea 9: IoT, Home Automation: Declinare de responsabilitate CITIȚI ACEST PRIM: Acest instructabil detaliază un proiect care folosește rețeaua de alimentare (în acest caz, 240VAC RMS din Marea Britanie), în timp ce s-a acordat o atenție deosebită utilizării practicii sigure și a principiilor bune de proiectare, există întotdeauna un risc de potențial letal. alege
Robot de rețea neuronală Arduino: 21 de pași (cu imagini)
Robot de rețea neuronală Arduino: Acest instructable se bazează pe o serie din 3 părți realizată pentru canalul Make YouTube, care vă arată exact cum să prototipați, să proiectați, să asamblați și să programați propriul robot de rețea neuronală Arduino. După ce urmăriți seria completă, ar trebui să aveți un bette