Bralci, kot ste vi, pomagajo podpirati MUO. Ko opravite nakup prek povezav na našem spletnem mestu, lahko zaslužimo partnersko provizijo. Preberi več.

Sledenje dlani je postopek uporabe računalniškega vida za zaznavanje in sledenje gibov roke osebe v realnem času. Najbolj prevladujoča uporaba sledenja rokam je v slušalkah za navidezno resničnost. Slušalke vam omogočajo uporabo rok za vnos namesto krmilnikov na dotik. To pa naredi izkušnjo bolj poglobljeno.

Ugotovite, kako slediti rokam osebe z uporabo Pythona, OpenCV za računalniški vid in MediaPipe.

Google je razvil ogrodje MediaPipe, ki vsebuje številne rešitve za strojno učenje. Ena od rešitev je rešitev za sledenje rokam in prstom, imenovana Roke MediaPipe. Za sledenje rokam MediaPipe Hands izvede dva postopka: zaznavanje dlani in zaznavanje mejnikov.

Zaznavanje dlani

MediaPipe začne z ugotavljanjem, kje so dlani na vhodni sliki. Ker je ocenjevanje mejnih okvirjev za trde predmete preprostejše kot prepoznavanje rok s sklepnimi prsti.

Zaznavanje orientacijskih točk

instagram viewer

Po zaznavi dlani MediaPipe izvede zaznavanje mejnikov rok. Model ročnega mejnika lahko napove 21 natančnih koordinat lokacije vsakega ročnega mejnika.

Številke predstavljajo edinstven identifikator za vsako znamenitost.

Nastavitev vašega okolja

Če želite slediti temu projektu, morate poznati osnove Pythona. V svoje okolje namestite naslednje knjižnice:

  • OpenCV: To knjižnico boste uporabljali za računalniški vid in izvajanje tehnik obdelave slik na vhodni sliki.
  • MediaPipe: to knjižnico boste uporabili za zaznavanje rok in sledenje na vhodni sliki.
  • imutils: to knjižnico boste uporabili za spreminjanje velikosti video okvirja vhoda.

Zaženite naslednji ukaz na svojem terminalu, da namestite knjižnice OpenCV, MediaPipe in imutils. Namestite pip—upravitelj paketov Python— če je potrebno. Poskrbite, da boste knjižnice posredovali kot s presledkom ločen seznam.

pip namestite OpenCV-Python MediaPipe imutils

Ko je posodobitev končana, je okolje pripravljeno za začetek kodiranja.

Celotna izvorna koda za ta projekt je na voljo v Repozitorij GitHub.

Uvažanje zahtevanih knjižnic

Uvoziti boste morali nameščene knjižnice, da jih boste lahko uporabljali. Odprite katero koli Python IDE, ustvarite datoteko Python in dodajte naslednje uvoze:

uvoz cv2
uvoz mediapipe kot mp
uvoz imutils

Prepričajte se, da uvozite OpenCV kot cv2 in MediaPipe z malimi črkami. Če tega ne storite, se prikaže napaka.

Uporabili boste mpHands za klic rešitve rok MediaPipe in predmet roke za zaznavanje in sledenje ročnega vnosa. Objekt mpDraw boste uporabili za risanje povezav med orientacijskimi točkami identificiranih rok.

mpHands = mp.solutions.hands
roke = mpHands. Roke()
mpDraw = mp.solutions.drawing_utils

Model rok MediaPipe lahko natančno prilagodite s posredovanjem različnih parametrov konstruktorju Hands(). Privzete vrednosti so dovolj dobre za ta projekt, vendar lahko eksperimentirate z njimi, da vidite, kako vplivajo na model:

Moral bi zapustiti način_statične_slike kot False, da zagotovite, da model enkrat zazna roke, preden jim začne slediti. Postopek sledenja ponovi le, če je zaupanje zaznavanja nižje od deklariranega parametra, zaradi česar je celotna obdelava vnosa hitrejša.

Izvajanje sledenja rok

Za izvajanje sledenja rokam potrebujete tri funkcije: eno za obdelavo vnosa, eno za risanje povezav mejnikov rok in glavno funkcijo za nadzor poteka programa.

Funkcija obdelave vnosa

Ta funkcija sprejme vnos, ga pretvori v sivine in ga posreduje modelu rok MediaPipe, da zazna in sledi rokam v vnosu.

# Obdelava vhodne slike
defprocesna_slika(img):
# Pretvarjanje vnosa v sivine
siva_slika = cv2.cvtColor (img, cv2.COLOR_BGR2RGB)
rezultati = hands.process (siva_slika)

# Vrnitev zaznanih rok v funkcijo klicanja
vrnitev rezultate

Funkcija vrne rezultate o tem, ali so bile pri vnosu zaznane roke.

Funkcija risanja povezav Handmark Landmark

Ta funkcija preveri, ali je funkcija obdelave vnosa zaznala roko. Če so zaznane roke, se zavihti čez vsako točko in nariše krog okoli nje, pri čemer sledi točki z uporabo Pythonova funkcija enumerate. Nato nariše povezave med orientacijskimi točkami na izvirnem video vhodu.

# Risanje mejnikov povezav
defrisanje_ročnih povezav(img, rezultati):
če rezultati.multi_hand_landmarks:
za roke v rezultati.multi_hand_landmarks:
za id, lm v naštej (handLms.landmark):
v, š, c = oblika slike

# Iskanje koordinat vsakega mejnika
cx, cy = int (lm.x * w), int (lm.y * h)

# Tiskanje vsakega ID-ja mejnika in koordinat
# na terminalu
natisni (id, cx, cy)

# Ustvarjanje kroga okoli vsake znamenitosti
cv2.krog (img, (cx, cy), 10, (0, 255, 0),
cv2.FILLED)
# Risanje povezav mejnikov
mpDraw.draw_landmarks (img, handLms,
mpHands. HAND_CONNECTIONS)

vrnitev img

Funkcija se začne z obkroženjem vsakega mejnika:

Nato nariše ročne povezave:

Končno vrne svoj izhod klicni funkciji.

Glavna funkcija

Ustvarite glavno funkcijo, ki bo nadzorovala potek vašega programa. Prevzel bo vhod in spremenil velikost video okvirja, da zagotovi skladnost izhoda. Posredujte vhod v funkcijo obdelave, ki bo nato zaznala in sledila rokam. Vrnjene rezultate prenesite v funkcijo risanja povezave orientacijskih točk, ki bo narisala povezavo na izvirnem video vhodu. Končno bo uporabniku prikazal izhod.

defglavni():
# Zamenjajte 0 z video potjo za uporabo a
# vnaprej posnet video
cap = cv2.VideoCapture(0)

medtemPrav:
# Sprejemanje vnosa
uspeh, slika = cap.read()
slika = imutils.resize (slika, širina=500, višina=500)
rezultati = procesna_slika (slika)
draw_hand_connections (slika, rezultati)

# Prikaz izhoda
cv2.imshow("Sledilnik rok", slika)

# Program se zaključi, ko pritisnete tipko q
če cv2.waitKey(1) == red('q'):
cap.release()
cv2.destroyAllWindows()

Zadnji korak je izvajanje vašega programa. Spodnja koda zagotavlja, da se ob zagonu programa najprej zažene glavna funkcija.

če __ime__ == "__glavni__":
glavni ()

Ko se program zažene, ustvari izhod, kot je ta:

Program spremlja roke v realnem času.

Sledenje rokam za poglobljeno virtualno resničnost

Sledenje rokam v virtualni resničnosti naredi tehnologijo bolj privlačno. Slušalke za navidezno resničnost so začele uvajati sledenje rokam, kar v virtualni svet prinaša občutek povečane resničnosti. Slušalke uporabniku omogočajo vnos ukazov z uporabo virtualne roke.

Sledenje rokam v virtualnih slušalkah je le ena od aplikacij te tehnologije. Sledenje rokam lahko vključite na katero koli področje, ki vam je všeč.