Interfejs ARCore Depth API obsługuje teraz głębię geoprzestrzenną, która automatycznie zwiększa zasięg i szybkość działania interfejsu Depth API po włączeniu także Streetscape Geometry. Jeśli znajdujesz się w lokalizacji z zasięgiem VPS i włączoną funkcją Streetscape Geometry, obrazy wyjściowe z interfejsu Depth API obejmują geometrię terenu i budynków pobrane w danym obszarze z odległości do 65 metrów od bieżącej pozycji. Te dane o głębi pobrane z geometrii są łączone z lokalnymi obserwacjami głębi i aktualizowane, gdy użytkownik przemieszcza się do nowej lokalizacji.
Wywołania interfejsu ARCore Depth API udostępniają teraz zarówno lokalne obserwacje z aparatu, jak i budynki i ukształtowanie terenu z funkcji Streetscape Geometry, połączone w jeden obraz głębi.
Zgodność urządzeń
Głębia geoprzestrzenna jest dostępna na wszystkich urządzeniach, które obsługują interfejs Depth API. Ta funkcja nie wymaga obsługiwanego sprzętowego czujnika głębokości, np. czujnika czasu lotu (ToF). Interfejs Depth API korzysta jednak z obsługiwanych czujników sprzętowych, które mogą znajdować się urządzenia.
Wpływ na wydajność
Funkcja Głębia geoprzestrzenna wprowadza niewielką jednorazową obliczenia na początku sesji, aby zintegrować geometrię Streetscape z reprezentacją głębi w momencie pobierania, ale nie zwiększa wymiernie kosztu jej obliczania.
Zakres głębokości
Bez funkcji Głębia geoprzestrzenna typowe zakresy szczegółowych zdjęć są oddalone o odległości 20–30 metrów, a dokładność i gęstość obserwacji jest ograniczona. Po włączeniu funkcji Głębia geoprzestrzenna standardowo wartości gęsto próbkowanych danych sięgają maksymalnie 65, 535 metra, nawet jeśli ruch początkowy jest niewielki.
Przypadki użycia
Interfejsu ARCore Depth API można używać we wszystkich istniejących zastosowaniach, które są już obsługiwane. Dzięki funkcji Głębia geoprzestrzenna obrazy głębi uzyskane w lokalizacjach obsługiwanych przez VPS zostaną zapełnione głębią głębi o dużym zasięgu szybciej niż wcześniej. Umożliwia to wykorzystanie ich w przypadkach użycia o dużej głębi w środowiskach zewnętrznych. Oto niektóre zastosowania:
- Powiększanie na dużą skalę przesłonięcia treści wirtualnych i innych efektów wizualnych
- Nawigacja zewnętrzna
- Miary odległości
Ograniczenia
Głębia geoprzestrzenna jest obsługiwana tylko na obszarach, które obsługują lokalizację VPS i geometrię Streetscape. Na innych obszarach interfejs ARCore Depth API będzie działać jak zwykle bez wartości geoprzestrzennych.
Wymagania wstępne
Upewnij się, że znasz podstawowe pojęcia związane z AR. i dowiedz się, jak skonfigurować sesję ARCore, zanim przejdziesz dalej.
Włącz głębię geoprzestrzenną
W nowej sesji ARCore sprawdzać, czy urządzenie użytkownika obsługuje Depth i interfejs Geospatial API. Nie wszystkie urządzenia zgodne z ARCore obsługują Depth API ze względu na ograniczenia mocy obliczeniowej.
Aby można było oszczędzać zasoby, głębokość jest domyślnie wyłączona w ARCore. Włącz tryb głębi, aby aplikacja używała interfejsu Depth API. Dodatkowo włącz tryb geoprzestrzenny i geometrię Streetscape, aby należy użyć funkcji Głębia geoprzestrzenna.
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 funkcji Głębia geoprzestrzenna można uzyskać dostęp do obrazów głębi za pomocą istniejących 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 korzystać z funkcji Streetscape Geometry w rzeczywistości rozszerzonej.
- Ukończ ćwiczenia z programowania dotyczące semantyki sceny i głębi geoprzestrzennej, aby dowiedzieć się, jak utworzyć własną aplikację wykorzystującą głębię geoprzestrzenną.