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
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č.