Configuración de la cámara

CameraConfig describe las propiedades del sensor de la cámara subyacente, incluidas las siguientes:

  • El ID de la cámara
  • Si está disponible, se usará un sensor de profundidad
  • La dirección hacia la que apunta la cámara:
    • frontal (selfie)
    • mirando hacia atrás (mundial)
  • Rango de FPS (fotogramas por segundo)
  • Dimensiones de la imagen de la CPU
  • Dimensión de textura de GPU
  • Si está presente, 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 muestra getSupportedCameraConfigs(CameraConfigFilter). Tu app puede usar CameraConfigFilter para limitar las configuraciones de cámara disponibles para un dispositivo determinado durante el tiempo de ejecución mediante el filtrado según las necesidades de tu app.

Estos son algunos casos de uso comunes para el filtrado:

  • Limitar la velocidad de fotogramas de captura de la cámara a 30 FPS En dispositivos que admiten 60 FPS, ARCore priorizará los parámetros de configuración de la cámara que admitan esa velocidad de fotogramas. Para filtrar todas las configuraciones de la cámara que admiten 60 FPS, aplica un filtro con setTargetFps mediante 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)

  • Evitar que ARCore use el sensor de profundidad En los dispositivos que tienen un sensor de profundidad compatible, ARCore prioriza la configuración de la cámara que usa ese sensor. Para filtrar todas las configuraciones de la cámara que usan el sensor de profundidad, aplica el filtro setDepthSensorUsage con 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 de textura alternativa de GPU. En los dispositivos compatibles, ARCore puede proporcionar resoluciones de textura de GPU adicionales. Seleccionar una textura de GPU de menor resolución puede ayudar a mejorar el rendimiento de la app, ya que se reduce la carga de la GPU y los requisitos de ancho de banda de la memoria, aunque no se garantiza que el rendimiento 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 Sin distracciones

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 la configuración predeterminada de ARCore en la mayoría de los dispositivos). Se requiere el enfoque automático para grabar, fotografiar o grabar videografías, y cuando los objetos cercanos deben estar enfocados.

Para obtener más información, consulta Config.FocusMode.