Die Raw Depth API liefert Tiefendaten für ein Kamerabild, die eine höhere Genauigkeit als vollständige Depth API-Daten haben, deckt jedoch nicht immer jedes Pixel ab. Rohtiefenbilder und die zugehörigen Konfidenzbilder können auch weiter verarbeitet werden, sodass Apps nur die Tiefendaten verwenden können, die eine ausreichende Genauigkeit für ihren jeweiligen Anwendungsfall haben.
Eingeschränkte Gerätekompatibilität
„Raw Depth“ ist auf allen Geräten verfügbar, die die Depth API unterstützen. Wie die Full Depth API benötigt die Raw Depth API keinen unterstützten Hardware-Tiefensensor wie einen Time-of-Flight-Sensor. Sowohl die Raw Depth API als auch die vollständige Depth API verwenden jedoch alle unterstützten Hardwaresensoren eines Geräts.
Raw Depth API und Full Depth API im Vergleich
Die Raw Depth API ermöglicht Tiefenschätzungen mit höherer Genauigkeit, aber die Bilder für die Rohtiefe enthalten möglicherweise nicht für alle Pixel im Kamerabild Tiefenschätzungen. Im Gegensatz dazu liefert die Full Depth API die geschätzte Tiefe für jedes Pixel. Die Daten für die Tiefen pro Pixel sind jedoch möglicherweise aufgrund der Glättung und Interpolation der Tiefenschätzungen weniger genau. Das Format und die Größe der Tiefenbilder sind in beiden APIs gleich. Nur der Inhalt ist anders.
In der folgenden Tabelle werden die Unterschiede zwischen der Raw Depth API und der Full Depth API anhand des Bildes eines Stuhls und eines Tisches in einer Küche dargestellt.
API | Rückgaben | Kamerabild | Tiefenbild | Konfidenzbild |
---|---|---|---|---|
Raw Depth API |
|
|||
Full Depth API |
|
– |
Konfidenzbilder
In Konfidenzbildern, die von der Raw Depth API zurückgegeben werden, haben hellere Pixel höhere Konfidenzwerte, wobei weiße Pixel für die volle Konfidenz und schwarze Pixel für keine Konfidenz stehen. Im Allgemeinen weisen Bereiche im Kamerabild mit mehr Textur, z. B. ein Baum, ein höheres Konfidenzniveau für die Tiefentiefe auf als Regionen, in denen dies nicht der Fall ist, z. B. eine leere Wand. Oberflächen ohne Textur haben in der Regel einen Konfidenzwert von null.
Wenn das Zielgerät über einen unterstützten Hardware-Tiefensensor verfügt, ist die Konfidenz in Bereichen des Bildes, die nahe genug an der Kamera sind, wahrscheinlich höher, selbst auf texturlosen Oberflächen.
Compute-Kosten
Die Computing-Kosten der Raw Depth API betragen etwa die Hälfte der Computing-Kosten für die vollständige 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. Rohtiefendaten können bei der Erstellung von AR-Anwendungen nützlich sein, bei denen eine höhere Tiefengenauigkeit und mehr Details zum Verständnis der Geometrie erforderlich sind. Einige Anwendungsfälle:
- 3D-Rekonstruktion
- Messwerte ermitteln
- Formerkennung
Voraussetzungen
Machen Sie sich mit den grundlegenden AR-Konzepten und zur 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 Tiefe unterstützt. Die Depth API wird aufgrund von Einschränkungen bei der Verarbeitungsleistung nicht von allen ARCore-kompatiblen Geräten unterstützt. Die Tiefe ist bei ARCore standardmäßig deaktiviert, um Ressourcen zu sparen. Aktivieren Sie den Tiefenmodus, damit Ihre Anwendung 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 Bild mit Rohtiefen aufnehmen
Rufen Sie AROcclusionManager.TryAcquireEnvironmentDepthCpuImage()
auf und verwenden Sie AROcclusionManager.environmentDepthTemporalSmoothingRequested
, um das neueste Bild mit der Rohtiefe auf der CPU zu erfassen.
Das neueste Bild zur Konfidenz der Rohdatentiefe abrufen
Rufen Sie AROcclusionManager.TryAcquireEnvironmentDepthConfidenceCpuImage()
auf und verwenden Sie AROcclusionManager.environmentDepthTemporalSmoothingRequested
, um das Konfidenzbild auf der CPU abzurufen.
// 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;
}