HoloLens AR – Mit Machine Learning

Dieses Projekt entstand, neben der Seminararbeit über „Sentiment Analysis“ in meinem vierten Fachsemester. In einer Gruppe von drei Leuten, fertigten meine Kommilitonen und ich eine HoloLens-Applikation an, die ein Spiel darstellte.

Gegenstand dieser Applikation war in einem beliebigen Raum einen Container erscheinen zu lassen, zufallsbasiert im Field-Of-Fiew. Der Spieler konnte einen Wurfgegenstand aus der Luft greifen und in den Container werfen. Ein simples Prinzip, welches mit etwas bling-bling (z.B. Partikeleffekten) versehen wurde. Die größte Hürde stellte für uns die Ausstattung dar. Zum Emulieren der HoloLens war lediglich einer unserer Computer in der Lage. Hinzu kamen anfänglich große Probleme mit Visual Studio (vor allem NuGet).

Abschließend fertigten wir eine 30-seitige Dokumentation über alle Vorgehensweisen für folgende Semester an. Der erste Prototyp wurde damit unserer Fachhochschule bereitgestellt.

Nach der Erkenntnis, dass die Anforderungen nicht sonderlich komplex waren, wollte ich mehr aus dem Projekt herausholen. Die Gestensteuerung der damals verwendeten HoloLens beschränkte sich auf wenige Kommandos. Es gab zwei Möglichkeiten mit der Hand Eingaben zu tätigen, nämlich der Klick- und der Bloom-Geste.

Der Machine Learning Teil

Für das Hinzufügen neuer Gesten musste ich den Research-Betrieb der HoloLens einstellen. Dadurch war es mir möglich auf den Live-Feed des Tiefen-Sensors zuzugreifen, die Bilder auf den Computer zu streamen und dort einzeln abzuspeichern. Der zweite Part bestand daraus einen Prototyp für das Machine Learning Modell anzufertigen. Das Modell hat auf Basis der zuvor erstellten Bilder gelernt, welche Handposition als neue Geste es zu erkennen gilt. Die Erkennung beschränkt sich jedoch auf „Neue Geste“ oder „Keine neue Geste“. Hierbei erreichte mein Modell einen F1-Score von über 90%, was ausreichend schien. Als finalen Schritt sollte das Modell in der HoloLens verwendet und der Stream der Bilder analysiert werden. Bei der Registrierung eines Treffers, musste nur noch der Callback ausgeführt werden, zum Beispiel „Spielschwierigkeit wechseln“ oder „Neustarten“.

Leider stellte sich der gesamte Prozess als schwerer heraus als angedacht, da Deeplearning4J zu diesem Zeitpunkt keine Möglichkeit bereitstellte, um das Modell in ein allgemeingültiges Format (.onnx) zu exportieren, welches von UWP benötigt wurde.

Im Umkehrschluss hätte das Modell zum Beispiel in TensorFlow neugeschrieben werden müssen. Zum damaligen Zeitpunkt hatte ich keinerlei Kenntnisse in Python und war durch das Lernen von Unity und C# bereits ausgelastet. Dadurch konnte ich meine Arbeit nicht fortsetzen und Machine Learning wurde nicht integriert.