Kamera konfigurieren

Mit CameraConfig werden die Eigenschaften des zugrunde liegenden Kamerasensors beschrieben, darunter:

  • Kamera-ID
  • Ob ein Tiefensensor verwendet wird (falls verfügbar)
  • Die Richtung der Kamera:
    • mit der Vorderseite (Selfie)
    • rückseitig (weltweit)
  • FPS-Bereich (Bilder pro Sekunde)
  • CPU-Bildabmessungen
  • GPU-Texturdimension
  • Gibt an, ob die Stereo-Mehrfachkamera des Geräts verwendet wird (falls vorhanden)

Beim Erstellen einer neuen ARCore-Sitzung verwendet ARCore setCameraConfig, um die Kamerakonfiguration festzulegen, die am besten mit der Liste der verfügbaren Konfigurationen übereinstimmt, die von getSupportedCameraConfigs(CameraConfigFilter) zurückgegeben werden. Ihre App kann CameraConfigFilter verwenden, um die verfügbaren Kamerakonfigurationen für ein bestimmtes Gerät zur Laufzeit einzugrenzen, indem sie nach den Anforderungen der App filtert.

Gängige Anwendungsfälle für Filter sind:

  • Framerate der Kameraaufnahme auf 30 fps begrenzen Auf Geräten, die 60 fps unterstützen, priorisiert ARCore Kamerakonfigurationen, die diese Framerate unterstützen. Wenn Sie alle Kamerakonfigurationen herausfiltern möchten, die 60 fps unterstützen, wenden Sie einen Filter mit setTargetFps und TargetFps.TARGET_FPS_30 an.

    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)

  • Verhindern, dass ARCore den Tiefensensor verwendet Auf Geräten mit einem unterstützten Tiefensensor priorisiert ARCore Kamerakonfigurationen, die den Tiefensensor verwenden. Wenden Sie den Filter setDepthSensorUsage mit DepthSensorUsage.DO_NOT_USE an, um alle Kamerakonfigurationen herauszufiltern, die den Tiefensensor verwenden.

    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)

  • Alternative GPU-Texturauflösung auswählen Auf unterstützten Geräten bietet ARCore möglicherweise zusätzliche GPU-Texturauflösungen. Die Auswahl einer GPU-Textur mit niedrigerer Auflösung kann dazu beitragen, die Anwendungsleistung zu verbessern, da die GPU-Last und die Anforderungen an die Speicherbandbreite reduziert werden. Allerdings ist nicht garantiert, dass die Leistung in allen Fällen verbessert wird.

Konfigurationsfilter der Kamera verwenden

Führen Sie die folgenden Schritte aus, damit Ihre App Kamerakonfigurationen filtern kann.

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]

Konzentrations­modus

Sie können den Fokusmodus auch in der Sitzungskonfiguration festlegen. Der fixierte Fokus ist in der Regel für das Tracking besser geeignet und der ARCore-Standard auf den meisten Geräten. Der Autofokus ist für Aufnahmen, Fotos, Videografie und wenn Objekte in der Nähe scharf sein müssen, erforderlich.

Weitere Informationen finden Sie unter Config.FocusMode.