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 bietet die Full Depth API die geschätzte Tiefe für jedes Pixel. Die Tiefendaten pro Pixel sind jedoch aufgrund der Glättung und Interpolation von Tiefenschätzungen möglicherweise weniger genau. Format und Größe von Tiefenbildern sind bei beiden APIs gleich. Nur der Inhalt unterscheidet sich.
Die folgende Tabelle veranschaulicht die Unterschiede zwischen der Raw Depth API und der vollständigen Depth API anhand eines Bilds eines Stuhls und eines Tisches in einer Küche.
API | Gibt Folgendes zurück: | Kamerabild | Tiefenbild | Bild: Zuverlässigkeit |
---|---|---|---|---|
Raw Depth API |
|
|||
Full Depth API |
|
– |
Bilder mit Zuverlässigkeit
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 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 geometrische Aufgaben eine höhere Tiefengenauigkeit und mehr Details erforderlich sind. Einige Anwendungsfälle:
- 3D-Rekonstruktion
- Messung
- Formerkennung
Voraussetzungen
Machen Sie sich mit den grundlegenden AR-Konzepten und der Konfiguration einer ARCore-Sitzung vertraut, bevor Sie fortfahren.
Tiefe aktivieren
Prüfe in einer neuen ARCore-Sitzung, ob das Gerät des Nutzers „Tiefe“ unterstützt. Aufgrund von Einschränkungen bei der Prozessorleistung unterstützen nicht alle ARCore-kompatiblen Geräte die Depth API. 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;
}