Como configurar a câmera

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

  • O ID da câmera
  • Se disponível, se um sensor de profundidade será usado
  • A direção para a qual a câmera está voltada:
    • frontal (selfie)
    • traseira (mundo)
  • Intervalo de QPS (quadros por segundo)
  • Dimensões da imagem da CPU
  • Dimensão de textura da GPU
  • Se estiver presente, se a multicâmera estéreo do dispositivo será usada

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

Casos de uso comuns para filtragem incluem:

  • Limitação do frame rate da captura da câmera a 30 QPS. Em dispositivos compatíveis 60 qps, o ARCore priorizará as configurações da câmera com suporte a isso frame rate. Para filtrar todas as configurações de câmera com suporte a 60 QPS, faça o seguinte: aplicar 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)

  • Impede que o ARCore use o sensor de profundidade. Em dispositivos com com suporte ao sensor de profundidade, o ARCore prioriza as configurações da câmera que usam a profundidade sensor Para filtrar todas as configurações da câmera que usam o sensor de profundidade, aplique o 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)

  • Como selecionar uma resolução de textura de GPU alternativa. Ativado dispositivos compatíveis, o ARCore pode oferecer resoluções de textura de GPU adicionais. Como selecionar uma textura da GPU de resolução mais baixa pode ajudar a melhorar o desempenho do aplicativo reduzindo a carga da GPU e diminuindo a memória requisitos de largura de banda, embora não seja garantido que ele irá melhorar o desempenho em para todos os casos.

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

Siga estas etapas para permitir 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

Também é possível 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 mais detalhes.