1. Hinweis
ARCore ist das Framework von Google zum Erstellen von Augmented-Reality-Apps (AR) für Smartphones. Mit den APIs für Szenensemantik und räumliche Tiefe können Ihre AR-Anwendungen die Umgebung Ihrer Nutzer besser erfassen.
Die Scene Semantics API verwendet ein Modell für maschinelles Lernen (ML), um Kamerabilder zu analysieren und ein Bild mit gekennzeichneten Pixeln zu erstellen. Es kann zwischen 11 verschiedenen Outdoor-Labels unterscheiden.
Die Geospatial Depth API kombiniert Tiefeninformationen aus Bewegung und aktiven Hardwaresensoren wie Time-of-Flight mit Daten der Streetscape Geometry API. Dadurch werden Fehler bei Tiefenbeobachtungen in einer Entfernung von bis zu 65 Metern reduziert.
In diesem Codelab erstellen Sie eine AR-App, die die Ergebnisse der Scene Semantics API und der Geospatial Depth API visualisiert.
Vorbereitung
- Grundkenntnisse in AR
Lerninhalte
- So aktivieren Sie die Scene Semantics API.
- So rufen Sie ein semantisches Bild ab und visualisieren es.
- So rufen Sie ein semantisches Vertrauensbild ab und visualisieren es.
- So ermitteln Sie, welcher Prozentsatz der Pixel einem bestimmten Label entspricht.
- Hier erfahren Sie, wie Sie ein Google Cloud-Projekt einrichten, in dem ARCore Geospatial APIs verwendet werden können.
- So aktivieren Sie die Geospatial Depth API.
- Informationen zum Visualisieren von Tiefenbildern.
Voraussetzungen
- Ein unterstütztes ARCore-Android-Gerät, das über ein USB-Kabel mit Ihrem Entwicklungscomputer verbunden und für USB-Debugging konfiguriert ist.
- Google Play-Dienste für AR 1.37 oder höher auf dem Android-Entwicklungsgerät installiert.
- Android Studio ist installiert und für die Entwicklung von Android-Apps konfiguriert.
2. Umgebung einrichten
Für den Einstieg in die Geospatial API haben wir ein Startprojekt mit den Grundlagen eines ARCore-Projekts und einigen Hilfsfunktionen bereitgestellt.
So richten Sie das Starterprojekt ein:
- Öffnen Sie Android Studio und führen Sie einen der folgenden Schritte aus:
- Wenn Sie bereits ein Projekt geöffnet haben, klicken Sie auf File > New > Project from version control (Datei > Neu > Projekt aus der Versionskontrolle).
- Wenn das Fenster Welcome to Android Studio angezeigt wird, klicken Sie auf Get from VCS.
- Wählen Sie Git aus und geben Sie
https://github.com/google-ar/codelab-scene-semantics-geospatial-depth.git
ein, um das Projekt zu importieren.
3. Daten der Scene Semantics API visualisieren
Scene Semantics API aktivieren
Die Scene Semantics API ist standardmäßig deaktiviert, um Rechenleistung zu sparen.
So aktivieren Sie die Scene Semantics API:
- Suchen Sie in der Datei
CodelabActivity.kt
nach der folgenden Zeile:// TODO: Enable the Scene Semantics API.
- Wenn Ihr Gerät die Scene Semantics API unterstützt, aktivieren Sie sie nach dieser Zeile in der Konfiguration der Sitzung:
if (session.isSemanticModeSupported(Config.SemanticMode.ENABLED)) { semanticMode = Config.SemanticMode.ENABLED }
Semantisches Bild abrufen und visualisieren
Das semantische Bild ist das Ergebnis des ARCore-ML-Modells, das jedem Pixel im Kamerafeed einen SemanticLabel
-Enum zuweist.
So erhalten Sie ein semantisches Bild und lassen es auf dem Bildschirm anzeigen:
- Suchen Sie in der Datei
CodelabRenderer.kt
nach der folgenden Zeile:// TODO: Obtain the semantic image for this frame.
- Nach dieser Zeile ein semantisches Bild abrufen:
Das semantische Bild wird in der Klasseframe.acquireSemanticImage().use { image -> semanticRenderer.updateCameraSemanticsTexture(image) activity.view.semanticLabelAtCenter = getLabelAt(image, image.width/2, image.height/2) }
SemanticRenderer
für die Anzeige auf dem Bildschirm verwendet. Sie aktualisieren die VariablesemanticLabelAtCenter
, damit das semantische Label in der Ansicht der App in der Mitte des Bildschirms angezeigt wird. - Führen Sie Ihre App aus und richten Sie die Kamera auf verschiedene Objekte im Freien. Die Anzeige semantischer Labels ändert sich, wenn Sie sich verschiedene Arten von Objekten ansehen.
- Tippen Sie auf
Einstellungen, um die Bildüberlagerung für semantische Vertrauenswürdigkeit zu aktivieren.
Semantisches Vertrauensbild abrufen und visualisieren
Das semantische Konfidenzbild gibt an, wie sicher ARCore in Bezug auf das semantische Label am entsprechenden Pixel ist.
So erhalten Sie ein semantisches Bild und lassen es auf dem Bildschirm anzeigen:
- Suchen Sie in der Datei
CodelabRenderer.kt
nach der folgenden Zeile:// TODO: Obtain the confidence image for this frame.
- Nach dieser Zeile ein semantisches Bild abrufen:
Das Bild mit semantischem Vertrauen wird in der Klasseframe.acquireSemanticConfidenceImage().use { image -> semanticRenderer.updateConfidenceSemanticsTexture(image) activity.view.confidenceAtCenter = getConfidenceAt(image, image.width/2, image.height/2) }
SemanticRenderer
zur Anzeige auf dem Bildschirm verwendet. Sie aktualisieren die VariableconfidenceAtCenter
, damit das semantische Label in der Ansicht der App in der Mitte des Bildschirms angezeigt wird. - Führen Sie Ihre App aus und richten Sie die Kamera auf verschiedene Objekte im Freien. Die Anzeige der semantischen Zuverlässigkeit ändert sich, wenn Sie sich verschiedene Arten von Objekten ansehen.
- Tippen Sie auf
Einstellungen, um die Bildüberlagerung für semantische Vertrauenswürdigkeit zu aktivieren.
Häufigkeit eines Labels ermitteln
Die Häufigkeit eines Labels ist der Prozentsatz eines semantischen Bildes, der einem bestimmten Label entspricht. Wenn beispielsweise 26% des Bildes den Wert SemanticLabel.SKY
haben, ist der Häufigkeitswert für den Wert SemanticLabel.SKY
gleich 0.26f
.
So rufen Sie die Häufigkeit von Labels ab und lassen sie auf dem Bildschirm anzeigen:
- Suchen Sie in der Datei
CodelabRenderer.kt
nach der folgenden Zeile:// TODO: Obtain the prevalence of the selected label for this frame.
- Ermitteln Sie nach dieser Zeile die Häufigkeit für das ausgewählte Label:
activity.view.fractionOfLabel = frame.getSemanticLabelFraction(activity.view.selectedSemanticLabel)
- Führen Sie Ihre App aus und richten Sie die Kamera auf verschiedene Objekte im Freien. Der Bruchwert ändert sich, wenn Sie sich verschiedene Arten von Objekten ansehen. Tippen Sie auf
Einstellungen, um den angezeigten Labelanteil zu ändern. Versuchen Sie es beispielsweise mit BUILDING und füllen Sie den Viewport mit einem Gebäude. Beobachten Sie, wie sich das auf den Bruch auswirkt.
4. Geospatial Depth API-Daten visualisieren
Die Geospatial Depth API verbessert die Tiefenmessungen, wenn die Geospatial API und die Streetscape Geometry API aktiviert sind. Wenn Sie die Geospatial Depth API mit Kotlin und Android Studio verwenden möchten, benötigen Sie ein Google Cloud-Projekt.
Google Cloud-Projekt einrichten
Die ARCore Geospatial API stellt eine Verbindung zu Google Cloud her, um Lokalisierungsinformationen aus dem Visual Positioning System (VPS) von Google in Gebieten bereitzustellen, die von Google Street View abgedeckt werden.
So verwenden Sie diesen Server in Ihrem Projekt:
- Erstellen Sie ein Projekt in Google Cloud.
- Geben Sie im Feld Project name (Projektname) einen geeigneten Namen ein, z. B.
ARCore Geospatial API project
, und wählen Sie einen beliebigen Ort aus. - Klicken Sie auf Erstellen.
- Klicken Sie in der Google Cloud Console auf der Seite für die Projektauswahl auf Projekt erstellen.
- Klicken Sie auf den folgenden Link, um die ARCore API für dieses Projekt aufzurufen, und klicken Sie auf Aktivieren:
- Erstellen Sie einen API-Schlüssel für Ihr Projekt:
- Wählen Sie unter APIs & Dienste die Option Anmeldedaten aus.
- Klicken Sie auf Anmeldedaten erstellen und wählen Sie den API-Schlüssel aus.
- Notieren Sie sich den Schlüssel, da Sie ihn später benötigen.
Sie haben ein Google Cloud-Projekt mit API-Schlüssel-Autorisierung erstellt und können die Geospatial API im Beispielprojekt verwenden.
API-Schlüssel in das Android Studio-Projekt einbinden
So verknüpfen Sie den API-Schlüssel aus Google Cloud mit Ihrem Projekt:
- Klicken Sie in Android Studio auf app > src und doppelklicken Sie auf
AndroidManifest.xml
. - Suchen Sie nach den folgenden
meta-data
-Einträgen:<meta-data android:name="com.google.android.ar.API_KEY" android:value="API_KEY" />
- Ersetzen Sie den Platzhalter
API_KEY
durch den API-Schlüssel, den Sie in Ihrem Google Cloud-Projekt erstellt haben. Der incom.google.android.ar.API_KEY
gespeicherte Wert autorisiert diese App zur Verwendung der Geospatial API.
Projekt bestätigen
- Um Ihr Projekt zu bestätigen, führen Sie Ihre App auf Ihrem Entwicklungsgerät aus. Oben auf dem Bildschirm sollten Sie eine Kameraansicht und Geodaten-Debugging-Informationen sehen.
Erforderliche Konfigurationen aktivieren
Für die Geospatial Depth API müssen drei Einstellungen in der Sitzungskonfiguration Ihrer App aktiviert sein.
So aktivieren Sie sie:
- Suchen Sie in der Datei
CodelabRenderer.kt
nach der folgenden Zeile:// TODO: Enable the Geospatial API, the Streetscape Geometry API, and the Depth API.
- Fügen Sie in der nächsten Zeile den folgenden Code hinzu:
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 }
Tiefeninformationen visualisieren
- Führen Sie Ihre App aus und rufen Sie ein Gebäude in Ihrer Nähe auf.
- Tippen Sie nach Abschluss der raumbezogenen Lokalisierung auf
Einstellungen und aktivieren Sie die raumbezogene Tiefenvisualisierung.
- Das Gebäude in AR ansehen und mit den Tiefeninformationen ohne geospatiale Tiefe vergleichen.
5. Fazit
Glückwunsch! Sie haben eine AR-App entwickelt, die die Semantik von Szenen und die raumbezogene Tiefe visualisiert.