Изучите среду пользователя в Unity AR Foundation.

Узнайте, как использовать API семантики сцены в своих приложениях.

API семантики сцены позволяет разработчикам понять сцену, окружающую пользователя, предоставляя семантическую информацию на основе модели машинного обучения в реальном времени. Учитывая изображение сцены на открытом воздухе, API возвращает метку для каждого пикселя в наборе полезных семантических классов, таких как небо, здание, дерево, дорога, тротуар, транспортное средство, человек и т. д. В дополнение к меткам пикселей API семантики сцены также предлагает значения достоверности для каждой метки пикселя и простой в использовании способ запроса распространенности данной метки в сцене на открытом воздухе.

Слева направо примеры входного изображения, семантического изображения меток пикселей и соответствующего доверительного изображения:

Пример входного изображения, семантического изображения и семантического достоверного изображения.

Предварительные условия

Прежде чем продолжить, убедитесь, что вы понимаете фундаментальные концепции AR и то, как настроить сеанс ARCore .

Включить семантику сцены

В новом сеансе ARCore проверьте, поддерживает ли устройство пользователя API семантики сцены. Не все ARCore-совместимые устройства поддерживают API семантики сцены из-за ограничений вычислительной мощности.

Для экономии ресурсов семантика сцены по умолчанию отключена в ARCore. Включите семантический режим, чтобы ваше приложение использовало API семантики сцены.

В ARCoreExtensionsConfig установите для режима семантики значение «Включено».

Для режима семантики установлено значение «Включено».

При использовании iOS семантику также необходимо включить в настройках проекта:

  1. Перейдите в «Правка» > «Настройки проекта» > «Управление плагинами XR» > «Расширения ARCore» .
  2. В разделе «Дополнительные функции» выберите «Семантика в iOS» .

Семантика в iOS включена в дополнительных функциях.

Получить смысловой образ

После включения семантики сцены можно получить семантическое изображение. Семантическое изображение представляет собой изображение TextureFormat.R8 , где каждый пиксель соответствует семантической метке, определенной SemanticLabel .

Используйте ArSemanticManager.TryGetSemanticTexture() для получения семантического изображения:

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

Выходные смысловые изображения должны быть доступны примерно через 1-3 кадра от начала сеанса, в зависимости от устройства.

Получите имидж уверенности

В дополнение к семантическому изображению, которое предоставляет метку для каждого пикселя, API также предоставляет доверительное изображение соответствующих значений достоверности пикселей. Достоверное изображение — это изображение TextureFormat.Alpha8 , где каждый пиксель соответствует значению в диапазоне [0, 255] , соответствующему вероятности, связанной с семантической меткой для каждого пикселя.

Используйте ArSemanticManager.TryGetSemanticConfidenceTexture() чтобы получить изображение семантической достоверности:

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

Выходные достоверные изображения должны быть доступны примерно через 1–3 кадра с начала сеанса, в зависимости от устройства.

Запрос доли пикселей для семантической метки

Вы также можете запросить долю пикселей в текущем кадре, принадлежащих определенному классу, например небу. Этот запрос более эффективен, чем возврат семантического изображения и выполнение попиксельного поиска конкретной метки. Возвращаемая дробь представляет собой значение с плавающей запятой в диапазоне [0.0, 1.0] .

Используйте ArSemanticManager.GetSemanticLabelFraction() , чтобы получить дробь для данной метки:

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