Extend the real life! powered by Hololens

giphy

„This is an absolutely game-changer“ – some random guy on YouTube.

Dem Leitspruch nach, haben wir uns mal in Richtung Augmented Reality getraut und dabei eine kleine Applikation für die Microsoft Hololens entwickelt.
Für die nicht ganz traditionellen Demos und Showcases steht RxS – was transpiliert „Cross Reality Studio“ bedeutet.

Damit ist es uns möglich gewesen 3D Modelle in Raum zu platzieren und zu bewegen. Durch die Tiefensensoren kann die Hololens einen Raum komplett abscannen, was bedeutet wir haben das Mesh des Raumes und können damit herumspielen. Einfaches Beispiel wäre die Erkennung von Flächen in einem Raum. Oder wir verbieten unseren Objekten durch die Wände zu gehen!


Projizierte 3D-Objekte: eine Weltkugel, mit einem an der Oberfläche liegenden Bevölkerungsdichte-Balkenchart. Dahinter ein Flipchart um die Einstellungen der Anwendung zu verändern.

Hierbei muss man sagen dass nicht nur 2 3D-Objekte angezeigt werden, sondern diese auch über RxS komplett gesteuert werden. Ein fast vollständiges Framework steckt nun dahinter. Es ermöglicht uns in einer sehr einfachen Art beliebige Objekte zu „wrappen“ und zu manipulieren.

 

Not amazing enough.

giphy1

Nach einem kollegialen Brainstorming wurde in Richtung Deep-Learning progressiert und eine geniale Idee kam zu Tage:
eine Face-detection & matching Funktionalität musste her.

Dabei wurde ein C# Adapter für die OpenCV Bibliothek direkt auf der Hololens angewandt. Die Rechenleistung und RAM der Hololens gingen leider schon bei einfacher Gesichtserkennung in die Knie, sodass wir mit ~13 FPS durch die Gegend irrten.
Einzig logische Alternative die uns blieb: ein Python Webserver mit OpenCV als Verstärkung.

Fehlende Erfahrung mit Python plagte uns eine halbe Woche – und vollbracht war das Kunstwerk – so halb, leider. Was sich schnell bemerkbar machte: OpenCV ist zwar schnell im Erkennen, aber miserabel beim Zuweisen. Mit mehreren Tausend Bildern wurde unser Datenmodell trainiert und trotzdem gab es eine Wahrscheinlichkeitsrate von < 10%. Davon abzusehen dass maximal 1-2 Meter Abstand genommen werden durften.

Intensive Kaffeepausen und Google-Recherchen führten uns zu dLib. Die Aussagen und Berichte waren überzeugend und der Entschluss fiel – OpenCV durch dLib zu ersetzen. Es hatte nämlich ein auf über 3 Millionen Bildern trainiertes model im Bauch und eine > 99 prozentige Erkennungsrate.

Soweit so gut, nur noch Implementieren heißt es.

Ach so, man muss es zuerst kompilieren – kein Problem. Unter Windows und ohne CMake / Boost / C++ Kenntnisse jedoch schon.

giphy2

Übergroße Kaffeetassen und ein Betriebssystemwechsel auf Linux haben Ihren Job getan und dabei entstand endlich das gebaute dLib.

Anhand von nur einem schief geschossenem Selfie konnten wir jeder Person Gesichter zuweisen. Und das aus einem 10 Meter Abstand – bei einer 480p Auflösung. Die Selfies kommen übrigens aus einer SAP DesignStudio Komponente ( HoloLayer ), die im gleichen Zuge entwickelt wurde.


Minimalistisches Architekturbild:

 

Der Selfieprozess ist recht simpel gehalten und instruiert, nachfolgend auch zu sehen:

Zur Laufzeit wird uns live ein erkanntes Gesicht markiert. Nachdem ein Bild aufgenommen wurde, ist es direkt zur Gesichtserkennung in RxS verfügbar.

In der DesignStudio Komponente sind wir nicht nur in der Lage ein paar Selfies anzulegen, sondern auch Callbacks zu definieren und Datensätze zu den Gesichtern zu speichern. Mit anderen Worten, wir können etwas erkennen und auf Grund dessen eine zielgerichtete Aktion anstoßen. Im konkreten Fall heißt das, wenn eine Person erkannt wird, zeigen wir ein persönliches Dashboard oder eine Visitenkarte an.

Da uns das noch immer nicht cool genug war:

RxS kann zuhören und uns auf bestimmte Kommandos als „Jarvis“ oder mit der sanften Stimme von „Betty“ antworten.

In Zukunft werden wir sicher noch öfter über Augmented Reality hier im Blog berichten!

Getagged mit: , , , , , ,

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*

*