
Kazalo:
- Korak: Video
- 2. korak: Strojna oprema
- 3. korak: Del kode
- 4. korak: Pridobite slike
- 5. korak: Uporabljena orodja in jezik
- 6. korak: Priprava nabora podatkov za usposabljanje
- 7. korak: Nevronsko omrežje
- 8. korak: Usposabljanje nevronske mreže
- 9. korak: Testiranje nevronske mreže
- 10. korak: Rezultat in naslednji del…
- 11. korak: Zaznavanje predmetov
- 12. korak: Video
- 13. korak: Označevanje
- 14. korak: Označevanje grafičnega vmesnika
- Korak 15: Potrebne knjižnice
- Korak 16: Preostale celice
2025 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2025-01-23 15:09



Pred nekaj dnevi sem si v telovadnici poškodoval zapestje desne roke. Nato je vsakič, ko sem uporabljal računalniško miško, povzročil veliko bolečin zaradi strmega kota zapestja.
Takrat me je zadelo "ali ne bi bilo super, če bi lahko katero koli površino pretvorili v sledilno ploščico" in ne vem zakaj, ampak iz nekega razloga sem pomislil nanjo, na film HER, vam bom pustil, da ugotovite ven. To je bila vznemirljiva misel, vendar nisem vedel, ali bi to zmogel, zato sem se odločil, da poskusim.
Ta članek zajema, kaj je iz tega nastalo.
Preden začnemo, imam izjavo o omejitvi odgovornosti-
Na koncu tega članka nisem mogel pretvoriti nobene površine v sledilno ploščico, vendar se nisem veliko naučil in v svoj arzenal dodal velika orodja. Upam, da se bo to zgodilo tudi vam '
Začnimo.
Korak: Video


Tukaj je majhen 5 -minutni video, ki zajema vse korake. Poglej.
2. korak: Strojna oprema

Malinovo pi skupaj z malinovo kamero sem nastavil na višino približno 45 cm. Tako dobimo območje za spremljanje približno 25x25 cm pod kamero.
Malina pi in kamera maline pi sta zlahka na voljo, samo poiščite na Googlu in morali bi poiskati lokalno trgovino.
Oglejte si to povezavo ali enega od mojih seznamov predvajanja Raspberry pi, da se vaš pi brez glave zažene.
Po tej nastavitvi potrebujemo del kode, ki odloča, ali je na območju, ki ga nadzoruje kamera, roka in če je tako, kje je.
3. korak: Del kode


Kos kode, ki nam omogoča, da se odločimo, ali obstaja roka na področju interesa, uporablja nekaj, kar se imenuje nevronsko omrežje. Spadajo v kategorijo programiranja, kjer ne določimo pravil za odločanje, vendar pokažemo nevronskemu omrežju dovolj podatkov, da pravila sama določi.
V našem primeru namesto kodiranja, kako izgleda roka, prikažemo slike nevronskega omrežja, posnete iz maline pi, ki vsebujejo roko in ne vsebujejo roke. Ta faza se imenuje usposabljanje nevronske mreže, uporabljene slike pa se imenujejo nabor podatkov za usposabljanje.
4. korak: Pridobite slike

Oddaljeno sem se prijavil v svoj malin pi in z naslednjim ukazom posnel kup slik.
sudo raspistill -w 640 -h 480 -rot 90 -t 250000 -t1 5000 -o okvir%04d.jpg
Z roko sem posnel 80 slik in 80 slik, ki ne vsebujejo roke. 160 slik ni dovolj za ustrezno usposabljanje nevronske mreže, vendar bi moralo biti dovolj za dokaz koncepta.
Poleg 160 slik sem posnel še 20 slik, da preizkusim naše omrežje, ko bo usposobljeno.
Ko je bil nabor podatkov pripravljen, sem začel pisati kodo za nevronsko omrežje.
5. korak: Uporabljena orodja in jezik


Svoje nevronsko omrežje sem napisal v knjižnico za poglobljeno učenje Python, imenovano Keras, koda pa je napisana na prenosnem računalniku jupyter iz navigatorja anaconda.
6. korak: Priprava nabora podatkov za usposabljanje




Najprej (slika št. 1) sem vključil vse knjižnice, potrebne za ta projekt, ki vključuje PIL, matplotlib, numpy, os in Keras. V drugi celici prenosnega računalnika python (slika št. 2) definiram poti do nabora podatkov in natisnem število vzorcev. Zdaj moramo vse slike naložiti v matriko z numpy, zato sem v tretji celici (slika št. 2) ustvaril matrično polje z množico 82 (število vzorcev roke) +75 (število vzorcev, ki niso ročni), to je 157x100x100x3. 157 je skupno število slik, ki jih imam, 100x100 je naša dimenzija slike in 3 je za rdeče, zelene in modre barvne plasti na sliki.
V četrti in peti celici naložimo slike, ki vsebujejo roko, čemur sledijo slike, ki ne vsebujejo roke v matriki numpy. V šesti celici vsako vrednost razdelimo na 255, zato omejujemo obseg vrednosti od 0 do 1. (Slika #3)
Žal mi je, če priložene slike niso dovolj dobre. Tukaj je povezava do skladišča GITHUB, kjer si lahko ogledate kodo. Ne pozabite zamenjati imen poti imenika s svojo potjo:).
Premikanje skupaj.
Nato moramo označiti vsako sliko, zato ustvarimo enodimenzionalno matrično polje z dolžino 157. Prvih 82 vnosov je nastavljenih na 1, preostalih 75 vnosov pa na 0, ki prenašajo nevronsko omrežje, tako da je prvih 82 slik iz enega razreda, preostale pa iz drugega. (Slika #4)
Zdaj pa ustvarimo nevronsko mrežo.
7. korak: Nevronsko omrežje


V deveti celici definiramo svojo nevronsko mrežo. Vsebuje tri ponovitve sloja zvijanja, ki mu sledijo sloji maxpool z 8, 12 oziroma 16 zvitkovnimi filtri. Nato imamo dve gosti nevronski mreži. Za ta korak priložite dve sliki. Prvi je posnetek kode, ki ustvarja nevronsko mrežo, drugi pa slikovni prikaz nevronskega omrežja z izhodno dimenzijo in označenimi operacijami.
8. korak: Usposabljanje nevronske mreže

V deseti celici optimizacijo nevronskega omrežja konfiguriramo na 'adam', funkcijo izgube pa na 'binary_crossentropy'. Imajo pomembno vlogo pri posodabljanju uteži omrežja. Ko tečemo enajsto celico, se nevronska mreža začne trenirati. Med usposabljanjem omrežja poglejte funkcijo izgube in se prepričajte, da se zmanjšuje.
9. korak: Testiranje nevronske mreže

Ko je nevronsko omrežje usposobljeno, moramo pripraviti nabor testnih podatkov. Ponovimo postopek, pripravljen za pripravo vadbenega niza v 3., 4., 5. in 6. celici na testnih podatkih za izdelavo testnega niza. Za testni niz pripravimo tudi etiketo, vendar tokrat na teh podatkih zaženemo model, da dobimo napovedi in ne za trening.
10. korak: Rezultat in naslednji del…

Dobil sem 88 -odstotno natančnost preskusa, vendar vzemite to s ščepcem soli, saj je nabor podatkov, ki se uporablja za usposabljanje in preizkušanje tega modela, zelo zelo zelo majhen in ne zadostuje za ustrezno usposabljanje tega modela.
Kakorkoli, upam, da vam je bil ta članek všeč. Moj namen te vaje še ni dokončan in pazite na drugi del. Naložil jo bom čim prej.
V naslednjem delu bomo trenirali drugo nevronsko mrežo, ki nam bo povedala lokacijo roke na ročno zaznani sliki.
Vsa vprašanja so dobrodošla.
Če koga zanima uporaba mojega majhnega nabora podatkov, mi to sporočite v komentarjih. Dala ga bom na voljo.
Hvala za branje. Kmalu se vidimo z drugim delom do takrat. Zakaj ne ustvarite in usposobite nevronske mreže.
Edit:- Naslednji koraki so za drugi del.
11. korak: Zaznavanje predmetov

V prejšnjih korakih smo ustvarili NN, ki nam pove, ali preskusna slika vsebuje roko ali ne. No kaj potem? Če NN razvrsti sliko kot roko, bi radi vedeli njeno lokacijo. To se v literaturi o računalniškem vidu imenuje detekcija predmetov. Torej vadimo NN, ki dela popolnoma enako.
12. korak: Video


3 -minutni video, ki pojasnjuje vse preostale korake. Poglej.
13. korak: Označevanje



Če želite, da nevronsko omrežje oddaja lokacijo roke, ga moramo usposobiti, na primer za razliko od prejšnjega nevronskega omrežja, kjer je bila vsaka slika označena bodisi z roko ali brez roke. Tokrat bodo vse slike z roko imele štiri nalepke, ki ustrezajo diagonalnim koordinatam omejevalnega polja okoli roke na tej sliki.
Priložena slika datoteke csv vsebuje oznako za vsako sliko. Upoštevajte, da so koordinate normalizirane z dimenzijo slike, tj. Če je zgornja koordinata X na 320. slikovni piki na sliki s širino 640 slikovnih pik, jo bomo označili kot 0.5.
14. korak: Označevanje grafičnega vmesnika




Morda se sprašujete, kako mi je uspelo označiti vseh 82 slik, no, napisal sem grafični vmesnik v pythonu, ki mi je pomagal pri tej nalogi. Ko je slika naložena v grafičnem vmesniku. Z levo tipko miške kliknite na zgornjo koordinato in desni klik na spodnjo koordinato verjetnega omejevalnega polja okoli roke. Te koordinate se nato zapišejo v datoteko, po kateri kliknem gumb Naprej, da naložim naslednjo sliko. Ta postopek sem ponovil za vseh 82 posnetkov vlaka in 4 preskusne slike. Ko so bile nalepke pripravljene, je bil čas za usposabljanje.
Korak 15: Potrebne knjižnice



Najprej moramo naložiti vse potrebne knjižnice. Kar vsebuje
- PIL za manipulacijo slik,
- matplotlib za risanje,
- numpy za matrično delovanje,
- os za funkcionalnost, ki je odvisna od operacijskega sistema, in
- keras za nevronsko mrežo.
Korak 16: Preostale celice




V 2., 3., 4. in 5. celici naložimo slike v matriko numpy in ustvarimo štiridimenzionalno matriko iz datoteke csv, ki bo delovala kot oznake. V celici 6 ustvarimo svojo nevronsko mrežo. Njegova arhitektura je enaka nevronskemu omrežju, ki se uporablja za razvrščanje, razen dimenzije izhodne plasti, ki je 4 in ne 1. Druga razlika izhaja iz uporabljene funkcije izgube, ki je povprečna napaka na kvadrat. V celici številka 8 začnemo z usposabljanjem našega nevronskega omrežja, potem ko sem jo usposobil, sem ta model preizkusil na testnem nizu, da sem dobil napovedi za omejevalno polje na prekrivajočih se koordinatah omejevalne škatle, ki so bile videti precej natančne.
Hvala za branje.
Priporočena:
Robotska roka z Zio moduli 2. del: 11 korakov

Robotska roka z Zio moduli 2. del: V današnji vadnici bomo za krmiljenje robotske roke uporabili vse 4 servomotorje in brezžični krmilnik PS2. Ta objava na blogu je del serije Zio Robotics. Uvod V prejšnjem blogu smo objavili 1. del vadnica o tem, kako upravljati robotsko ar
Robotska roka ROS MoveIt 2. del: Robotski krmilnik: 6 korakov

Robotska roka ROS MoveIt, 2. del: Robotski krmilnik: https://github.com/AIWintermuteAI/ros-moveit-arm.git V prejšnjem delu članka smo ustvarili datoteke URDF in XACRO za našo robotsko roko in uvedli RVIZ za nadzor našega robotsko roko v simuliranem okolju. Tokrat bomo to storili z rea
KAKO SESTAVITI IMPRESIVNO LESENO Robotsko roko (3. del: Robotska roka) - NA MIKRO: BITN: 8 korakov

KAKO SESTAVITI IMPRESIVNO LESENO ROBOTSKO ROČE (3. DEL: ROBOTSKA ARMA) - NA MIKRO: BITN: Naslednji postopek namestitve temelji na zaključku načina izogibanja oviram. Postopek namestitve v prejšnjem razdelku je enak postopku namestitve v načinu sledenja linij. Potem si oglejmo končno obliko A
Robot za nevronsko omrežje Arduino: 21 korakov (s slikami)

Robot za nevronsko omrežje Arduino: Ta navodilo temelji na seriji iz treh delov, ki sem jo naredil za kanal YouTube, ki vam natančno pokaže, kako lahko prototipirate, oblikujete, sestavite in programirate svojega lastnega robota za nevronsko omrežje Arduino. Po ogledu celotne serije bi se morali boljše
Tretja roka ++: večnamenska roka za pomoč pri elektroniki in drugih občutljivih delih .: 14 korakov (s slikami)

Tretja roka ++: večnamenska roka za pomoč pri elektroniki in drugih občutljivih delih. Posnetkov nikoli nisem mogel dobiti točno tam, kjer sem jih želel, ali pa je trajalo več časa, kot bi bilo v resnici za namestitev