1. Prima di iniziare
ARCore è il framework di Google per la creazione di esperienze di realtà aumentata (AR) sugli smartphone. Le API Scene Semantics e Geospatial Depth aiutano le tue esperienze AR a comprendere l'ambiente circostante gli utenti.
L'API Scene Semantics utilizza un modello di machine learning (ML) per analizzare le immagini della videocamera e fornire un'immagine dei pixel etichettati. Può distinguere tra 11 diverse etichette per esterni.
L'API Geospatial Depth combina le informazioni sulla profondità del movimento e di eventuali sensori hardware attivi, come il tempo di volo, con i dati dell'API Streetscape Geometry. Migliora gli errori nelle osservazioni di profondità fino a 65 metri di distanza.
In questo codelab, creerai un'app AR che visualizza i risultati delle API Scene Semantics e Geospatial Depth.
Prerequisiti
- Conoscenza di base della AR
Obiettivi didattici
- Come abilitare l'API Scene Semantics.
- Come ottenere e visualizzare un'immagine semantica.
- Come ottenere e visualizzare un'immagine di confidenza semantica.
- Come determinare la percentuale di pixel corrispondente a una determinata etichetta.
- Come configurare un progetto Google Cloud che possa utilizzare le API ARCore Geospatial.
- Come abilitare l'API Geospatial Depth.
- Come visualizzare le immagini di profondità.
Che cosa ti serve
- Un dispositivo Android ARCore supportato collegato con un cavo USB alla macchina di sviluppo e configurato con il debug USB.
- Google Play Services per AR 1.37 o versioni successive installato sul dispositivo di sviluppo Android.
- Android Studio installato e configurato per creare app per Android.
2. Configura l'ambiente
Per iniziare a utilizzare l'API Geospatial, abbiamo fornito un progetto iniziale che include le basi di un progetto ARCore e alcune funzioni di assistenza.
Per configurare il progetto iniziale, segui questi passaggi:
- Apri Android Studio ed esegui una delle seguenti operazioni:
- Se hai già aperto un progetto, fai clic su File > Nuovo > Progetto dal controllo della versione.
- Se visualizzi la finestra Benvenuto in Android Studio, fai clic su Ottieni da VCS.
- Seleziona Git e inserisci
https://github.com/google-ar/codelab-scene-semantics-geospatial-depth.git
per importare il progetto.
3. Visualizzare i dati dell'API Scene Semantics
Abilita l'API Scene Semantics
L'API Scene Semantics è disabilitata per impostazione predefinita per risparmiare potenza di elaborazione.
Per abilitare l'API Scene Semantics, segui questi passaggi:
- Nel file
CodelabActivity.kt
, trova la seguente riga:// TODO: Enable the Scene Semantics API.
- Dopo questa riga, se il tuo dispositivo la supporta, attiva l'API Scene Semantics nella configurazione della sessione:
if (session.isSemanticModeSupported(Config.SemanticMode.ENABLED)) { semanticMode = Config.SemanticMode.ENABLED }
Ottenere e visualizzare un'immagine semantica
L'immagine semantica è il risultato del modello ML ARCore che assegna un'enumerazione SemanticLabel
a ogni pixel nel feed della videocamera.
Per ottenere un'immagine semantica e visualizzarla sullo schermo:
- Nel file
CodelabRenderer.kt
, trova la seguente riga:// TODO: Obtain the semantic image for this frame.
- Dopo questa riga, ottieni un'immagine semantica:
L'immagine semantica viene utilizzata nella classeframe.acquireSemanticImage().use { image -> semanticRenderer.updateCameraSemanticsTexture(image) activity.view.semanticLabelAtCenter = getLabelAt(image, image.width/2, image.height/2) }
SemanticRenderer
per la visualizzazione sullo schermo. Aggiorna la variabilesemanticLabelAtCenter
per visualizzare l'etichetta semantica al centro dello schermo nella visualizzazione dell'app. - Esegui l'app e punta la fotocamera su diversi oggetti all'esterno. La visualizzazione delle etichette semantiche cambia quando esamini diversi tipi di oggetti.
- Tocca
Impostazioni per attivare la sovrapposizione di immagini con confidenza semantica.
Ottenere e visualizzare un'immagine di confidenza semantica
L'immagine di confidenza semantica indica il livello di affidabilità di ARCore nell'etichetta semantica del pixel corrispondente.
Per ottenere un'immagine semantica e visualizzarla sullo schermo:
- Nel file
CodelabRenderer.kt
, trova la seguente riga:// TODO: Obtain the confidence image for this frame.
- Dopo questa riga, ottieni un'immagine semantica:
L'immagine di confidenza semantica viene utilizzata nella classeframe.acquireSemanticConfidenceImage().use { image -> semanticRenderer.updateConfidenceSemanticsTexture(image) activity.view.confidenceAtCenter = getConfidenceAt(image, image.width/2, image.height/2) }
SemanticRenderer
per la visualizzazione sullo schermo. Aggiorna la variabileconfidenceAtCenter
per visualizzare l'etichetta semantica al centro dello schermo nella visualizzazione dell'app. - Esegui l'app e punta la fotocamera su diversi oggetti all'esterno. La visualizzazione della confidenza semantica cambia quando esamini diversi tipi di oggetti.
- Tocca
Impostazioni per attivare la sovrapposizione di immagini con confidenza semantica.
Determinare la prevalenza di un'etichetta
La prevalenza di un'etichetta è la percentuale di un'immagine semantica uguale a una determinata etichetta. Ad esempio, se il 26% dell'immagine ha il valore SemanticLabel.SKY
, il valore di prevalenza per il valore SemanticLabel.SKY
è 0.26f
.
Per ottenere la prevalenza delle etichette e visualizzarle sullo schermo:
- Nel file
CodelabRenderer.kt
, trova la seguente riga:// TODO: Obtain the prevalence of the selected label for this frame.
- Dopo questa riga, ottieni la prevalenza per l'etichetta selezionata:
activity.view.fractionOfLabel = frame.getSemanticLabelFraction(activity.view.selectedSemanticLabel)
- Esegui l'app e punta la fotocamera su diversi oggetti all'esterno. Il valore della frazione cambia quando guardi diversi tipi di oggetti. Tocca
Impostazioni per modificare la frazione dell'etichetta visualizzata. Ad esempio, prova con EDIFICIO e cerca di riempire il riquadro con un edificio per vedere come influisce sulla frazione.
4. Visualizzare i dati dell'API Geospatial Depth
L'API Geospatial Depth migliora le letture della profondità quando sono abilitate le API Geospatial e Streetscape Geometry. Per utilizzare l'API Geospatial Depth con Kotlin e Android Studio, devi disporre di un progetto Google Cloud.
Configura un progetto Google Cloud
L'API ARCore Geospatial si connette a Google Cloud per fornire informazioni di localizzazione dal Visual Positioning System (VPS) di Google nelle aree coperte da Google Street View.
Per utilizzare questo server nel tuo progetto:
- Crea un progetto in Google Cloud.
- Nel campo Nome progetto, inserisci un nome appropriato, ad esempio
ARCore Geospatial API project
, e scegli una località. - Fai clic su Crea.
- Nella console Google Cloud, nella pagina di selezione del progetto, fai clic su Crea progetto.
- Fai clic sul seguente link per visualizzare l'API ARCore per questo progetto e fai clic su Attiva:
- Crea una chiave API per il tuo progetto:
- In API e servizi, seleziona Credenziali.
- Fai clic su Crea credenziali e seleziona Chiave API.
- Prendi nota della chiave perché ti servirà in seguito.
Hai creato un progetto Google Cloud con autorizzazione tramite chiave API e sei pronto per utilizzare l'API Geospatial nel progetto di esempio.
Integrare la chiave API con il progetto Android Studio
Per associare la chiave API di Google Cloud al tuo progetto:
- In Android Studio, fai clic su app > src e doppio clic su
AndroidManifest.xml
. - Trova le seguenti voci
meta-data
:<meta-data android:name="com.google.android.ar.API_KEY" android:value="API_KEY" />
- Sostituisci il segnaposto
API_KEY
con la chiave API che hai creato nel tuo progetto Google Cloud. Il valore memorizzato incom.google.android.ar.API_KEY
autorizza questa app a utilizzare l'API Geospatial.
Verificare il progetto
- Per verificare il progetto, esegui l'app sul dispositivo di sviluppo. Nella parte superiore dello schermo dovresti vedere una visualizzazione della videocamera e informazioni di debug geospaziali.
Abilitare le configurazioni richieste
L'API Geospatial Depth richiede l'attivazione di tre impostazioni nella configurazione della sessione dell'app.
Per attivarli:
- Nel file
CodelabRenderer.kt
, trova la seguente riga:// TODO: Enable the Geospatial API, the Streetscape Geometry API, and the Depth API.
- Nella riga successiva, aggiungi il seguente codice:
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 }
Visualizzare le informazioni sulla profondità
- Esegui l'app e visita un edificio nella tua zona.
- Al termine della localizzazione geospaziale, tocca
Impostazioni e attiva la visualizzazione della profondità geospaziale.
- Visualizza l'edificio in AR e confrontalo con le informazioni sulla profondità senza profondità geospaziale.
5. Conclusione
Complimenti! Hai creato un'app AR che visualizza la semantica della scena e la profondità geospaziale.