Čitatelji poput vas podržavaju MUO. Kada kupite putem poveznica na našoj stranici, možemo zaraditi partnersku proviziju. Čitaj više.

Praćenje ruku je proces korištenja računalnog vida za otkrivanje i praćenje pokreta ruke osobe u stvarnom vremenu. Najdominantnija primjena praćenja ruke je u slušalicama za virtualnu stvarnost. Slušalice vam omogućuju korištenje ruku kao unosa umjesto kontrolera na dodir. To zauzvrat čini iskustvo impresivnijim.

Saznajte kako pratiti ruke osobe koristeći Python, OpenCV za računalni vid i MediaPipe.

Google je razvio okvir MediaPipe koji sadrži mnoga rješenja za strojno učenje. Jedno od rješenja je rješenje za praćenje ruku i prstiju tzv MediaPipe ruke. Za praćenje ruku, MediaPipe Hands izvodi dva procesa: otkrivanje dlana i otkrivanje orijentira.

Detekcija dlana ruke

MediaPipe počinje identificiranjem gdje su dlanovi na ulaznoj slici. Budući da je procjena graničnih okvira za krute objekte jednostavnija od identifikacije ruku sa spojenim prstima.

Detekcija ručnih orijentira

instagram viewer

Nakon detekcije dlana, MediaPipe izvodi detekciju orijentira ruke. Model orijentira ruke može predvidjeti 21 preciznu koordinatu lokacije svakog orijentira ruke.

Brojevi predstavljaju jedinstveni identifikator za svaki orijentir.

Postavljanje vašeg okruženja

Da biste pratili ovaj projekt, trebali biste biti upoznati s osnove Pythona. Instalirajte sljedeće biblioteke u svoje okruženje:

  • OpenCV: Koristit ćete ovu biblioteku za računalni vid i izvođenje tehnika obrade slike na ulaznoj slici.
  • MediaPipe: Koristit ćete ovu biblioteku za izvođenje otkrivanja ruke i praćenja na ulaznoj slici.
  • imutils: Ovu biblioteku ćete koristiti za promjenu veličine video okvira ulaza.

Pokrenite sljedeću naredbu na svom terminalu da biste instalirali biblioteke OpenCV, MediaPipe i imutils. Instalirajte pip—Python upravitelj paketa— ako treba. Pobrinite se da proslijedite biblioteke kao popis odijeljen razmakom.

pip instalirajte OpenCV-Python MediaPipe imutils

Kada je ažuriranje dovršeno, okruženje je spremno za početak kodiranja.

Puni izvorni kod za ovaj projekt dostupan je u GitHub spremište.

Uvoz potrebnih biblioteka

Morat ćete uvesti biblioteke koje ste instalirali kako biste ih mogli koristiti. Otvori bilo koju Python IDE, izradite Python datoteku i dodajte sljedeće uvoze:

uvoz cv2
uvoz medijapipe kao mp
uvoz imutils

Provjerite jeste li uvezli OpenCV kao cv2 i MediaPipe malim slovima. Ako to ne učinite, pojavit će se pogreška.

Koristit ćete mpHands za pozivanje rješenja MediaPipe hands, a objekt hands za otkrivanje i praćenje unosa rukom. Koristit ćete objekt mpDraw za crtanje veza između orijentira identificiranih ruku.

mpRuke = mp.rješenja.ruke
ruke = mpRuke. Ruke()
mpDraw = mp.solutions.drawing_utils

Model ruku MediaPipe možete fino podesiti prosljeđivanjem različitih parametara konstruktoru Hands(). Zadane vrijednosti su dovoljno dobre za ovaj projekt, ali možete eksperimentirati s njima da vidite kako utječu na model:

Trebali biste napustiti način_statične_slike kao False kako bi se osiguralo da model jednom otkrije ruke prije nego što ih počne pratiti. Ponavlja proces praćenja samo ako pouzdanost detekcije padne niže od deklariranog parametra, čineći ukupnu obradu ulaza bržom.

Izvođenje praćenja ruke

Potrebne su vam tri funkcije za izvođenje praćenja ruke: jedna za obradu unosa, jedna za crtanje veza orijentira ruke i glavna funkcija za kontrolu tijeka programa.

Funkcija obrade ulaza

Ova funkcija uzima unos, pretvara ga u sive tonove i prosljeđuje ga MediaPipe modelu ruku za otkrivanje i praćenje ruku u unosu.

# Obrada ulazne slike
defslika_procesa(img):
# Pretvaranje unosa u sive tonove
siva_slika = cv2.cvtColor (img, cv2.COLOR_BGR2RGB)
rezultati = ruke.proces (siva_slika)

# Vraćanje detektiranih ruku na funkciju pozivanja
povratak rezultate

Funkcija vraća rezultate o tome je li bilo otkrivenih ruku na unosu.

Funkcija crtanja spojeva ručnih orijentira

Ova funkcija provjerava je li funkcija obrade unosa otkrila bilo kakve ruke. Ako ima otkrivenih ruku, prelazi preko svakog orijentira i iscrtava krug oko njega, prateći orijentir pomoću Pythonova funkcija nabrajanja. Zatim crta veze između orijentira na izvornom video ulazu.

# Crtanje veza orijentira
defcrtati_veze_ruke(img, rezultati):
ako rezultati.multi_hand_orijentiri:
za ruke u rezultati.multi_hand_orijentiri:
za id, lm u nabrojati (handLms.landmark):
h, w, c = sl.oblik

# Pronalaženje koordinata svakog orijentira
cx, cy = int (lm.x * w), int (lm.y * h)

# Ispis ID-a i koordinata svakog orijentira
# na terminalu
ispis (id, cx, cy)

# Stvaranje kruga oko svake znamenitosti
cv2.krug (img, (cx, cy), 10, (0, 255, 0),
cv2.FILLED)
# Crtanje orijentirnih veza
mpDraw.draw_landmarks (img, handLms,
mpRuke. HAND_CONNECTIONS)

povratak img

Funkcija počinje zaokruživanjem svakog orijentira:

Zatim crta ručne veze:

Na kraju vraća svoj izlaz pozivnoj funkciji.

Glavna funkcija

Napravite glavnu funkciju koja će kontrolirati tijek vašeg programa. Uzet će ulaz i promijeniti veličinu video okvira kako bi se osigurala dosljednost izlaza. Proslijedite ulaz funkciji obrade koja će zatim otkriti i pratiti ruke. Uzmite vraćene rezultate u funkciju crtanja veze ručnih orijentira koja će nacrtati vezu na izvornom video ulazu. Na kraju će prikazati rezultat korisniku.

defglavni():
# Zamijenite 0 s video stazom za korištenje a
# unaprijed snimljeni videozapis
cap = cv2.VideoCapture(0)

dokPravi:
# Uzimanje unosa
uspjeh, slika = cap.read()
slika = imutils.resize (slika, širina=500, visina=500)
rezultati = slika_procesa (slika)
draw_hand_connections (slika, rezultati)

# Prikaz izlaza
cv2.imshow("Tragač ruku", slika)

# Program se prekida kada se pritisne tipka q
ako cv2.waitKey(1) == red('q'):
cap.release()
cv2.destroyAllWindows()

Zadnji korak je pokretanje vašeg programa. Kôd u nastavku osigurava da se glavna funkcija prvo pokreće kada pokrenete program.

ako __ime__ == "__glavni__":
glavni()

Kada se program pokrene, proizvodi izlaz poput ovog:

Program prati ruke u stvarnom vremenu.

Praćenje ruke za impresivnu virtualnu stvarnost

Praćenje ruku u virtualnoj stvarnosti čini tehnologiju primamljivijom. Slušalice za virtualnu stvarnost počele su uvoditi praćenje ruku, donoseći osjećaj povećane stvarnosti u virtualni svijet. Slušalice omogućuju korisniku unos naredbi pomoću virtualne ruke.

Praćenje ruku u virtualnim slušalicama samo je jedna od primjena ove tehnologije. Praćenje ruku možete ugraditi u bilo koje primjenjivo područje po želji.