Como configurar a câmera

CameraConfig descreve as propriedades do sensor da câmera subjacente, incluindo:

  • O ID da câmera
  • Se disponível, se um sensor de profundidade será usado
  • Para onde a câmera está voltada:
    • voltado para frente (selfie)
    • traseira (mundo)
  • Intervalo de QPS (quadros por segundo)
  • Dimensões da imagem da CPU
  • Dimensão de textura da GPU
  • Se presente, informa se o dispositivo com várias câmeras estéreo será usado

Ao criar uma nova sessão, o ARCore usa setCameraConfig para definir a configuração da câmera que melhor corresponde à lista de configurações disponíveis retornada por getSupportedCameraConfigs(CameraConfigFilter). Seu app pode usar CameraConfigFilter para restringir as configurações de câmera disponíveis para um determinado dispositivo durante a execução, filtrando com base nas necessidades do app.

Casos de uso comuns para filtragem incluem:

  • Limitando o frame rate de captura da câmera a 30 QPS. Em dispositivos com suporte a 60 QPS, o ARCore vai priorizar as configurações da câmera que oferecem suporte a esse frame rate. Para filtrar todas as configurações de câmera compatíveis com 60 QPS, aplique um filtro com setTargetFps usando 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)

  • Impedir que o ARCore use o sensor de profundidade. Em dispositivos que têm um sensor de profundidade com suporte, o ARCore prioriza as configurações da câmera que usam o sensor de profundidade. Para filtrar todas as configurações da câmera que usam o sensor de profundidade, aplique o filtro setDepthSensorUsage 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)

  • Como selecionar uma resolução de textura de GPU alternativa. Em dispositivos compatíveis, o ARCore pode oferecer outras resoluções de textura de GPU. A seleção de uma textura de GPU de resolução mais baixa pode ajudar a melhorar o desempenho do app reduzindo a carga da GPU e os requisitos de largura de banda da memória. No entanto, não é garantido que melhore o desempenho em todos os casos.

Como usar filtros de configuração da câmera

Siga estas etapas para que seu app filtre as configurações da câmera.

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 sem distrações

Você também pode definir o modo de foco na configuração da sessão. O foco fixo geralmente é melhor para rastreamento e é o padrão do ARCore na maioria dos dispositivos. O foco automático é necessário para gravação, fotografia, videografia e quando objetos próximos precisam estar em foco.

Consulte Config.FocusMode para ver mais detalhes.