Sadržaj:
- Korak 1: POTREBNE STVARI:
- Korak 2: NAČELO RADA:
- Korak 3: ULAZITE HVATANJE I OBRADU:
- Korak 4:
- 5. korak:
- Korak 6: DIO OBRADE:
- Korak 7:
- Korak 8:
- Korak 9:
- 10. korak:
- 11. korak:
- Korak 12: KONTROLA POKRETA:
- Korak 13:
Video: Jastreb gesta: Robot kontroliran pokretima rukom koji koristi sučelje za obradu slike: 13 koraka (sa slikama)
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:35
Gesture Hawk predstavljen je u TechEvince 4.0 kao jednostavno sučelje čovjek-stroj zasnovano na obradi slike. Njegova korisnost leži u činjenici da za upravljanje robotskim automobilom koji radi na principu diferencijalnog pogona nisu potrebni nikakvi dodatni senzori ili nosive rukavice osim rukavice. U ovom uputstvu provest ćemo vas kroz princip rada koji prati praćenje objekata i detekciju gesta koji se koriste u sustavu. Izvorni kod ovog projekta može se preuzeti s Githuba putem veze:
Korak 1: POTREBNE STVARI:
- Vozač motora L298N
- Motori istosmjerne struje
- Šasija robotskog automobila
- Arduino Uno
- LiPo baterije
- Arduino USB kabel (dugačak)
- Knjižnica OpenCV s Pythonom
Korak 2: NAČELO RADA:
Gesture Hawk je trofazni sustav obrade kao što možete vidjeti na gornjem dijagramu.
Korak 3: ULAZITE HVATANJE I OBRADU:
Hvatanje ulaza može se razumjeti u širim kategorijama datim u gornjem dijagramu.
Da bismo iz ruke izvukli oblik ruke, moramo koristiti maskiranje ili filtriranje određene boje (u ovom slučaju - ljubičasto plave boje). Da biste to učinili, morate pretvoriti sliku iz BGR u HSV format što se može učiniti pomoću sljedećeg isječka koda.
hsv = cv2.cvtBoja (okvir, cv2. COLOR_BGR2HSV)
Sljedeći korak je pronaći željeni raspon parametara HSV -a za izvlačenje ruke kroz masku ili filter. U tu svrhu najbolji je način da upotrijebite gusjenice za pronalaženje odgovarajućeg raspona. Evo snimke zaslona trake za praćenje korištene za ovaj projekt.
Korak 4:
5. korak:
Evo dolje navedenog isječka koda za izradu takve trake za izradu maski:
uvoz cv2
uvoz numpy kao npdef nothing (x): pass cv2. namedWindow ('image') img = cv2. VideoCapture (0) cv2.createTrackbar ('l_H', 'image', 110, 255, nothing) cv2.createTrackbar ('l_S ',' image ', 50, 255, nothing) cv2.createTrackbar (' l_V ',' image ', 50, 255, nothing) cv2.createTrackbar (' h_H ',' image ', 130, 255, nothing) cv2. createTrackbar ('h_S', 'image', 255, 255, nothing) cv2.createTrackbar ('h_V', 'image', 255, 255, nothing) while (1): _, frame = img.read ()
hsv = cv2.cvtColor (okvir, cv2. COLOR_BGR2HSV) lH = cv2.getTrackbarPos ('l_H', 'slika') lS = cv2.getTrackbarPos ('l_S', 'slika') lV = cv2.getTrackbarPos ('l_V', 'image') hH = cv2.getTrackbarPos ('h_H', 'image') hS = cv2.getTrackbarPos ('h_S', 'image') hV = cv2.getTrackbarPos ('h_V', 'image') lower_R = np. niz ([lH, lS, lV]) viši_R = np. niz ([hH, hS, hV]) maska = cv2.inRange (hsv, niži_R, viši_R) res = cv2.bitni_i (okvir, okvir, maska = maska) cv2.imshow ('image', res) k = cv2.waitKey (1) & 0xFF if k == 27: break cv2.destroyAllWindows ()
Korak 6: DIO OBRADE:
Pa, dobili smo geometrijski oblik ruke, sada je vrijeme da je iskoristimo i iskoristimo za utvrđivanje geste ruke.
Konveksni trup:
Kroz konveksni trup pokušavamo uklopiti približni poligon preko ekstremnih točaka prisutnih u obliku. Slika prisutna s lijeve strane prikazuje približni poligon koji je dodijeljen obliku s ispupčenim točkama označenim crvenom bojom.
Konveksne točke su one točke u obliku koje su najudaljenije od stranice ovog približnog poligona. No, problem s konveksnim trupom je taj što ćemo tijekom njegova izračuna dobiti niz svih konveksnih točaka, ali ono što nam je potrebno je plava šiljasta konveksna točka. Reći ćemo vam zašto je to potrebno.
Da bismo pronašli ovu konveksnu točku, moramo primijeniti formulu okomite udaljenosti za pronalaženje udaljenosti konveksne točke s najbližom stranom. Uočili smo da plava šiljasta točka ima maksimalnu udaljenost od strane i tako smo dobili ovu točku.
Korak 7:
Korak 8:
Zatim moramo pronaći nagib linije koja spaja vrh palca (ili krajnju točku) s ovom ispupčenom točkom s vodoravno.
Korak 9:
U gornjem slučaju, kut α trebao bi biti između 0 do 90 stupnjeva ako je gesta za skretanje ulijevo. To jest, tan (α) bi trebao biti pozitivan.
10. korak:
U gornjem slučaju, kut α trebao bi biti između 180 i 90 stupnjeva ako je gesta za desno skretanje. To jest, tan (α) bi trebao biti negativan.
Stoga, ako je Tan α pozitivan, tada skrenite ulijevo. Ako je Tan α negativan, tada skrenite udesno. Sada je vrijeme da vidimo kako otkriti najvažniju naredbu stop.
Ovdje se ispituje određeni omjer (utvrđen pogotkom i pokušajem), au najvećim slučajevima taj omjer udaljenosti ostaje u ovom određenom rasponu.
11. korak:
Konačno, pokret prema naprijed analizira funkcija matchShape () u OpenCV -u. Ova funkcija uspoređuje oblik dva brojača, u ovom slučaju, između primjera vježbanja na desnoj strani na gornjoj slici s konturom na lijevoj strani gornje slike. Vraća vrijednost u rasponu od 0 do 2 ili 3, ovisno o varijaciji u obliku dvije konture. Za identično istu konturu vraća 0.
ret = cv2.matchShapes (cnt1, cnt2, 1, 0.0)
Ovdje su cn1 i cnt2 dvije konture koje treba usporediti.
Korak 12: KONTROLA POKRETA:
PySerial:
Koristili smo PySerial knjižnicu pythona za pretvaranje obrađenih podataka u serijske podatke koji se komuniciraju s Arduino Uno putem Arduino USB kabela. Nakon što je opencv otkrio određenu gestu, stvorili smo privremenu varijablu recimo "x" i dodijelili joj jedinstvenu vrijednost i pretvorili je u serijski unos pomoću sljedeće naredbene linije:-
import serial #to import Pyserial library
serial. Serial ('', baudrate = '9600', timeout = '0') # postavljanje serijskog izlaza.. PORT NAME je naziv porta preko kojeg će se odvijati prijenos podataka.
serial.write (b'x ') # x je abeceda poslana na port … b treba pretvoriti ovaj niz u bajtove.
Arduino obrada:
Sada je arduino kodiran na takav način da se svaki drugačiji serijski x linearno preslikava na određenu radnju odgovornu za glatko kretanje robota (recimo otkrivanje geste lijevo će pokrenuti motore s desne strane da skrenu ulijevo). Kretanje svakog kotača možemo kontrolirati translacijski, kao i rotacijski, pravilnom promjenom koda.
L298N Vozač motora:-
Motor Driver koristi se kao posrednik između motora i izvora napajanja jer se motori ne mogu izravno napajati zbog niskog napona. Li-Po baterija spojena je na svoj 12V ulazni priključak i povezujemo arduinovu 5V utičnicu s 5V ulaznom utičnicom vozača motora konačno povezujući uzemljenje Li-Po-a, kao i arduino u zajedničku uzemljenu utičnicu upravljačkog programa motora.
Sada su terminali motora spojeni na dane utičnice. Na kraju povezujemo ulazne stezaljke za motor s PWM izlaznim utičnicama arduina, dopuštajući nam da slobodno odlučujemo o rotacijskim i translacijskim aspektima kretanja.
Preporučeni:
Robot kontroliran pokretima pomoću Arduina: 7 koraka
Robot kontroliran pokretima pomoću Arduina: Roboti se koriste u mnogim sektorima poput građevinarstva, vojske, proizvodnje, montaže itd. Roboti mogu biti autonomni ili poluautonomni. Autonomni roboti ne zahtijevaju nikakvu ljudsku intervenciju i mogu djelovati sami u skladu s situacijom. Vidi
Miš kontroliran pokretima: 6 koraka (sa slikama)
Miš kontroliran pokretima: Gledate film sa svojim prijateljima na prijenosnom računalu, a jedan od momaka se zaljubi. Ahh .. morate sići sa svog mjesta da biste pauzirali film. Dajete prezentaciju na projektoru i morate se prebacivati između aplikacija. Morate se pomaknuti
Labirint kontroliran pokretima: 8 koraka (sa slikama)
Labirint kontroliran pokretima: Volim se igrati s labirintom labirinta. Oduvijek sam želio kontrolirati jednu od onih labirintnih igara labirintom pokretima ili mobilnim telefonom. Inspirirao sam se za stvaranje ovog mramornog labirinta blic19933 3D printanim labirintom kojim upravlja vaš Android uređajUmjesto
Arduino LED gumb s gumbima koji pokreće obradu animacija: 36 koraka (sa slikama)
Arduino LED gumb s gumbima koji pokreće obradu animacija: Ovaj gumb s jastučićima izrađen je od PCB -a i drugih komponenti koje proizvodi Sparkfun. Vozi ga Arduino Mega. Svaki gumb lijep je i mekan i zadovoljavajući za pritiskanje, a unutra ima RGB LED! Koristila sam ga za kontrolu animacija
Uvod u obradu slike: Pixy i njegove alternative: 6 koraka
Uvod u obradu slika: Pixy i njegove alternative: U ovom ćemo članku objasniti značenje digitalne obrade slika (DIP) i razloge korištenja hardvera poput Pixyja i drugih alata za izradu slika ili video zapisa. Na kraju ovog članka naučit ćete: Kako nastaje digitalna slika