Pierwsze kroki z interfejsami Scene Semantics API i Geospatial Depth API w ARCore

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

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:

  1. 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. Pobieranie z lokalizacji VCS
  2. 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:

  1. W pliku CodelabActivity.kt znajdź ten wiersz:
    // TODO: Enable the Scene Semantics API.
    
  2. 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.

Przykład obrazów semantycznych

Aby uzyskać obraz semantyczny i wyświetlić go na ekranie, wykonaj te czynności:

  1. W pliku CodelabRenderer.kt znajdź ten wiersz:
    // TODO: Obtain the semantic image for this frame.
    
  2. Po tym wierszu uzyskaj obraz semantyczny:
    frame.acquireSemanticImage().use { image ->
      semanticRenderer.updateCameraSemanticsTexture(image)
      activity.view.semanticLabelAtCenter = getLabelAt(image, image.width/2, image.height/2)
    }
    
    Obraz semantyczny jest używany w klasie SemanticRenderer do wyświetlania na ekranie. Aktualizujesz zmienną semanticLabelAtCenter, aby wyświetlać etykietę semantyczną na środku ekranu w widoku aplikacji.
  3. 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.
  4. Kliknij Ikona ustawień 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:

  1. W pliku CodelabRenderer.kt znajdź ten wiersz:
    // TODO: Obtain the confidence image for this frame.
    
  2. Po tym wierszu pobierz obraz semantyczny:
    frame.acquireSemanticConfidenceImage().use { image ->
      semanticRenderer.updateConfidenceSemanticsTexture(image)
      activity.view.confidenceAtCenter = getConfidenceAt(image, image.width/2, image.height/2)
    }
    
    Obraz z pewnością semantyczną jest używany w klasie SemanticRenderer do wyświetlania na ekranie. Aktualizujesz zmienną confidenceAtCenter, aby wyświetlać etykietę semantyczną na środku ekranu w widoku aplikacji.
  3. 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.
  4. Kliknij Ikona ustawień 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:

  1. W pliku CodelabRenderer.kt znajdź ten wiersz:
    // TODO: Obtain the prevalence of the selected label for this frame.
    
  2. Po tym wierszu uzyskaj rozpowszechnienie wybranej etykiety:
    activity.view.fractionOfLabel = frame.getSemanticLabelFraction(activity.view.selectedSemanticLabel)
    
  3. 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 Ikona ustawień 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:

  1. Utwórz projekt w Google Cloud.

    Tworzenie projektu Google Cloud
  2. W polu Nazwa projektu wpisz odpowiednią nazwę, np. ARCore Geospatial API project, i wybierz dowolną lokalizację.
  3. Kliknij Utwórz.
  4. W konsoli Google Cloud na stronie wyboru projektu kliknij Utwórz projekt.
  5. Aby wyświetlić interfejs ARCore API dla tego projektu, kliknij ten link i kliknij Włącz:
  6. Utwórz klucz interfejsu API dla projektu:
    1. W sekcji Interfejsy API i usługi wybierz Dane logowania.
    2. Kliknij Utwórz dane logowania i wybierz Klucz interfejsu API.
    3. 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:

  1. W Android Studio kliknij app > src i dwukrotnie kliknij AndroidManifest.xml.
  2. Znajdź te wpisy meta-data:
    <meta-data
        android:name="com.google.android.ar.API_KEY"
        android:value="API_KEY" />
    
  3. Zastąp symbol zastępczy API_KEY kluczem API utworzonym w projekcie Google Cloud. Wartość przechowywana w com.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.

Informacje geoprzestrzenne są wyświetlane w aplikacji

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:

  1. W pliku CodelabRenderer.kt znajdź ten wiersz:
    // TODO: Enable the Geospatial API, the Streetscape Geometry API, and the Depth API.
    
  2. 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

  1. Uruchom aplikację i odwiedź budynek w swojej okolicy.
  2. Po zakończeniu lokalizacji geoprzestrzennej kliknij Ikona ustawień Ustawienia i włącz wizualizację głębi geoprzestrzennej.
  3. 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ą.

Więcej informacji