ARCore Depth API obsługuje teraz głębię geoprzestrzenną, która automatycznie zwiększa zakres i szybkość interfejsu Depth API po włączeniu Streetscape Geometry. Gdy znajdujesz się w danej lokalizacji z zasięgiem VPS i włączoną geometrią Streetscape Geometry, zdjęcia wyjściowe przez interfejs Depth API obejmują obrazy terenu i geometrii budynków pobrane na danym obszarze do 65 metrów od bieżącej pozycji. Dane o głębokości pobrane z elementów geometrycznych są łączone z lokalnymi obserwacjami głębi i aktualizowane w miarę przemieszczania się użytkownika.
Wywołania interfejsu ARCore Depth API dostarczają teraz zarówno lokalne obserwacje z aparatu, jak i budynki i teren z funkcji Streetscape Geometry, połączone w jeden obraz głębi.
Zgodność urządzeń
Dane o głębokości geoprzestrzennej są dostępne na wszystkich urządzeniach obsługujących Depth API. Ta funkcja nie wymaga obsługiwanego sprzętowego czujnika głębokości, takiego jak czujnik czasu lotu. Interfejs Depth API korzysta jednak z obsługiwanych czujników sprzętowych, które może posiadać urządzenie.
Wpływ na wydajność
Funkcja Głębokość geoprzestrzenna wprowadza na początku sesji niewielkie, jednorazowe obliczenia w celu zintegrowania funkcji Streetscape Geometry z pobraną reprezentacją głębi, ale w inny sposób nie zwiększa kosztów jej obliczeń w sposób wymierny.
Zakres głębokości
W przypadku braku głębokości geoprzestrzennej typowe obszary głębi są dostępne z odległości około 20–30 metrów, a gęstość i dokładność obserwacji są ograniczone poza ten zakres. Po włączeniu Głębokości geoprzestrzennej często zdarza się, że gęstość próbek wartości głębokości przekracza 65, 535 metra nawet przy niewielkim początkowym ruchu.
Przypadki użycia
Interfejsu ARCore Depth API można używać we wszystkich istniejących przypadkach użycia, które są już obsługiwane. Dzięki funkcji Głębokość geoprzestrzenna zdjęcia głębi uzyskane w lokalizacjach obsługujących VPS są szybciej niż wcześniej wypełniane z dużą głębokością, co pozwala na kierowanie na duże odległości w środowiskach zewnętrznych. Przykłady użycia:
- Okulary z przesłanianiem treści wirtualnych i innych efektów wizualnych na dużą skalę
- Nawigacja na zewnątrz
- Miary odległości
Ograniczenia
Głębia geoprzestrzenna jest obsługiwana tylko na obszarach, które obsługują lokalizację VPS i geometrię Streetscape Geometry. Na innych obszarach interfejs ARCore Depth API będzie działać normalnie bez wartości danych geoprzestrzennych.
Wymagania wstępne
Zanim przejdziesz dalej, upewnij się, że znasz podstawowe pojęcia związane z AR i wiesz, jak skonfigurować sesję ARCore.
Włącz głębokość geoprzestrzenną
W nowej sesji ARCore sprawdź, czy urządzenie użytkownika obsługuje funkcje Depth i Geospatial API. Z powodu ograniczeń mocy obliczeniowej nie wszystkie urządzenia zgodne z ARCore obsługują interfejs Depth API.
Aby oszczędzać zasoby, głębia jest domyślnie wyłączona w ARCore. Włącz tryb głębi, aby aplikacja używała interfejsu Depth API. Włącz też tryb geoprzestrzenny i geometrię Streetscape, aby używać głębokości geoprzestrzennej.
Java
Config config = session.getConfig(); // Check whether the user's device supports the Depth API. boolean isDepthSupported = session.isDepthModeSupported(Config.DepthMode.AUTOMATIC); boolean isGeospatialSupported = session.isGeospatialModeSupported(Config.GeospatialMode.ENABLED); if (isDepthSupported && isGeospatialSupported) { // These three settings are needed to use Geospatial Depth. config.setDepthMode(Config.DepthMode.AUTOMATIC); config.setGeospatialMode(Config.GeospatialMode.ENABLED); config.setStreetscapeGeometryMode(Config.StreetscapeGeometryMode.ENABLED); } session.configure(config);
Kotlin
val config = session.config // Check whether the user's device supports the Depth API. val isDepthSupported = session.isDepthModeSupported(Config.DepthMode.AUTOMATIC) val isGeospatialSupported = session.isGeospatialModeSupported(Config.GeospatialMode.ENABLED) if (isDepthSupported && isGeospatialSupported) { // These three settings are needed to use Geospatial Depth. config.depthMode = Config.DepthMode.AUTOMATIC config.geospatialMode = Config.GeospatialMode.ENABLED config.streetscapeGeometryMode = Config.StreetscapeGeometryMode.ENABLED } session.configure(config)
Po włączeniu głębi geoprzestrzennych możesz uzyskiwać dostęp do obrazów głębi za pomocą dotychczasowych wywołań interfejsu API zgodnie z opisem w szczegółowym przewodniku dla programistów.
Java
// Retrieve the depth image for the current frame, if available. Image depthImage = null; try { depthImage = frame.acquireDepthImage16Bits(); // Use the depth image here. } catch (NotYetAvailableException e) { // This means that depth data is not available yet. // Depth data will not be available if there are no tracked // feature points. This can happen when there is no motion, or when the // camera loses its ability to track objects in the surrounding // environment. } finally { if (depthImage != null) { depthImage.close(); } }
Kotlin
// Retrieve the depth image for the current frame, if available. try { frame.acquireDepthImage16Bits().use { depthImage -> // Use the depth image here. } } catch (e: NotYetAvailableException) { // This means that depth data is not available yet. // Depth data will not be available if there are no tracked // feature points. This can happen when there is no motion, or when the // camera loses its ability to track objects in the surrounding // environment. }
Co dalej?
- Dowiedz się, jak używać geometrii Streetscape Geometry na potrzeby rzeczywistości rozszerzonej.
- Aby dowiedzieć się, jak stworzyć własną aplikację z użyciem głębokości geoprzestrzennej, wykonaj ćwiczenie z programowania dotyczące semantyki sceny i głębokości geoprzestrzennej.