Entenda o ambiente do usuário na AR Foundation da Unity

Aprenda a usar a API Scene Semantics nos seus próprios apps.

A API Scene Semantics permite que os desenvolvedores entendam o cenário ao redor do usuário fornecendo informações semânticas em tempo real baseadas em modelos de ML. Dada uma imagem de um cenário externo, a API retorna um rótulo para cada pixel em um conjunto de classes semânticas úteis, como céu, edifício, árvore, estrada, calçada, veículo, pessoa e muito mais. Além dos identificadores de pixel, a API Scene Semantics também oferece valores de confiança para cada rótulo de pixel e uma maneira fácil de consultar a prevalência de um determinado rótulo em uma cena ao ar livre.

Da esquerda para a direita, exemplos de uma imagem de entrada, a imagem semântica dos rótulos de pixel e a imagem de confiança correspondente:

Exemplo de imagem de entrada, imagem semântica e de confiança semântica.

Pré-requisitos

Verifique se você entendeu os conceitos fundamentais de RA e como configurar uma sessão do ARCore antes de continuar.

Ativar Scene Semantics

Em uma nova sessão do ARCore, verifique se o dispositivo de um usuário oferece suporte à API Scene Semantics. Nem todos os dispositivos compatíveis com ARCore aceitam a API Scene Semantics devido a restrições de capacidade de processamento.

Para economizar recursos, o Scene Semantics é desativado por padrão no ARCore. Ative o modo semântico para que o app use a API Scene Semantics.

Em ARCoreExtensionsConfig, defina o modo Semântico como "Ativado".

Modo semântico definido como Ativado.

Se você usa o iOS, a ferramenta Semântica também precisa estar ativada nas configurações do projeto:

  1. Navegue até Edit > Project Settings > XR Plug-In Management > ARCore Extensions.
  2. Em Recursos opcionais, selecione Semântica no iOS.

Semântica no iOS ativada em recursos opcionais.

Receber a imagem semântica

Depois que o Scene Semantics é ativado, a imagem semântica pode ser recuperada. A imagem semântica é uma imagem TextureFormat.R8, em que cada pixel corresponde a um rótulo semântico definido por SemanticLabel.

Use ArSemanticManager.TryGetSemanticTexture() para adquirir a imagem semântica:

if (semanticManager.TryGetSemanticTexture(out Texture2D semanticImage))
{
    using (semanticImage)
    {
        // Use the semantic image here.
    }
}

As imagens semânticas de saída vão estar disponíveis cerca de um a três frames depois do início da sessão, dependendo do dispositivo.

Conseguir a imagem de confiança

Além da imagem semântica, que fornece um rótulo para cada pixel, a API também fornece uma imagem de confiança dos valores de confiança de pixels correspondentes. A imagem de confiança é uma imagem TextureFormat.Alpha8, em que cada pixel corresponde a um valor no intervalo [0, 255], correspondendo à probabilidade associada ao rótulo semântico de cada pixel.

Use ArSemanticManager.TryGetSemanticConfidenceTexture() para adquirir a imagem de confiança semântica:

if (semanticManager.TryGetSemanticConfidenceTexture(out Texture2D semanticConfidenceImage))
{
    using (semanticConfidenceImage)
    {
        // Use the semantic confidence image here.
    }
}

As imagens de confiança de saída vão estar disponíveis cerca de um a três frames depois do início da sessão, dependendo do dispositivo.

Consultar a fração de pixels para obter um identificador semântico

Você também pode consultar a fração de pixels no frame atual que pertence a uma determinada classe, como o céu. Essa consulta é mais eficiente do que retornar a imagem semântica e realizar uma pesquisa de pixels para um rótulo específico. A fração retornada é um valor flutuante no intervalo [0.0, 1.0].

Use ArSemanticManager.GetSemanticLabelFraction() para adquirir a fração de um determinado identificador:

var fraction = semanticManager.GetSemanticLabelFraction(SemanticLabel.SKY);