1. Zanim zaczniesz
ARCore to platforma Google do tworzenia na smartfonach projektów rzeczywistości rozszerzonej (AR). Interfejsy Scene Semantics API i Geospatial Depth API pomagają aplikacjom AR rozpoznawać otoczenie użytkowników.
Interfejs Scene Semantics API korzysta z modelu uczenia maszynowego do analizowania obrazów z aparatu i dostarczania obrazu z oznaczonymi pikselami. Rozróżnia 11 różnych etykiet zewnętrznych.
Interfejs Geospatial Depth API łączy informacje o głębi pochodzące z ruchu i aktywnych czujników sprzętowych, takich jak czujniki czasu przelotu, z danymi interfejsu Streetscape Geometry API. Poprawia błędy w obserwacjach głębi w odległości do 65 metrów.
W tym ćwiczeniu z programowania utworzysz aplikację AR, która wizualizuje wyniki interfejsów Scene Semantics API i Geospatial Depth API.
Wymagania wstępne
- Podstawowa wiedza na temat AR
Czego się nauczysz
- Jak włączyć interfejs Scene Semantics API.
- Jak uzyskać i wizualizować obraz semantyczny.
- Jak uzyskać i wizualizować obraz z pewnością semantyczną.
- Jak określić, jaki procent pikseli odpowiada danej etykiecie.
- Jak skonfigurować projekt Google Cloud, który może korzystać z interfejsów ARCore Geospatial API.
- Jak włączyć interfejs Geospatial Depth API.
- Jak wizualizować obrazy głębi.
Czego potrzebujesz
- Obsługiwane urządzenie z Androidem i ARCore podłączone kablem USB do komputera deweloperskiego i skonfigurowane z debugowaniem USB.
- Na urządzeniu deweloperskim z Androidem musi być zainstalowana usługa Google Play dla AR w wersji 1.37 lub nowszej.
- Android Studio zainstalowane i skonfigurowane do tworzenia aplikacji na Androida.
2. Konfigurowanie środowiska
Aby ułatwić Ci rozpoczęcie pracy z interfejsem Geospatial API, udostępniliśmy projekt startowy, który zawiera podstawy projektu ARCore i kilka funkcji pomocniczych.
Aby skonfigurować projekt początkowy, wykonaj te czynności:
- Otwórz Android Studio i wykonaj jedną z tych czynności:
- Jeśli masz już otwarty projekt, kliknij Plik > Nowy > Projekt z systemu kontroli wersji.
- Jeśli zobaczysz okno Witamy w Androidzie Studio, kliknij Pobierz z VCS.
- Wybierz Git i wpisz
https://github.com/google-ar/codelab-scene-semantics-geospatial-depth.git
, aby zaimportować projekt.
3. Wizualizacja danych interfejsu Scene Semantics API
Włączanie interfejsu Scene Semantics API
Interfejs Scene Semantics API jest domyślnie wyłączony, aby oszczędzać moc obliczeniową.
Aby włączyć interfejs Scene Semantics API, wykonaj te czynności:
- W pliku
CodelabActivity.kt
znajdź ten wiersz:// TODO: Enable the Scene Semantics API.
- Jeśli urządzenie obsługuje interfejs Scene Semantics API, włącz go w konfiguracji sesji:
if (session.isSemanticModeSupported(Config.SemanticMode.ENABLED)) { semanticMode = Config.SemanticMode.ENABLED }
Uzyskiwanie i wizualizowanie obrazu semantycznego
Obraz semantyczny jest wynikiem działania modelu ML ARCore, który przypisuje SemanticLabel
Enum do każdego piksela w obrazie z kamery.
Aby uzyskać obraz semantyczny i wyświetlić go na ekranie, wykonaj te czynności:
- W pliku
CodelabRenderer.kt
znajdź ten wiersz:// TODO: Obtain the semantic image for this frame.
- Po tym wierszu uzyskaj obraz semantyczny:
Obraz semantyczny jest używany w klasieframe.acquireSemanticImage().use { image -> semanticRenderer.updateCameraSemanticsTexture(image) activity.view.semanticLabelAtCenter = getLabelAt(image, image.width/2, image.height/2) }
SemanticRenderer
do wyświetlania na ekranie. Aktualizujesz zmiennąsemanticLabelAtCenter
, aby wyświetlać etykietę semantyczną na środku ekranu w widoku aplikacji. - Uruchom aplikację i skieruj aparat na różne obiekty na zewnątrz. Wyświetlanie etykiety semantycznej zmienia się w zależności od typu obiektu.
- Kliknij
Ustawienia, aby włączyć nakładkę obrazu z pewnością semantyczną.
Uzyskiwanie i wizualizowanie obrazu z informacjami o pewności semantycznej
Obraz ufności semantycznej pokazuje, jak pewny jest ARCore w przypadku etykiety semantycznej w pasującym pikselu.
Aby uzyskać obraz semantyczny i wyświetlić go na ekranie, wykonaj te czynności:
- W pliku
CodelabRenderer.kt
znajdź ten wiersz:// TODO: Obtain the confidence image for this frame.
- Po tym wierszu pobierz obraz semantyczny:
Obraz z pewnością semantyczną jest używany w klasieframe.acquireSemanticConfidenceImage().use { image -> semanticRenderer.updateConfidenceSemanticsTexture(image) activity.view.confidenceAtCenter = getConfidenceAt(image, image.width/2, image.height/2) }
SemanticRenderer
do wyświetlania na ekranie. Aktualizujesz zmiennąconfidenceAtCenter
, aby wyświetlać etykietę semantyczną na środku ekranu w widoku aplikacji. - Uruchom aplikację i skieruj aparat na różne obiekty na zewnątrz. Wyświetlanie pewności semantycznej zmienia się, gdy patrzysz na różne typy obiektów.
- Kliknij
Ustawienia, aby włączyć nakładkę obrazu z pewnością semantyczną.
Określanie rozpowszechnienia etykiety
Częstość występowania etykiety to odsetek obrazu semantycznego, który jest równy danej etykiecie. Jeśli na przykład 26% obrazu ma wartość SemanticLabel.SKY
, to wartość rozpowszechnienia dla wartości SemanticLabel.SKY
wynosi 0.26f
.
Aby uzyskać rozpowszechnienie etykiet i wyświetlić je na ekranie:
- W pliku
CodelabRenderer.kt
znajdź ten wiersz:// TODO: Obtain the prevalence of the selected label for this frame.
- Po tym wierszu uzyskaj rozpowszechnienie wybranej etykiety:
activity.view.fractionOfLabel = frame.getSemanticLabelFraction(activity.view.selectedSemanticLabel)
- Uruchom aplikację i skieruj aparat na różne obiekty na zewnątrz. Wartość ułamka zmienia się w zależności od rodzaju obiektu. Aby zmienić wyświetlany ułamek etykiety, kliknij
Ustawienia. Na przykład wpisz BUDYNEK i spróbuj wypełnić widok budynkiem, aby zobaczyć, jak wpłynie to na ułamek.
4. Wizualizacja danych interfejsu Geospatial Depth API
Interfejs Geospatial Depth API poprawia odczyty głębi, gdy włączone są interfejsy Geospatial API i Streetscape Geometry API. Aby korzystać z interfejsu Geospatial Depth API w Kotlinie i Android Studio, potrzebujesz projektu Google Cloud.
Konfigurowanie projektu Google Cloud
ARCore Geospatial API łączy się z Google Cloud, aby dostarczać informacje o lokalizacji z systemu pozycjonowania wizualnego (VPS) Google na obszarach objętych Google Street View.
Aby użyć tego serwera w projekcie, wykonaj te czynności:
- Utwórz projekt w Google Cloud.
- W polu Nazwa projektu wpisz odpowiednią nazwę, np.
ARCore Geospatial API project
, i wybierz dowolną lokalizację. - Kliknij Utwórz.
- W konsoli Google Cloud na stronie wyboru projektu kliknij Utwórz projekt.
- Aby wyświetlić interfejs ARCore API dla tego projektu, kliknij ten link i kliknij Włącz:
- Utwórz klucz interfejsu API dla projektu:
- W sekcji Interfejsy API i usługi wybierz Dane logowania.
- Kliknij Utwórz dane logowania i wybierz Klucz interfejsu API.
- Zapisz klucz, ponieważ będzie Ci później potrzebny.
Masz utworzony projekt Google Cloud z autoryzacją za pomocą klucza interfejsu API i możesz używać interfejsu Geospatial API w projekcie przykładowym.
Zintegruj klucz interfejsu API z projektem Android Studio.
Aby powiązać klucz interfejsu API z Google Cloud z projektem, wykonaj te czynności:
- W Android Studio kliknij app > src i dwukrotnie kliknij
AndroidManifest.xml
. - Znajdź te wpisy
meta-data
:<meta-data android:name="com.google.android.ar.API_KEY" android:value="API_KEY" />
- Zastąp symbol zastępczy
API_KEY
kluczem API utworzonym w projekcie Google Cloud. Wartość przechowywana wcom.google.android.ar.API_KEY
autoryzuje tę aplikację do korzystania z interfejsu Geospatial API.
Weryfikacja projektu
- Aby zweryfikować projekt, uruchom aplikację na urządzeniu deweloperskim. U góry ekranu powinien być widoczny widok z kamery i informacje o debugowaniu geoprzestrzennym.
Włącz wymagane konfiguracje
Interfejs Geospatial Depth API wymaga włączenia w konfiguracji sesji aplikacji 3 ustawień.
Aby je włączyć, wykonaj te czynności:
- W pliku
CodelabRenderer.kt
znajdź ten wiersz:// TODO: Enable the Geospatial API, the Streetscape Geometry API, and the Depth API.
- W następnym wierszu dodaj ten kod:
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. geospatialMode = Config.GeospatialMode.ENABLED streetscapeGeometryMode = Config.StreetscapeGeometryMode.ENABLED depthMode = Config.DepthMode.AUTOMATIC }
Wizualizacja informacji o głębi
- Uruchom aplikację i odwiedź budynek w swojej okolicy.
- Po zakończeniu lokalizacji geoprzestrzennej kliknij
Ustawienia i włącz wizualizację głębi geoprzestrzennej.
- Wyświetl budynek w AR i porównaj go z informacjami o głębi bez głębi geoprzestrzennej.
5. Podsumowanie
Gratulacje! Udało Ci się utworzyć aplikację AR, która wizualizuje semantykę sceny i głębię geoprzestrzenną.