Entender o ambiente do usuário no iOS

Aprenda a usar a API Scene Semantics nos seus apps.

A API Scene Semantics permite que os desenvolvedores entendam o cenário que envolve o usuário, fornecendo informações semânticas em tempo real com base 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 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 dos rótulos de pixel e a imagem de confiança correspondente:

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

Pré-requisitos

Entenda os conceitos básicos de RA e como configurar uma sessão do ARCore antes de continuar.

Ativar a API Scene Semantics

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

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

GARSessionConfiguration *configuration = [[GARSessionConfiguration alloc] init];
if ([self.garSession isSemanticModeSupported:GARSemanticModeEnabled]) {
    configuration.semanticMode = GARSemanticModeEnabled;
}

NSError *error;
[self.garSession setConfiguration:configuration error:&error];

Receber a imagem semântica

Depois que a Semântica de cena é ativada, a imagem semântica pode ser recuperada. A imagem semântica é uma imagem kCVPixelFormatType_OneComponent8, em que cada pixel corresponde a um rótulo semântico definido por GARSemanticLabel.

Use GARFrame.semanticImage para adquirir a imagem semântica:

CVPixelBuffer semanticImage = garFrame.semanticImage;
if (semanticImage) {
    // Use the semantic image here
} else {
    // Semantic images are not available.
    // The output image may be missing for the first couple frames before the model has had a
    // chance to run yet.
}

As imagens semânticas de saída precisam estar disponíveis após cerca de 1 a 3 frames do início da sessão, dependendo do dispositivo.

Receber 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 pixel correspondentes. A imagem de confiança é uma imagem kCVPixelFormatType_OneComponent8, em que cada pixel corresponde a um valor no intervalo [0, 255], correspondente à probabilidade associada ao identificador semântico de cada pixel.

Use GARFrame.semanticConfidenceImage para adquirir a imagem de confiança em semântica:

CVPixelBuffer confidenceImage = garFrame.semanticConfidenceImage;
if (confidenceImage) {
    // Use the semantic image here
} else {
    // Semantic images are not available.
    // The output image may be missing for the first couple frames before the model has had a
    // chance to run yet.
}

As imagens de confiança de saída vão estar disponíveis após cerca de 1 a 3 frames do início da sessão, dependendo do dispositivo.

Consultar a fração de pixels de um rótulo semântico

Também é possível consultar a fração de pixels no frame atual que pertencem a uma classe específica, como o céu. Essa consulta é mais eficiente do que retornar a imagem semântica e realizar uma pesquisa por pixel de um rótulo específico. A fração retornada é um valor flutuante no intervalo [0.0, 1.0].

Use fractionForSemanticLabel: para adquirir a fração de um determinado rótulo:

// Ensure that semantic data is present for the GARFrame.
if (garFrame.semanticImage) {
    float fraction = [garFrame fractionForSemanticLabel:GARSemanticLabelSky];
}