Leser wie Sie helfen, MUO zu unterstützen. Wenn Sie über Links auf unserer Website einen Kauf tätigen, erhalten wir möglicherweise eine Affiliate-Provision. Weiterlesen.

Handtracking ist der Prozess der Verwendung von Computer Vision, um die Bewegungen der Hand einer Person in Echtzeit zu erkennen und zu verfolgen. Die dominanteste Anwendung des Handtrackings sind Virtual-Reality-Headsets. Mit den Headsets können Sie anstelle von Touch-Controllern Ihre Hände als Eingabe verwenden. Dies wiederum macht das Erlebnis immersiver.

Finden Sie heraus, wie Sie die Hände einer Person mit Python, OpenCV für Computer Vision und MediaPipe verfolgen können.

Google hat das MediaPipe-Framework entwickelt, das viele maschinelle Lernlösungen enthält. Eine der Lösungen ist die sogenannte Hand- und Fingertracking-Lösung MediaPipe-Hände. Um Hände zu verfolgen, führt MediaPipe Hands zwei Prozesse durch: Handflächenerkennung und Landmarkenerkennung.

Handflächenerkennung

MediaPipe beginnt damit, zu identifizieren, wo sich die Handflächen im Eingabebild befinden. Da das Schätzen von Begrenzungsrahmen für steife Objekte einfacher ist als das Identifizieren von Händen mit gegliederten Fingern.

instagram viewer

Erkennung von Hand-Orientierungspunkten

Nach der Handflächenerkennung führt MediaPipe die Erkennung von Hand-Orientierungspunkten durch. Das Hand-Markenzeichen-Modell kann 21 genaue Koordinaten der Position jedes Hand-Markenzeichens vorhersagen.

Die Zahlen stellen eine eindeutige Kennung für jeden Orientierungspunkt dar.

Einrichten Ihrer Umgebung

Um dieses Projekt mitzuverfolgen, sollten Sie mit dem vertraut sein Grundlagen von Python. Installieren Sie die folgenden Bibliotheken in Ihrer Umgebung:

  • OpenCV: Sie verwenden diese Bibliothek für Computer Vision und zur Durchführung von Bildverarbeitungstechniken für das Eingabebild.
  • MediaPipe: Sie verwenden diese Bibliothek, um Handerkennung und -verfolgung für das Eingabebild durchzuführen.
  • imutils: Sie werden diese Bibliothek verwenden, um die Größe des Videoframes der Eingabe zu ändern.

Führen Sie den folgenden Befehl auf Ihrem Terminal aus, um die Bibliotheken OpenCV, MediaPipe und imutils zu installieren. Installieren Sie pip – den Python-Paketmanager-wenn du musst. Stellen Sie sicher, dass Sie die Bibliotheken als durch Leerzeichen getrennte Liste übergeben.

pip installiert OpenCV-Python MediaPipe imutils

Wenn das Update abgeschlossen ist, ist die Umgebung bereit, damit Sie mit dem Programmieren beginnen können.

Der vollständige Quellcode für dieses Projekt ist in seiner verfügbar GitHub-Repository.

Importieren der erforderlichen Bibliotheken

Sie müssen die installierten Bibliotheken importieren, damit Sie sie verwenden können. Öffnen Sie alle Python-IDE, erstellen Sie eine Python-Datei und fügen Sie die folgenden Importe hinzu:

importieren Lebenslauf2
importieren mediapipe als MP
importieren Imutile

Stellen Sie sicher, dass Sie OpenCV als cv2 und MediaPipe in Kleinbuchstaben importieren. Andernfalls wird ein Fehler ausgegeben.

Sie verwenden mpHands, um die MediaPipe-Händelösung aufzurufen, und das Hands-Objekt, um die Handeingabe zu erkennen und zu verfolgen. Sie verwenden das mpDraw-Objekt, um die Verbindungen zwischen den Orientierungspunkten der identifizierten Hände zu zeichnen.

mpHands = mp.solutions.hands
Hände = mpHände. Hände()
mpDraw = mp.solutions.drawing_utils

Sie können das MediaPipe-Händemodell optimieren, indem Sie verschiedene Parameter an den Hands()-Konstruktor übergeben. Die Standardwerte sind gut genug für dieses Projekt, aber Sie können damit experimentieren, um zu sehen, wie sie sich auf das Modell auswirken:

Sie sollten die verlassen static_image_mode als False, um sicherzustellen, dass das Modell die Hände einmal erkennt, bevor es sie zu verfolgen beginnt. Es wiederholt den Verfolgungsprozess nur, wenn die Erkennungskonfidenz unter den deklarierten Parameter fällt, wodurch die gesamte Eingabeverarbeitung beschleunigt wird.

Durchführen von Handtracking

Sie benötigen drei Funktionen, um Hand-Tracking durchzuführen: eine, um die Eingabe zu verarbeiten, eine, um die Hand-Orientierungspunkte-Verbindungen zu zeichnen, und eine Hauptfunktion, um den Programmablauf zu steuern.

Eingangsverarbeitungsfunktion

Diese Funktion nimmt die Eingabe, wandelt sie in Graustufen um und übergibt sie an das MediaPipe-Händemodell, um die Hände in der Eingabe zu erkennen und zu verfolgen.

# Verarbeitung des Eingabebildes
defProzessbild(Bild):
# Konvertieren der Eingabe in Graustufen
grey_image = cv2.cvtColor (img, cv2.COLOR_BGR2RGB)
Ergebnisse = hands.process (gray_image)

# Rückgabe der erkannten Hände an die Anruffunktion
zurückkehren Ergebnisse

Die Funktion gibt die Ergebnisse zurück, ob Hände an der Eingabe erkannt wurden.

Die Funktion zum Zeichnen von Hand-Orientierungspunkt-Verbindungen

Diese Funktion prüft, ob die Eingabeverarbeitungsfunktion irgendwelche Hände erkannt hat. Wenn es irgendwelche erkannten Hände gibt, geht es über jeden Orientierungspunkt und zeichnet einen Kreis um ihn herum, wobei der Orientierungspunkt mit verfolgt wird Die Enumerate-Funktion von Python. Es zeichnet dann die Verbindungen zwischen den Orientierungspunkten auf dem ursprünglichen Videoeingang.

# Landmark-Verbindungen zeichnen
defdraw_hand_connections(Bild, Ergebnisse):
Wenn result.multi_hand_landmarks:
für handLms In result.multi_hand_landmarks:
für ich, lm In aufzählen (handLms.landmark):
h, w, c = Bildform

# Finden der Koordinaten jedes Orientierungspunkts
cx, cy = int (lm.x * w), int (lm.y * h)

# Drucken jeder Orientierungspunkt-ID und Koordinaten
# auf dem Terminal
drucken (id, cx, cy)

# Erstellen Sie einen Kreis um jeden Orientierungspunkt
cv2.circle (img, (cx, cy), 10, (0, 255, 0),
cv2.FILLED)
# Zeichnen der Landmarkenverbindungen
mpDraw.draw_landmarks (img, handLms,
mpHands. HAND_VERBINDUNGEN)

zurückkehren Bild

Die Funktion beginnt mit dem Umkreisen jedes Orientierungspunktes:

Dann zeichnet es die Handverbindungen:

Schließlich gibt es seine Ausgabe an die aufrufende Funktion zurück.

Die Hauptfunktion

Erstellen Sie eine Hauptfunktion, die den Ablauf Ihres Programms steuert. Es übernimmt die Eingabe und ändert die Größe des Videoframes, um die Konsistenz der Ausgabe sicherzustellen. Übergeben Sie die Eingabe an die Verarbeitungsfunktion, die dann die Hände erkennt und verfolgt. Bringen Sie die zurückgegebenen Ergebnisse zur Verbindungszeichnungsfunktion für Handmarkierungen, die die Verbindung auf dem ursprünglichen Videoeingang zeichnet. Schließlich wird dem Benutzer die Ausgabe angezeigt.

defhauptsächlich():
# Ersetzen Sie 0 durch den Videopfad, um a zu verwenden
# vorab aufgezeichnetes Video
cap = cv2.VideoCapture (0)

währendWAHR:
# Übernahme der Eingabe
Erfolg, Bild = cap.read()
image = imutils.resize (Bild, Breite=500, Höhe =500)
Ergebnisse = Prozessbild (Bild)
draw_hand_connections (Bild, Ergebnisse)

# Anzeige der Ausgabe
cv2.imshow("Handtracker", Bild)

# Programm wird beendet, wenn die Taste q gedrückt wird
Wenn cv2.waitKey(1) == ord('Q'):
cap.release()
cv2.destroyAllWindows()

Der letzte Schritt ist das Ausführen Ihres Programms. Der folgende Code stellt sicher, dass beim Ausführen des Programms die Hauptfunktion zuerst ausgeführt wird.

Wenn __name__ == "__hauptsächlich__":
hauptsächlich()

Wenn das Programm ausgeführt wird, erzeugt es eine Ausgabe wie diese:

Das Programm verfolgt die Hände in Echtzeit.

Handtracking für immersive virtuelle Realität

Handtracking in der virtuellen Realität macht die Technologie verlockender. Virtual-Reality-Headsets haben begonnen, Hand-Tracking einzuführen und ein Gefühl von erhöhter Realität in die virtuelle Welt zu bringen. Die Headsets ermöglichen es dem Benutzer, Befehle mit einer virtuellen Hand einzugeben.

Handtracking in virtuellen Headsets ist nur eine Anwendung dieser Technologie. Sie können Hand-Tracking in jeden anwendbaren Bereich Ihrer Wahl integrieren.