Configurazione della fotocamera

CameraConfig descrive le proprietà del sensore della fotocamera sottostante, tra cui:

  • L'ID della videocamera
  • Se disponibile, se verrà utilizzato un sensore di profondità
  • La direzione in cui è rivolta la fotocamera:
    • frontale (selfie)
    • all'indietro (mondo)
  • Intervallo di FPS (frame al secondo)
  • Dimensioni immagine CPU
  • Dimensione texture GPU
  • Se presente, se verrà utilizzata la multicamera stereo del dispositivo

Quando crea una nuova sessione ARCore, ARCore utilizza setCameraConfig per impostare la configurazione della videocamera che meglio corrisponde all'elenco di configurazioni disponibili restituite da getSupportedCameraConfigs(CameraConfigFilter). La tua app può utilizzare CameraConfigFilter per restringere le configurazioni della fotocamera disponibili per un determinato dispositivo in fase di runtime filtrando in base alle esigenze dell'app.

I casi d'uso comuni per l'applicazione di filtri includono:

  • Limitazione della frequenza fotogrammi dell'acquisizione della fotocamera a 30 f/s. Sui dispositivi che supportano la frequenza fotogrammi a 60 f/s, ARCore dà la priorità alle configurazioni delle videocamere che supportano quella frequenza fotogrammi. Per filtrare tutte le configurazioni della fotocamera che supportano 60 f/s, applica un filtro con setTargetFps utilizzando 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)

  • Impedire ad ARCore di utilizzare il sensore di profondità. Sui dispositivi che dispongono di un sensore di profondità supportato, ARCore dà la priorità alle configurazioni delle videocamere che utilizzano il sensore di profondità. Per filtrare tutte le configurazioni della fotocamera che utilizzano il sensore di profondità, applica il filtro setDepthSensorUsage utilizzando 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)

  • Seleziona una risoluzione alternativa della trama della GPU. Sui dispositivi supportati, ARCore può fornire risoluzioni aggiuntive delle texture GPU. La selezione di una texture GPU a risoluzione inferiore può aiutare a migliorare le prestazioni dell'app riducendo il carico della GPU e riducendo i requisiti di larghezza di banda della memoria, ma non è garantito che le prestazioni migliorino in tutti i casi.

Utilizzo dei filtri di configurazione della fotocamera

Segui questi passaggi per consentire alla tua app di filtrare le configurazioni della videocamera.

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]

Niente distrazioni

Puoi anche impostare la modalità focus nella configurazione della sessione. La messa a fuoco fissa è in genere la migliore per il tracciamento (ed è l'impostazione predefinita di ARCore sulla maggior parte dei dispositivi). La messa a fuoco automatica è necessaria per la registrazione, la fotografia, la videografia e quando gli oggetti nelle vicinanze devono essere a fuoco.

Per informazioni dettagliate, visita la pagina Config.FocusMode.