Настройка камеры

CameraConfig описывает свойства базового датчика камеры, в том числе:

  • Идентификатор камеры
  • Если доступен, будет ли использоваться датчик глубины.
  • Направление камеры:
    • фронтальная (селфи)
    • лицом назад (мир)
  • Диапазон FPS (кадров в секунду)
  • Размеры образа процессора
  • Размер текстуры графического процессора
  • Если присутствует, будет ли использоваться стереомногокамера устройства.

При создании нового сеанса ARCore ARCore использует setCameraConfig для установки конфигурации камеры, которая лучше всего соответствует списку доступных конфигураций, возвращаемому getSupportedCameraConfigs(CameraConfigFilter) . Ваше приложение может использовать CameraConfigFilter , чтобы сузить доступные конфигурации камеры для данного устройства во время выполнения путем фильтрации на основе потребностей вашего приложения.

Общие случаи использования фильтрации включают в себя:

  • Ограничение частоты кадров при захвате камеры до 30 кадров в секунду . На устройствах, поддерживающих частоту кадров 60 кадров в секунду, ARCore будет отдавать приоритет конфигурациям камер, поддерживающим эту частоту кадров. Чтобы отфильтровать все конфигурации камеры, поддерживающие 60 кадров в секунду, примените фильтр с помощью setTargetFps , используя TargetFps.TARGET_FPS_30 .

    Джава

    // Return only camera configs that target 30 FPS camera capture frame rate.
    filter.setTargetFps(EnumSet.of(CameraConfig.TargetFps.TARGET_FPS_30));

    Котлин

    // Return only camera configs that target 30 FPS camera capture frame rate.
    filter.targetFps = EnumSet.of(CameraConfig.TargetFps.TARGET_FPS_30)

  • Запретите ARCore использовать датчик глубины . На устройствах с поддерживаемым датчиком глубины ARCore отдает приоритет конфигурациям камеры, использующим датчик глубины. Чтобы отфильтровать все конфигурации камеры, использующие датчик глубины, примените фильтр setDepthSensorUsage с помощью DepthSensorUsage.DO_NOT_USE .

    Джава

    // Return only camera configs that will not use the depth sensor.
    filter.setDepthSensorUsage(EnumSet.of(CameraConfig.DepthSensorUsage.DO_NOT_USE));

    Котлин

    // Return only camera configs that will not use the depth sensor.
    filter.depthSensorUsage = EnumSet.of(CameraConfig.DepthSensorUsage.DO_NOT_USE)

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

Использование фильтров конфигурации камеры

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

Джава

// Create a camera config filter for the session.
CameraConfigFilter filter = new CameraConfigFilter(session);

// Return only camera configs that target 30 fps camera capture frame rate.
filter.setTargetFps(EnumSet.of(CameraConfig.TargetFps.TARGET_FPS_30));

// Return only camera configs that will not use the depth sensor.
filter.setDepthSensorUsage(EnumSet.of(CameraConfig.DepthSensorUsage.DO_NOT_USE));

// Get list of configs that match filter settings.
// In this case, this list is guaranteed to contain at least one element,
// because both TargetFps.TARGET_FPS_30 and DepthSensorUsage.DO_NOT_USE
// are supported on all ARCore supported devices.
List<CameraConfig> cameraConfigList = session.getSupportedCameraConfigs(filter);

// Use element 0 from the list of returned camera configs. This is because
// it contains the camera config that best matches the specified filter
// settings.
session.setCameraConfig(cameraConfigList.get(0));

Котлин

// Create a camera config filter for the session.
val filter = CameraConfigFilter(session)

// Return only camera configs that target 30 fps camera capture frame rate.
filter.targetFps = EnumSet.of(CameraConfig.TargetFps.TARGET_FPS_30)

// Return only camera configs that will not use the depth sensor.
filter.depthSensorUsage = EnumSet.of(CameraConfig.DepthSensorUsage.DO_NOT_USE)

// Get list of configs that match filter settings.
// In this case, this list is guaranteed to contain at least one element,
// because both TargetFps.TARGET_FPS_30 and DepthSensorUsage.DO_NOT_USE
// are supported on all ARCore supported devices.
val cameraConfigList = session.getSupportedCameraConfigs(filter)

// Use element 0 from the list of returned camera configs. This is because
// it contains the camera config that best matches the specified filter
// settings.
session.cameraConfig = cameraConfigList[0]

Режим фокусировки

Вы также можете установить режим фокусировки в конфигурации сеанса. Фиксированный фокус обычно лучше подходит для отслеживания (и это значение ARCore по умолчанию на большинстве устройств). Автоматическая фокусировка необходима для записи, фото- и видеосъемки, а также когда близлежащие объекты должны быть в фокусе.

Подробности см. в Config.FocusMode .