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 uma cena externa, 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 rótulos 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 usar de consultar a prevalência de um determinado rótulo em uma cena externa.
Da esquerda para a direita, exemplos de uma imagem de entrada, a imagem semântica de rótulos de pixel e a imagem de confiança correspondente:
Pré-requisitos
Entenda os conceitos fundamentais de RA. e como configurar uma sessão do ARCore antes de continuar.
Ativar semântica de cena
Em uma nova sessão do ARCore, confira se o dispositivo do usuário é compatível com a API Scene Semantics. Nem todos os dispositivos compatíveis com ARCore têm suporte à 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".
Se estiver usando iOS, a semântica também precisa estar ativada nas configurações do projeto:
- Acesse Editar > Configurações do projeto > Gerenciamento de plug-in XR > Extensões do ARCore.
- Em Recursos opcionais, selecione Semântica no iOS.
Extrair a imagem semântica
Depois que a Scene Semantics for ativada, a imagem semântica poderá 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 receber a imagem semântica:
if (semanticManager.TryGetSemanticTexture(out Texture2D semanticImage))
{
using (semanticImage)
{
// Use the semantic image here.
}
}
As imagens semânticas de saída estarão disponíveis cerca de um a três frames a partir do início da sessão, dependendo do dispositivo.
Obter 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 de valores de confiança de pixel correspondentes. A imagem de confiança é uma imagem TextureFormat.Alpha8
, em que cada pixel corresponde a um valor no intervalo [0, 255]
, que corresponde à 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 estarão disponíveis cerca de um a três frames a partir do início da sessão, dependendo do dispositivo.
Consultar a fração de pixels para encontrar um rótulo semântico
Você também pode consultar a fração de pixels do frame atual que pertencem a uma classe específica, como "sky". Essa consulta é mais eficiente do que retornar a imagem semântica e realizar uma pesquisa por pixel específica 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 rótulo:
var fraction = semanticManager.GetSemanticLabelFraction(SemanticLabel.SKY);