„Raw Depth“ in deiner AR Foundation Android-App verwenden

Die Raw Depth API bietet Tiefendaten für ein Kamerabild, die genauer sind als die Daten der Full Depth API, aber nicht immer alle Pixel abdecken. Rohe Tiefenbilder können zusammen mit den zugehörigen Konfidenzbildern weiterverarbeitet werden. So können Apps nur die Tiefendaten verwenden, die für ihren individuellen Anwendungsfall ausreichend genau sind.

Gerätekompatibilität

Die Rohtiefe ist auf allen Geräten verfügbar, die die Depth API unterstützen. Die Raw Depth API erfordert wie die vollständige Depth API keinen unterstützten Hardware-Tiefensensor wie einen Time-of-Flight-Sensor (ToF). Sowohl die Raw Depth API als auch die Full Depth API nutzen jedoch alle unterstützten Hardwaresensoren, die ein Gerät haben kann.

Raw Depth API und Full Depth API im Vergleich

Die Raw Depth API bietet Tiefenschätzungen mit höherer Genauigkeit. Raw-Tiefenbilder enthalten jedoch möglicherweise keine Tiefenschätzungen für alle Pixel im Kamerabild. Im Gegensatz dazu liefert die vollständige Depth API eine geschätzte Tiefe für jedes Pixel. Die Tiefendaten pro Pixel sind jedoch aufgrund der Glättung und Interpolation der Tiefenschätzungen möglicherweise weniger genau. Format und Größe von Tiefenbildern sind bei beiden APIs gleich. Nur der Inhalt unterscheidet sich.

In der folgenden Tabelle werden die Unterschiede zwischen der Raw Depth API und der Full Depth API anhand eines Bildes von einem Stuhl und einem Tisch in einer Küche veranschaulicht.

API Gibt Folgendes zurück: Kamerabild Tiefenbild Bild: Zuverlässigkeit
Raw Depth API
  • Ein Rohtiefenbild, das eine sehr genaue Tiefenschätzung für einige, aber nicht alle Pixel im Kamerabild enthält.
  • Ein Konfidenzbild, das den Konfidenzwert für jedes Pixel des Rohtiefebilds angibt. Pixel im Kamerabild, für die keine Tiefenschätzung vorliegt, haben eine Zuverlässigkeit von null.
Full Depth API
  • Ein einzelnes „glättetes“ Tiefenbild, das eine Tiefenschätzung für jedes Pixel enthält.
  • Für diese API wird kein Bild mit Konfidenzwert bereitgestellt.

Bilder mit Zuverlässigkeitsbewertung

In den Konfidenzbildern, die von der Raw Depth API zurückgegeben werden, haben hellere Pixel höhere Konfidenzwerte. Weiße Pixel stehen für volle Konfidenz und schwarze Pixel für keine Konfidenz. Im Allgemeinen haben Bereiche im Kamerabild mit mehr Textur, z. B. ein Baum, eine höhere Zuverlässigkeit der Rohtiefe als Bereiche ohne Textur, z. B. eine kahle Wand. Oberflächen ohne Textur haben in der Regel eine Zuverlässigkeit von null.

Wenn das Zielgerät einen unterstützten Hardware-Tiefensensor hat, ist die Wahrscheinlichkeit höher, dass Bereiche des Bilds, die sich nahe genug an der Kamera befinden, auch bei texturlosen Oberflächen zuverlässig erkannt werden.

Compute-Kosten

Die Rechenkosten der Raw Depth API betragen etwa die Hälfte der Rechenkosten für die Full Depth API.

Anwendungsfälle

Mit der Raw Depth API können Sie Tiefenbilder abrufen, die eine detailliertere Darstellung der Geometrie der Objekte in der Szene bieten. Rohe Tiefendaten können nützlich sein, wenn Sie AR-Inhalte erstellen, bei denen für Aufgaben zur Geometrieerkennung eine höhere Tiefengenauigkeit und mehr Details erforderlich sind. Beispiele für Anwendungsfälle:

  • 3D-Rekonstruktion
  • Messung
  • Formerkennung

Vorbereitung

Machen Sie sich mit den grundlegenden AR-Konzepten und der Konfiguration einer ARCore-Sitzung vertraut, bevor Sie fortfahren.

Tiefe aktivieren

Prüfen Sie in einer neuen ARCore-Sitzung, ob das Gerät eines Nutzers die Funktion „Tiefe“ unterstützt. Nicht alle ARCore-kompatiblen Geräte unterstützen die Depth API aufgrund von Einschränkungen bei der Rechenleistung. Um Ressourcen zu sparen, ist die Tiefenerfassung in ARCore standardmäßig deaktiviert. Aktivieren Sie den Tiefenmodus, damit Ihre App die Depth API verwendet.

var occlusionManager = // Typically acquired from the Camera game object.

// Check whether the user's device supports the Depth API.
if (occlusionManager.descriptor?.supportsEnvironmentDepthImage)
{
    // If depth mode is available on the user's device, perform
    // the steps you want here.
}

Aktuelles Rohtiefenbild erfassen

Rufen Sie AROcclusionManager.TryAcquireEnvironmentDepthCpuImage() auf und verwenden Sie AROcclusionManager.environmentDepthTemporalSmoothingRequested, um das neueste Rohtiefenbild auf der CPU zu erfassen.

Aktuelles Rohbild mit dem Konfidenzgrad der Tiefendaten erfassen

Rufen Sie AROcclusionManager.TryAcquireEnvironmentDepthConfidenceCpuImage() auf und verwenden Sie AROcclusionManager.environmentDepthTemporalSmoothingRequested, um das Konfidenzbild auf der CPU zu erfassen.

// Attempt to get the latest environment depth image.
if (occlusionManager && occlusionManager.TryAcquireEnvironmentDepthConfidenceCpuImage(out XRCpuImage image))
{
    using (image)
    {
        UpdateRawImage(m_RawEnvironmentDepthConfidenceImage, image);
    }
}
else
{
    m_RawEnvironmentDepthConfidenceImage.enabled = false;
}