Dieser Blogartikel behandelt die Frage, wie sich eine Fingerbewegung mittels Kameraerkennung in einer App als gezeichnete Linie darstellen lässt. Als Prototyp ist eine Android App entstanden, in der mittels Hand Tracking bei geöffneter Kamera gezeichnet werden kann. Dabei ist der Einsatz einer geeigneten Machine- oder Deep-Learning-Lösung für das Tracken menschlicher Hände in Echtzeit relevant. Hierfür wurde das von Google veröffentlichte Framework Mediapipe verwendet.
Gestenerkennung gewinnt im Einsatz neuer und innovativer Technologien zunehmend an Bedeutung. Zum Beispiel kann sie dabei unterstützen, Skizzen digital zu zeichnen, wenn die Bedienung mit der Computermaus oder dem Touchdisplay eines Smartphones eine Hürde darstellen. Weiterhin wäre es möglich, in einer App mittels der Smartphone-Kamera durch Hand-Tracking direkte Skizzen in einer realen Umgebung zu zeichnen.
Technische Herausforderungen
Für die Entwicklung einer solchen App müssen folgende technische Herausforderungen gelöst sein:
- Einen bestimmten Punkt eines menschlichen Fingers definieren.
- Die Position eines bestimmten Punktes des Fingers mittels der Smartphone-Kamera erkennen und dessen dreidimensionalen Koordinaten erfassen.
- Den Bewegungsablauf dieses Punktes mittels Smartphone-Kamera verfolgen und dessen dreidimensionalen Koordinaten erfassen.
- Den Bewegungsablauf als gezeichnete Linie darstellen.
Hand-Tracking-Technologie
Mediapipe ist ein Framework zum Erstellen von multimodalen Machine-Learning-Lösungen und bietet diese plattformübergreifend an, darunter auch Hand Tracking für Android in Android Studio. Außerdem wird eine Ende-zu-Ende-Optimierung bereitgestellt, die eine schnelle ML-Inferenz und beschleunigte Verarbeitung auch auf gängiger Hardware gewährleistet, wie z. B. einer Smartphone GPU. Mediapipe bietet ein umfassendes Hand Tracking inkl. aller relevanten Fingerpunkte (vgl. Abbildung 1), auch bei unterschiedlichen Ausrichtungen der Hand (vgl. Abbildung 2). Dies ist aufgrund von Ground-Thruth-Daten möglich, wofür 30.000 reale Bilder mit 21 3D-Koordinaten manuell annotiert wurden. Ground-Truth-Daten sind Daten, die in großem Maßstab aus realen Szenarien gesammelt werden, um Algorithmen auf Kontextinformationen wie menschliche Gesten und Verhaltensweisen sowie räumliche Orientierung zu trainieren. Zudem wird hierbei auch ein hochwertiges synthetisches Handmodell über verschiedene Hintergründe gerendert und den entsprechenden 3D-Koordinaten zugeordnet. Des weiteren gibt Google an, dass ihre Hand-Tracking-Lösung von Mediapipe in Echtzeit arbeitet. Dabei kommt ein Single-Shot-Detektormodell namens BlazePalm zum Einsatz, das nur eine Aufnahme macht, um mehrere Objekte in einem Bild mit Multibox zu erkennen. BlazePalm ist zudem für mobile Echtzeitanwendungen optimiert, ähnlich wie BlazeFace, das auch in MediaPipe verwendet wird. Es zeigt sich, dass dies eine geeignete Hand-Tracking-Lösung ist, um den Prototyp in Android darauf aufbauend zu entwickeln.
Prototyp-Entwicklung
Sobald die Hand-Tracking-Anwendung von Mediapipe auf einem Smartphone ausgeführt wird, öffnet sich die Kamera. Dabei werden 21 unterschiedliche Punkte einer Hand visuell dargestellt, falls diese erkannt werden. Das Tracking der Fingerspitze des Zeigefingers (Index 8, siehe Abbildung 1) wird im weiteren Verlauf verwendet, um damit die Position der Zeichnung in Echtzeit anzugeben. Die Zeichnung wird mit OpenGL ES realisiert.
OpenGL ist eine Plattform übergreifende Grafik-API, womit Anwendungen in 2D- und 3D-Computergrafik erstellt werden können. Für eingebettete Geräte, wie ein Smart Device, ist OpenGL ES eine Variante der OpenGL-Spezifikation. In OpenGL ES werden die Grafiken in einem virtuellen Raum dargestellt.
Die dadurch gerenderte Grafik ist dementsprechend in das Kamerabild von Mediapipe integriert bzw. wird auf einem transparenten Layer darüber gelegt. Dadurch ist die Zeichnung genau dort platziert, wo die Fingerspitze des Zeigefingers getrackt wird. Die von Mediapipe in Echtzeit getrackten x, y und z Koordinaten der Fingerspitze des Zeigefingers geben die Position für die zu zeichnenden Linien an. OpenGL ES verarbeitet diese Informationen und stellt die dazugehörige Zeichnung dar. Dabei muss das Koordinatensystem von Medipaipe an das von OpenGL ES mathematisch angepasst werden, sodass die getrackten Koordinatendaten die richtige bzw. dazugehörige Position für die Zeichnung angeben.
Ergebnis und Beeinträchtigungen
Der finale Prototyp zeigt an einem Beispiel, wie das Wort cool mittels Hand Tracking gezeichnet wird (siehe Abbildung 3).
Die Zuverlässigkeit des Zeichnens ist abhängig davon, ob Mediapipe in dem jeweiligen Zeitpunkt die Hand bzw. die Position des Fingers richtig erkennen und verfolgen kann. Dabei kann es vorkommen, dass ein anderes Objekt, wie z. B. das Gesicht eines Menschen, fälschlicherweise als Hand erkannt wird und somit ungewollte Zeichnungen entstehen. Zudem trackt Mediapipe immer nur die Fingerposition von einer Hand und nicht von mehreren. Wenn mehrere Hände getrackt werden, springt die Zeichnung von der Fingerspitze einer Hand zur anderen. Aus diesem Grund hat es sich bewährt, nur eine Hand in die Kamera zu halten, um ein zuverlässiges und korrektes Ergebnis zu erzielen.
Fazit
Mit dem entwickelten Prototyp konnte gezeigt werden, dass eine Android App den Bewegungsablauf von einem bestimmten Punkt eines menschlichen Fingers in einem realen dreidimensionalen Raum mittels Smartphone-Kamera erfassen und in eine gezeichnete Linie umwandeln kann.
Die Zeichnung wird zu diesem Stand in nur 2D dargestellt, obwohl sowohl x, y und z Koordinaten verarbeitet werden. Dies liegt daran, dass für eine dreidimensionale Darstellung die Position der virtuellen Kamera von OpenGL ES angepasst werden muss. Aktuell wird die Zeichnung von oben betrachtet, weshalb diese zweidimensional abgebildet wird. Für eine Darstellung in 3D müsste sich diese Kamera im virtuellen Raum bewegen. Eine weitere Möglichkeit die Zeichnung in 3D darzustellen ist das Hinzufügen von Augmented Reality. Hierzu könnte die Erweiterung des Prototyps zusätzliche Erkenntnisse liefern.
Repository zum Projekt
Für den entwickelten Prototyp wurde ein Repository mit einer dazugehörigen Dokumentation einer dementsprechenden Installation und Ausführung des Projekts bereitgestellt: https://github.com/Marjuw/Draw-From-The_Air
Literaturverzeichnis
Google. (2019, August). On-Device, Real-Time Hand Tracking with MediaPipe. Retrieved September 04, 2021, from https://ai.googleblog.com/2019/08/on-device-real-time-hand-tracking-with.html
Google Developers. (2021). Open GL ES. Retrieved September 13, 2021, from https://developer.android.com/guide/topics/graphics/opengl
Google LLC. (2020). MediaPipe Hands. Fig 2. . Retrieved August 30, 2021, from
Google LLC. (2020). MediaPipe Hands. Fig 3. Retrieved August 30, 2021, from
Google LLC. (2020). Mediapipe Hands-Hand Landmark Model. Retrieved September 04, 2021, from
Google Open Source. (n.d.). Mediapipe. Retrieved August 30, 2021, from https://opensource.google/projects/mediapipe
Grand View Research. (2019, January). Gesture Recognition Market Size, Share and Trends Analysis Report By Technology (Touch-based, Touchless), By Industry (Automotive, Consumer Electronics, Healthcare), And Segment Forecasts, 2019 – 2025. Retrieved August 30, 2021, from https://www.grandviewresearch.com/industry-analysis/gesture-recogn
Statista Research Department. (2020). Statistiken zur Digitalisierung der Arbeitswelt. Retrieved November 18, 2021, from https://de.statista.com/themen/6129/digitalisierung-der-arbeit/#dossierKeyfigures