Inizia a utilizzare le API Scene Semantics e Geospatial Depth in ARCore

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

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:

  1. 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. Ottieni dalla posizione VCS
  2. 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:

  1. Nel file CodelabActivity.kt, trova la seguente riga:
    // TODO: Enable the Scene Semantics API.
    
  2. 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.

Esempio di immagini semantiche

Per ottenere un'immagine semantica e visualizzarla sullo schermo:

  1. Nel file CodelabRenderer.kt, trova la seguente riga:
    // TODO: Obtain the semantic image for this frame.
    
  2. Dopo questa riga, ottieni un'immagine semantica:
    frame.acquireSemanticImage().use { image ->
      semanticRenderer.updateCameraSemanticsTexture(image)
      activity.view.semanticLabelAtCenter = getLabelAt(image, image.width/2, image.height/2)
    }
    
    L'immagine semantica viene utilizzata nella classe SemanticRenderer per la visualizzazione sullo schermo. Aggiorna la variabile semanticLabelAtCenter per visualizzare l'etichetta semantica al centro dello schermo nella visualizzazione dell'app.
  3. Esegui l'app e punta la fotocamera su diversi oggetti all'esterno. La visualizzazione delle etichette semantiche cambia quando esamini diversi tipi di oggetti.
  4. Tocca L'icona delle impostazioni 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:

  1. Nel file CodelabRenderer.kt, trova la seguente riga:
    // TODO: Obtain the confidence image for this frame.
    
  2. Dopo questa riga, ottieni un'immagine semantica:
    frame.acquireSemanticConfidenceImage().use { image ->
      semanticRenderer.updateConfidenceSemanticsTexture(image)
      activity.view.confidenceAtCenter = getConfidenceAt(image, image.width/2, image.height/2)
    }
    
    L'immagine di confidenza semantica viene utilizzata nella classe SemanticRenderer per la visualizzazione sullo schermo. Aggiorna la variabile confidenceAtCenter per visualizzare l'etichetta semantica al centro dello schermo nella visualizzazione dell'app.
  3. Esegui l'app e punta la fotocamera su diversi oggetti all'esterno. La visualizzazione della confidenza semantica cambia quando esamini diversi tipi di oggetti.
  4. Tocca L'icona delle impostazioni 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:

  1. Nel file CodelabRenderer.kt, trova la seguente riga:
    // TODO: Obtain the prevalence of the selected label for this frame.
    
  2. Dopo questa riga, ottieni la prevalenza per l'etichetta selezionata:
    activity.view.fractionOfLabel = frame.getSemanticLabelFraction(activity.view.selectedSemanticLabel)
    
  3. Esegui l'app e punta la fotocamera su diversi oggetti all'esterno. Il valore della frazione cambia quando guardi diversi tipi di oggetti. Tocca L'icona delle impostazioni 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:

  1. Crea un progetto in Google Cloud.

    Crea un progetto Google Cloud
  2. Nel campo Nome progetto, inserisci un nome appropriato, ad esempio ARCore Geospatial API project, e scegli una località.
  3. Fai clic su Crea.
  4. Nella console Google Cloud, nella pagina di selezione del progetto, fai clic su Crea progetto.
  5. Fai clic sul seguente link per visualizzare l'API ARCore per questo progetto e fai clic su Attiva:
  6. Crea una chiave API per il tuo progetto:
    1. In API e servizi, seleziona Credenziali.
    2. Fai clic su Crea credenziali e seleziona Chiave API.
    3. 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:

  1. In Android Studio, fai clic su app > src e doppio clic su AndroidManifest.xml.
  2. Trova le seguenti voci meta-data:
    <meta-data
        android:name="com.google.android.ar.API_KEY"
        android:value="API_KEY" />
    
  3. Sostituisci il segnaposto API_KEY con la chiave API che hai creato nel tuo progetto Google Cloud. Il valore memorizzato in com.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.

Le informazioni geospaziali vengono visualizzate nell&#39;app

Abilitare le configurazioni richieste

L'API Geospatial Depth richiede l'attivazione di tre impostazioni nella configurazione della sessione dell'app.

Per attivarli:

  1. Nel file CodelabRenderer.kt, trova la seguente riga:
    // TODO: Enable the Geospatial API, the Streetscape Geometry API, and the Depth API.
    
  2. 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à

  1. Esegui l'app e visita un edificio nella tua zona.
  2. Al termine della localizzazione geospaziale, tocca L&#39;icona delle impostazioni Impostazioni e attiva la visualizzazione della profondità geospaziale.
  3. 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.

Scopri di più