Læsere som dig hjælper med at støtte MUO. Når du foretager et køb ved hjælp af links på vores websted, kan vi optjene en affiliate-kommission. Læs mere.

Håndsporing er processen med at bruge computersyn til at registrere og følge bevægelser af en persons hånd i realtid. Den mest dominerende anvendelse af håndsporing er i virtual reality-headset. Headsettene giver dig mulighed for at bruge dine hænder som input i stedet for touch-controllere. Dette gør igen oplevelsen mere fordybende.

Find ud af, hvordan du sporer en persons hænder ved hjælp af Python, OpenCV til computersyn og MediaPipe.

Google udviklede MediaPipe frameworket, som indeholder mange maskinlæringsløsninger. En af løsningerne er hånd- og fingersporingsløsningen kaldet MediaPipe hænder. For at spore hænder udfører MediaPipe Hands to processer: håndfladegenkendelse og vartegnsdetektion.

Hånd Palm Detection

MediaPipe begynder med at identificere, hvor håndfladerne er i inputbilledet. Da estimering af afgrænsningskasser for stive genstande er enklere end at identificere hænder med ledte fingre.

instagram viewer

Detektion af håndlandemærker

Efter håndfladedetektering udfører MediaPipe håndmarkeringsdetektion. Håndvartegnsmodellen kan forudsige 21 præcise koordinater for placeringen af ​​hvert håndmærke.

Numrene repræsenterer en unik identifikator for hvert vartegn.

Opsætning af dit miljø

For at følge med i dette projekt, bør du være bekendt med det grundlæggende i Python. Installer følgende biblioteker i dit miljø:

  • OpenCV: Du vil bruge dette bibliotek til computervision og til at udføre billedbehandlingsteknikker på inputbilledet.
  • MediaPipe: Du vil bruge dette bibliotek til at udføre hånddetektering og sporing på inputbilledet.
  • imutils: Du skal bruge dette bibliotek for at ændre størrelsen på videorammen for input.

Kør følgende kommando på din terminal for at installere OpenCV-, MediaPipe- og imutils-bibliotekerne. Installer pip - Python-pakkehåndteringen- hvis du har brug for det. Sørg for at videregive bibliotekerne som en mellemrumssepareret liste.

pip installer OpenCV-Python MediaPipe imutils

Når opdateringen er færdig, er miljøet klar til, at du kan begynde at kode.

Den fulde kildekode til dette projekt er tilgængelig i dens GitHub-depot.

Import af de nødvendige biblioteker

Du skal importere de biblioteker, du har installeret, så du kan bruge dem. Åbn evt Python IDE, opret en Python-fil, og tilføj følgende importer:

importere cv2
importere mediapipe som smp
importere imutils

Sørg for at importere OpenCV som cv2 og MediaPipe med små bogstaver. Hvis du ikke gør det, vil det give en fejl.

Du vil bruge mpHands til at kalde MediaPipe-håndløsningen, og hænderne objekter til at registrere og spore håndinput. Du skal bruge mpDraw-objektet til at tegne forbindelserne mellem de identificerede hænders vartegn.

mpHands = mp.solutions.hænder
hænder = mpHands. Hænder()
mpDraw = mp.solutions.drawing_utils

Du kan finjustere MediaPipe-håndmodellen ved at overføre forskellige parametre til Hands()-konstruktøren. Standardværdierne er gode nok til dette projekt, men du kan eksperimentere med dem for at se, hvordan de påvirker modellen:

Du bør forlade static_image_mode som falsk for at sikre, at modellen registrerer hænderne én gang, før den begynder at spore dem. Den gentager kun sporingsprocessen, hvis detektionssikkerheden falder lavere end den deklarerede parameter, hvilket gør den samlede inputbehandling hurtigere.

Udførelse af håndsporing

Du skal bruge tre funktioner til at udføre håndsporing: en til at behandle input, en til at tegne håndens vartegnsforbindelser og en hovedfunktion til at styre programflowet.

Inputbehandlingsfunktion

Denne funktion tager inputtet, konverterer det til gråtoner og sender det til MediaPipe-håndmodellen for at registrere og spore hænderne i inputtet.

# Behandler inputbilledet
defproces_billede(img):
# Konvertering af input til gråtoner
grey_image = cv2.cvtColor (img, cv2.COLOR_BGR2RGB)
resultater = hands.process (grå_billede)

# Returnerer de registrerede hænder til opkaldsfunktionen
Vend tilbage resultater

Funktionen returnerer resultaterne af, om der var nogen registrerede hænder på inputtet.

Hand Landmark Connections Tegnefunktion

Denne funktion kontrollerer, om inputbehandlingsfunktionen har registreret nogen hænder. Hvis der er nogen registrerede hænder, sløjfer den over hvert vartegn og tegner en cirkel rundt om det og holder styr på vartegn ved hjælp af Pythons enumerate funktion. Den tegner derefter forbindelserne mellem vartegnene på den originale videoindgang.

# Tegning af skelsættende forbindelser
deftegne_håndforbindelser(img, resultater):
hvis results.multi_hand_landmarks:
til håndLms i results.multi_hand_landmarks:
til id, lm i opregne (håndLms.landmark):
h, w, c = img.form

# At finde koordinaterne for hvert vartegn
cx, cy = int (lm.x * w), int (lm.y * h)

# Udskrivning af hvert vartegn ID og koordinater
# på terminalen
print (id, cx, cy)

# Oprettelse af en cirkel omkring hvert vartegn
cv2.cirkel (img, (cx, cy), 10, (0, 255, 0),
cv2.FILLED)
# Tegning af skelsættende forbindelser
mpDraw.draw_landmarks (img, handLms,
mpHands. HAND_CONNECTIONS)

Vend tilbage img

Funktionen starter med at sætte en cirkel om hvert vartegn:

Den tegner derefter håndforbindelserne:

Det returnerer endelig sit output til den kaldende funktion.

Hovedfunktionen

Opret en hovedfunktion, der vil kontrollere flowet i dit program. Det tager inputtet og ændrer størrelsen på videorammen for at sikre konsistensen af ​​outputtet. Send inputtet til behandlingsfunktionen, som derefter registrerer og sporer hænderne. Tag de returnerede resultater til håndtegningsfunktionen for vartegnsforbindelse, som vil tegne forbindelsen på den originale videoindgang. Det vil endelig vise outputtet til brugeren.

defvigtigste():
# Erstat 0 med videostien for at bruge en
# forudindspillet video
cap = cv2.VideoCapture(0)

mensRigtigt:
# Modtager input
succes, billede = cap.read()
image = imutils.resize (billede, bredde=500, højde=500)
resultater = proces_billede (billede)
draw_hand_connections (billede, resultater)

# Viser output
cv2.imshow("Håndsporer", billede)

# Programmet afsluttes, når der trykkes på q-tasten
hvis cv2.waitKey(1) == ord('q'):
cap.release()
cv2.destroyAllWindows()

Det sidste trin er at køre dit program. Koden nedenfor sikrer, at når du kører programmet, kører hovedfunktionen først.

hvis __navn__ == "__main__":
hoved()

Når programmet kører, producerer det output som dette:

Programmet sporer hænderne i realtid.

Håndsporing til fordybende Virtual Reality

Håndsporing i virtual reality gør teknologien mere lokkende. Virtual reality-headset er begyndt at introducere håndsporing, hvilket bringer en følelse af øget virkelighed til den virtuelle verden. Headsettene giver brugeren mulighed for at indtaste kommandoer ved hjælp af en virtuel hånd.

Håndsporing i virtuelle headset er kun én anvendelse af denne teknologi. Du kan inkorporere håndsporing i ethvert relevant område efter din smag.