Kategorien
Augmented Reality Software

Mehr Realität mit der neuen ARCore Depth API

Vor einigen Wochen hat Google die neue Depth API im Augmented-Reality-Framework ARCore für Entwickler veröffentlicht. Das hat mich ein bisschen an die erste Veröffentlichung der Kinect für die Xbox for ca. 10 Jahren erinnert. Die Tiefenbilder waren eigentlich für die Gestenerkennung in Spielen gedacht, aber wir haben sie für alles mögliche zweckentfremdet, z.B. für die Rekonstruktion von Innenräumen. Ähnlich, aber nicht ganz so ein großer Hype, war es später bei den ersten Smartphones mit Tiefensensor von Project Tango.

Die Technologie hinter der neuen Depth API ist nicht komplett neu. Allerdings ist neu, dass die Verwendung von Tiefenbildern auf so vielen Geräten für Entwickler frei verfügbar ist. Dadurch könnten ganz neuartige Anwendungen entstehen. In diesem Artikel erkläre ich zunächst, wie die Tiefenerkennung funktioniert und anschließend, wofür man sie verwenden kann.

Wie funktioniert die Depth API?

Für jedes Kamerabild der Augmented Reality Applikation wird ein zugehöriges Tiefenbild generiert. Das heißt, für jedes Pixel kann man die zugehörige Tiefe abfragen und die 3D-Position im Raum bestimmen. Die Depth API stellt immer nur das Tiefenbild für den aktuellen Frame zur Verfügung. Die einzelnen Tiefenbilder werden nicht zu einem 3D Mesh zusammengefügt.

Die neue Depth API funktioniert sowohl auf Geräten mit integriertem Tiefensensor als auch auf Geräten ohne Tiefensensor. Da es momentan nur sehr wenige Geräte gibt, welche über einen Tiefensensor verfügen, ist vor allem die zweite Variante sehr spannend.

Tiefenbilder ohne Sensor

Ist kein Tiefensensor verfügbar, wird das Tiefenbild aus mehreren Farbbildern berechnet. Die Technik heißt Depth-from-Motion, da eine einzelne Kamera bewegt wird und aufeinander folgende Bilder verwendet werden. Das führt uns schon zu der ersten Einschränkung der Depth API: die Kamera muss bewegt werden, ansonsten kann keine Tiefeninformation berechnet werden. Allerdings reichen schon kleine Bewegungen, welche ohnehin für AR auf Smartphones notwendig sind.

Depth-from-Motion funktioniert nur für statische Szenen. Punkte bzw. Bereiche werden zwischen zwei Bildern verglichen und zugeordnet. Je nachdem, wie weit sich ein Punkt im Bild bewegt hat, wird die Entfernung bzw. Tiefe für diesen Punkt bestimmt. Die Berechnung wird als Triangulation bezeichnet.

Triangulation um die Tiefe von zwei Punkten zu berechnen

Wird ein Objekt nun tatsächlich im Raum bewegt, zeigen die Bildpositionen in den zwei Bildern nicht mehr auf die gleiche Position in 3D und die Triangulation führt zu falschen Werten. Das heißt, die Depth API kann z.B. nicht für Gestenerkennung verwendet werden. Es ist aber durchaus möglich, zwischendurch ein Objekt an einen anderen Ort zu verschieben. Sobald sich nichts mehr bewegt, werden die Tiefenbilder wieder korrekt berechnet.

Eine weitere Beschränkung gibt es für die Beschaffenheit der Oberflächen in einer Szene. Es ist notwendig, verschiedene Punkte in mehreren Bildern wiederzuerkennen. Bei komplett einfärbigen Wänden ist das so gut wie unmöglich. Je vielfältiger die Oberflächen texturiert sind, desto genauer wird das Tiefenbild.

Tiefenbilder mit Sensor

Mittlerweile gibt es wieder einige wenige Smartphones mit integriertem Tiefensensor. Das Samsung Galaxy S20+ verwendet z.B. eine Time-of-Flight-Kamera. Vereinfacht gesagt, senden ToF-Kameras Infrarotstrahlen aus und messen wie lange es dauert, bis die Strahlen wieder zurückkommen. Zusammen mit der bekannten Geschwindigkeit der Strahlen kann man für jedes Pixel die Entfernung, d.h. die Tiefe, messen. Genauere Details und die Beschreibung von anderen Tiefensensoren sind z.B. in diesem Artikel von Daqri nachzulesen. Ein ähnlicher Sensor wird auch im neuen iPad verwendet.

Die Verwendung eines Tiefensensors hat einige Vorteile gegenüber dem Depth-from-motion-Verfahren. Die Kamera muss nicht bewegt werden, einfärbige Flächen und sich bewegende Objekte werden richtig erfasst. Zusätzlich ist eine höhere Genauigkeit möglich und es gibt weniger Artefakte. Bei Verwendung der Depth API sind diese Vorteile automatisch verfügbar, sobald eine Applikation auf einem Gerät mit Tiefensensor ausgeführt wird.

Was kann man mit der Depth API machen?

Google hat die App Depth Labs veröffentlicht, um einige Beispielanwendungen der Depth API zu zeigen. Die Anwendungen sind schön gemacht und gut geeignet um die Depth API in den eigenen Räumen auszuprobieren. Was auffällt ist, dass sehr viel Power benötigt wird und das Smartphone daher recht bald heiß wird.

Occlusions (Verdeckungen) sind ein wichtiger Hinweis für unsere Raumwahrnehmung. Wenn ein Objekt nur teilweise sichtbar ist, wissen wir, dass es sich hinter einem anderen Objekt befindet und von diesem verdeckt wird. Deshalb wirken virtuelle Objekte bei Augmented Reality ohne Occlusions oft so, als ob sie irgendwo im Raum schweben würden.

Occlusions – Virtuelle Objekte (Stühle) werden von realen Objekten (Tisch) verdeckt

Ebenfalls sehr wichtig für die Wahrnehmung der Tiefe ist der korrekte Schatten von virtuellen Objekten. Aufgrund des Schattenwurfs können wir erkennen, ob ein Objekt in der Luft schwebt oder sich weiter hinten im Raum befindet.

Kollisionen von virtuellen und realen Objekten ermöglichen neue, immersive Interaktionen. In der Depth Labs App landen Schneeflocken auf realen Objekten oder man kann Objekte oder Farbspritzer auf die echte Umgebung werfen. Die virtuellen Objekte bewegen sich aufgrund von Physik-Berechnungen im realen Raum. Zum Beispiel fallen die Objekte aufgrund der Schwerkraft hinunter und kullern über reale Objekte bis sie zum Liegen kommen. Ein wichtiger Punkt ist hierbei, dass ohne aktiven Tiefensensor nur statische Objekte richtig vermessen werden.

Kollisionserkennung – die virtuellen Objekte prallen an der Stiege ab.

Wenn man eine Rekonstruktion der realen Umgebung hat, kann man ihr Aussehen verändern. Mittels Re-lighting kann man z.B. einen Nachtmodus simulieren und die Szene mit einer virtuellen Lichtquelle beleuchten Mittels Re-texturing kann man eine neue Oberfläche applizieren und Objekte z.B. in einer anderen Farbe darstellen.

Die Tiefeninformation kann man für Tiefenschärfe-Effekte (Depth of Field) verwenden. Dabei wird nur ein kleiner Bereich der Tiefe scharf gezeichnet, während Objekte in anderen Tiefenbereichen verschwimmen. Tiefenschärfe kann als gestalterisches Mittel eingesetzt werden, z.B. um den Fokus auf bestimmte Objekte zu richten. Wichtig ist auf jeden Fall, dass virtuelle und reale Objekte gleich behandelt werden.

Weitere Anwendungen

Die neue Depth API bietet weitere Möglichkeiten, neben den zuvor gezeigten Computergrafik-Anwendungen. Speziell wenn in Zukunft mehr Geräte mit einem eingebauten Tiefensensor im Einsatz sind, werden viele praktische Anwendungen im Bereich Rekonstruktion möglich. Aber auch ohne aktiven Tiefensensor sind viele Anwendungen möglich, man darf sich nur nicht auf exakte Messungen verlassen.

In Remote Support Anwendungen kann man zu einem Problem Hilfe von Mitarbeiter*innen, welche nicht vor Ort sind, anfordern. Die lokale Umgebung wird gescannt und in Echtzeit an die Helfer*innen geschickt. Diese können die Umgebung begutachten und Tipps oder Informationen einzeichnen. Je besser die Szene rekonstruiert ist, desto exakter kann man die Hilfestellungen einzeichnen. Daher sind die neuen Tiefenbilder sehr hilfreich, da man zu jedem Punkt am Bildschirm die 3D-Position im Raum bestimmen kann.

Die Tiefenbilder können als zusätzlicher Input für verschiedene Computer Vision Algorithmen verwendet werden. Für die Detektion von bekannten Objekten kann man mittels Deep Learning zusätzlich zu den Farbbildern auch Tiefenbilder trainieren. Dadurch wird nicht nur das Aussehen sondern auch die Form eines Objekts in die Detektion mit eingebunden. Auf ähnliche Weise funktioniert auch die Segmentierung von einzelnen Objekten in einem Bild. Möglich ist auch die automatische Segmentierung des Hintergrunds, wodurch man einen virtuellen Green Screen implementieren kann.

Tiefenbilder sind ein wichtiger Zwischenschritt für die echte 3D Rekonstruktion einer Szene. Dazu werden die einzelnen Tiefenbilder der Reihe nach zusammengefügt, wodurch man zunächst eine sehr dichte Punktwolke der Umgebung erhält. Aus dieser Punktwolke kann man dann die tatsächliche Geometrie generieren und evt. mit den Farbbildern texturieren. 3D Rekonstruktion ist ein großes Thema in der Forschung und es gibt verschiedenste Ansätze dafür. Besonders interessant finde ich Algorithmen, welche eine Szene so einfach wie möglich rekonstruieren.

Fazit

Die Tiefenbilder sind ein wichtiger Schritt um in Zukunft hochqualitative Augmented Reality Applikationen zu erstellen. Viele Anwendungen werden erst mit der Verwendung von Tiefensensoren möglich. Da momentan nur sehr wenige Geräte über einen Tiefensensor verfügen, kann man mit entsprechenden Applikationen nur sehr wenige Menschen erreichen. Hier zeigt sich der Vorteil, dass die neue Depth API auch auf Geräten ohne Tiefensensor funktioniert. Dadurch kann man Anwendungen für eine größere Bandbreite an Geräten anbieten. Wenn es mehr Applikationen gibt, welche auf Tiefenbilder setzen, werden in Zukunft hoffentlich mehr Geräte mit einem Tiefensensor ausgestattet.

Schreibe einen Kommentar

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