Interfejs Raw Depth API udostępnia dane głębi dla obrazu z kamery, które mają większą dokładność niż dane z interfejsu Depth API, ale nie zawsze obejmują każdy piksel. Obrazy głębi w postaci surowych danych wraz z odpowiednimi obrazami z poziomami wiarygodności można też dalej przetwarzać, co pozwala aplikacjom używać tylko danych o głębi, które mają wystarczającą dokładność do danego przypadku użycia.
Zgodność urządzeń
Dane Depth w postaci surowych wartości są dostępne na wszystkich urządzeniach obsługujących interfejs Depth API. Interfejs Raw Depth API, podobnie jak pełny interfejs Depth API, nie wymaga obsługiwanego czujnika głębi sprzętowej, takiego jak czujnik ToF. Zarówno interfejs Raw Depth API, jak i pełny interfejs Depth API korzystają jednak z dowolnych obsługiwanych czujników sprzętowych, które może mieć urządzenie.
Interfejs Raw Depth API a pełny interfejs Depth API
Interfejs Raw Depth API zapewnia szacunki głębi o wyższej dokładności, ale obrazy głębi w formacie RAW mogą nie zawierać szacunków głębi dla wszystkich pikseli obrazu z kamery. W przeciwieństwie do tego pełny interfejs Depth API udostępnia szacowaną głębię dla każdego piksela, ale dane o głębi poszczególnych pikseli mogą być mniej dokładne ze względu na wygładzanie i interpolację szacunków głębi. Format i rozmiar obrazów głębi są takie same w obu interfejsach API. Różnią się tylko treści.
Tabela poniżej przedstawia różnice między interfejsem Raw Depth API a pełnym interfejsem Depth API na przykładzie obrazu krzesła i stołu w kuchni.
Interfejs API | Zwroty | Obraz z kamery | Obraz głębi | Obraz z poziomem ufności |
---|---|---|---|---|
Raw Depth API |
|
|||
Full Depth API |
|
Nie dotyczy |
Obrazy z poziomem zaufania
W obrazach z poziomem pewności zwróconych przez interfejs Raw Depth API jaśniejsze piksele mają większą wartość pewności. Białe piksele oznaczają pewność, a czarne brak pewności. Ogólnie rzecz biorąc, obszary obrazu z kamery, które mają więcej tekstur, np. drzewo, będą miały większą pewność głębi niż obszary, które jej nie mają, np. pusta ściana. Powierzchnie bez tekstury zwykle mają wskaźnik pewności równy 0.
Jeśli urządzenie docelowe ma obsługiwany czujnik głębi, pewność co do obszarów obrazu znajdujących się w pobliżu aparatu będzie prawdopodobnie większa, nawet na powierzchniach bez tekstury.
Koszt mocy obliczeniowej
Koszt przetwarzania interfejsu Raw Depth API wynosi około połowy kosztu przetwarzania pełnego interfejsu Depth API.
Przypadki użycia
Dzięki interfejsowi Raw Depth API możesz uzyskać obrazy głębi, które zapewniają bardziej szczegółowe odwzorowanie geometrii obiektów w scenie. Dane głębi w postaci surowych danych mogą być przydatne podczas tworzenia doświadczeń AR, w których przypadku do zadań związanych z rozpoznawaniem geometrii potrzebna jest większa dokładność i szczegółowość głębi. Przykładowe zastosowania:
- Odbudowa 3D
- Pomiary
- Wykrywanie kształtów
Wymagania wstępne
Zanim przejdziesz dalej, upewnij się, że rozumiesz podstawowe zagadnienia związane z rozszerzoną rzeczywistością oraz że wiesz, jak skonfigurować sesję ARCore.
Włączanie opcji Głębia
W nowej sesji ARCore sprawdź, czy urządzenie użytkownika obsługuje Depth. Nie wszystkie urządzenia zgodne z ARCore obsługują interfejs Depth API ze względu na ograniczenia mocy obliczeniowej. Aby oszczędzać zasoby, ARCore domyślnie wyłącza głębię. Włącz tryb głębi, aby aplikacja mogła korzystać z interfejsu Depth API.
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.
}
Pobieranie najnowszego obrazu głębi w formacie RAW
Wywołaj funkcję AROcclusionManager.TryAcquireEnvironmentDepthCpuImage()
i użyj opcji AROcclusionManager.environmentDepthTemporalSmoothingRequested
, aby uzyskać najnowszy obraz głębi w formacie RAW na procesorze.
Pobierz najnowszy obraz głębi w postaci surowych danych o pewności
Wywołaj funkcję AROcclusionManager.TryAcquireEnvironmentDepthConfidenceCpuImage()
i użyj parametru AROcclusionManager.environmentDepthTemporalSmoothingRequested
, aby uzyskać obraz zaufania w procesorze.
// 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;
}