Configuración de la cámara

CameraConfig describe las propiedades del elemento sensor de la cámara subyacente, que incluye lo siguiente:

  • El ID de la cámara
  • Si está disponible, indica si se usará un sensor de profundidad
  • La dirección a la que apunta la cámara:
    • frontal (selfie)
    • orientado hacia atrás (en todo el mundo)
  • Rango de FPS (fotogramas por segundo)
  • Dimensiones de la imagen de la CPU
  • Dimensión de la textura de la GPU
  • Si está presente, indica si se usará la multicámara estéreo del dispositivo

Cuando se crea una nueva sesión de ARCore, ARCore usa setCameraConfig para establecer la configuración de la cámara que mejor coincida con la lista de parámetros de configuración disponibles que devuelve getSupportedCameraConfigs(CameraConfigFilter) Tu app puede usar CameraConfigFilter para reducir los parámetros de configuración disponibles de la cámara para un dispositivo determinado en el tiempo de ejecución filtrado según las necesidades de tu app.

Entre los casos de uso comunes para el filtrado, se incluyen los siguientes:

  • Limitar la velocidad de fotogramas de captura de la cámara a 30 FPS. En dispositivos compatibles 60 FPS, ARCore priorizará las configuraciones de cámara que admitan eso velocidad de fotogramas. Para filtrar todas las configuraciones de cámara que admiten 60 FPS, haz lo siguiente: aplicar un filtro con setTargetFps con TargetFps.TARGET_FPS_30.

    Java

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

    Kotlin

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

  • Evita que ARCore use el sensor de profundidad. En los dispositivos que tienen con un sensor de profundidad compatible, ARCore prioriza las configuraciones de la cámara que usan la profundidad sensor. Para filtrar todos los parámetros de configuración de la cámara que usan el sensor de profundidad, aplica el filtro setDepthSensorUsage filtro usando DepthSensorUsage.DO_NOT_USE.

    Java

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

    Kotlin

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

  • Selecciona una resolución alternativa de textura de GPU. Activada dispositivos compatibles, ARCore puede proporcionar resoluciones adicionales de textura de GPU. Selección de una textura de GPU de menor resolución puede ayudar a mejorar el rendimiento de la app reduciendo la carga de la GPU y la memoria de ancho de banda, aunque no se garantiza que mejore el rendimiento en en todos los casos.

Cómo usar los filtros de configuración de la cámara

Sigue estos pasos para permitir que tu app filtre los parámetros de configuración de la cámara.

Java

// 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));

Kotlin

// 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]

Modo de enfoque

También puedes establecer el modo de enfoque en la configuración de la sesión. Por lo general, el enfoque fijo es mejor para el seguimiento (y es el valor predeterminado de ARCore en la mayoría de los dispositivos). Se requiere el enfoque automático para grabar, tomar fotografías y videografías, así como cuando los objetos cercanos deben estar en foco.

Consulta Config.FocusMode para conocer los detalles.