Используйте Raw Depth в своем приложении AR Foundation для Android.

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

Совместимость устройств

Raw Depth доступен на всех устройствах, поддерживающих Depth API . API Raw Depth, как и API Full Depth, не требует поддерживаемого аппаратного датчика глубины, такого как датчик времени пролета (ToF). Однако как Raw Depth API, так и Full Depth API используют любые поддерживаемые аппаратные датчики, которые могут быть на устройстве.

API необработанной глубины и API полной глубины

API Raw Depth предоставляет оценки глубины с более высокой точностью, но необработанные изображения глубины могут не включать оценки глубины для всех пикселей изображения с камеры. Напротив, API полной глубины предоставляет оценку глубины для каждого пикселя, но данные о глубине для каждого пикселя могут быть менее точными из-за сглаживания и интерполяции оценок глубины. Формат и размер изображений глубины одинаковы для обоих API. Отличается только содержание.

В следующей таблице показаны различия между API Raw Depth и API Full Depth с использованием изображения стула и стола на кухне.

API Возврат Изображение с камеры Изображение глубины Уверенный образ
API необработанной глубины
  • Необработанное изображение глубины, содержащее очень точную оценку глубины для некоторых, но не всех пикселей изображения с камеры.
  • Уверенное изображение, которое дает уверенность каждому пикселю необработанного изображения глубины. Пиксели изображения камеры, у которых нет оценки глубины, имеют нулевую достоверность.
Полная глубина API
  • Одно «сглаженное» изображение глубины, содержащее оценку глубины для каждого пикселя.
  • С помощью этого API не предоставляется достоверное изображение.
Н/Д

Изображения уверенности

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

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

Рассчитать стоимость

Стоимость вычислений для API Raw Depth составляет примерно половину стоимости вычислений для API полной глубины.

Варианты использования

С помощью API Raw Depth вы можете получать изображения глубины, которые обеспечивают более детальное представление геометрии объектов на сцене. Необработанные данные о глубине могут быть полезны при создании AR-приложений, где для задач понимания геометрии требуется повышенная точность и детализация глубины. Некоторые варианты использования включают в себя:

  • 3D реконструкция
  • Измерение
  • Обнаружение формы

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

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

Включить глубину

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

var occlusionManager = // Typically acquired from the Camera game object.

// Check whether the user's device supports the Depth API.
if (occlusionManager.descriptor?.supportsEnvironmentDepthImage)
{
    // If depth mode is available on the user's device, perform
    // the steps you want here.
}

Получите последнее необработанное изображение глубины.

Вызовите AROcclusionManager.TryAcquireEnvironmentDepthCpuImage() и используйте AROcclusionManager.environmentDepthTemporalSmoothingRequested чтобы получить последнее необработанное изображение глубины на ЦП.

Получите новейшее изображение с достоверной глубиной изображения.

Вызовите AROcclusionManager.TryAcquireEnvironmentDepthConfidenceCpuImage() и используйте AROcclusionManager.environmentDepthTemporalSmoothingRequested чтобы получить достоверное изображение на ЦП.

// Attempt to get the latest environment depth image.
if (occlusionManager && occlusionManager.TryAcquireEnvironmentDepthConfidenceCpuImage(out XRCpuImage image))
{
    using (image)
    {
        UpdateRawImage(m_RawEnvironmentDepthConfidenceImage, image);
    }
}
else
{
    m_RawEnvironmentDepthConfidenceImage.enabled = false;
}