Configurazione della fotocamera

CameraConfig descrive le proprietà dell'elemento sensore sottostante della fotocamera, tra cui:

  • ID fotocamera
  • Se disponibile, indica se verrà utilizzato un sensore di profondità
  • La direzione in cui è rivolta la fotocamera:
    • davanti (selfie)
    • rivolto all'indietro (mondo)
  • Intervallo f/s (frame al secondo)
  • Dimensioni immagine CPU
  • Dimensione texture GPU
  • Se presente, indica se verrà utilizzata la fotocamera stereo del dispositivo

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

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

  • Limitare la frequenza fotogrammi di acquisizione della fotocamera a 30 f/s. Sui dispositivi che supportano 60 f/s, ARCore darà la priorità alle configurazioni della fotocamera che supportano frequenza fotogrammi. Per filtrare tutte le configurazioni della fotocamera che supportano 60 f/s: applicare 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)

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

  • Selezione di una risoluzione di texture GPU alternativa. Attivato dispositivi supportati, ARCore potrebbe fornire risoluzioni di texture GPU aggiuntive. Selezione di una texture GPU a risoluzione più bassa può contribuire a migliorare le prestazioni dell'app riducendo il carico della GPU e riducendo la memoria requisiti di larghezza di banda, anche se non è garantito il miglioramento delle prestazioni per tutti i casi.

Utilizzare i filtri di configurazione della videocamera

Segui questi passaggi per consentire all'app di filtrare le configurazioni delle videocamere.

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. Lo stato attivo fisso è generalmente migliore per il monitoraggio (ed è l'impostazione predefinita di ARCore sulla maggior parte dei dispositivi). La messa a fuoco automatica è necessaria per le registrazioni, le foto, le riprese video e quando gli oggetti vicini devono essere a fuoco.

Vedi Config.FocusMode per maggiori dettagli.