Kamerayı yapılandırma

CameraConfig, alttaki kamera sensörünün özelliklerini açıklar. Örneğin:

  • Kamera kimliği
  • Varsa derinlik sensörünün kullanılıp kullanılmayacağı
  • Kameranın baktığı yön:
    • öne bakan (selfie)
    • arka yüz (dünya)
  • FPS (saniyedeki kare sayısı) aralığı
  • CPU görüntü boyutları
  • GPU doku boyutu
  • Varsa cihazdaki stereo çoklu kamerasının kullanılıp kullanılmayacağı

Yeni bir ARCore oturumu oluştururken ARCore, getSupportedCameraConfigs(CameraConfigFilter) tarafından döndürülen mevcut yapılandırmalar listesiyle en iyi eşleşen kamera yapılandırmasını ayarlamak için setCameraConfig aracını kullanır. Uygulamanız, ihtiyaçlarınıza göre filtreleme yaparak çalışma zamanında belirli bir cihazın mevcut kamera yapılandırmalarını daraltmak için CameraConfigFilter aracını kullanabilir.

Filtreleme için yaygın kullanım alanlarından bazıları şunlardır:

  • Kamerayla çekim kare hızını 30 fps ile sınırlandırın. 60 fps'yi destekleyen cihazlarda, ARCore bu kare hızını destekleyen kamera yapılandırmasına öncelik verir. 60 fps'yi destekleyen tüm kamera yapılandırmalarını filtrelemek için TargetFps.TARGET_FPS_30 kullanarak setTargetFps ile bir filtre uygulayın.

    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)

  • ARCore'un derinlik sensörünü kullanmasını engelleyin. ARCore, desteklenen derinlik sensörüne sahip cihazlarda derinlik sensörünü kullanan kamera yapılandırmasına öncelik verir. Derinlik sensörünü kullanan tüm kamera yapılandırmalarını filtrelemek için DepthSensorUsage.DO_NOT_USE ile setDepthSensorUsage filtresini uygulayın.

    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)

  • Alternatif bir GPU doku çözünürlüğü seçme. Desteklenen cihazlarda ARCore, ek GPU doku çözünürlükleri sağlayabilir. Daha düşük çözünürlüklü bir GPU dokusu seçmek, GPU yükünü azaltarak ve bellek bant genişliği gereksinimlerini azaltarak uygulama performansının iyileştirilmesine yardımcı olabilir. Ancak her durumda performansı artıracağı garanti edilmez.

Kamera yapılandırma filtrelerini kullanma

Uygulamanızın kamera yapılandırmalarını filtrelemesini etkinleştirmek için aşağıdaki adımları uygulayın.

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]

Konsantrasyon modu

Odak modunu oturum yapılandırmasında da ayarlayabilirsiniz. Sabit odak, izleme için genellikle daha iyidir (ve çoğu cihazda varsayılan ARCore ayarıdır). Kayıt, fotoğrafçılık, videografi için ve yakındaki nesnelerin odakta olması gerektiğinde otomatik odaklama gereklidir.

Ayrıntılar için bkz. Config.FocusMode.