Konfiguruję kamerę

CameraConfig opisuje właściwości bazowego czujnika aparatu, w tym:

  • Identyfikator kamery
  • Określa, czy zostanie użyty czujnik głębokości (jeśli to możliwe).
  • Kierunek, w którym jest skierowany aparat:
    • przedni (selfie)
    • tylny (świat)
  • Zakres kl./s
  • Wymiary obrazu procesora
  • Wymiar tekstury GPU
  • Jeśli ta opcja jest dostępna, określa, czy będzie używany stereo stereo na urządzeniu.

Podczas tworzenia nowej sesji ARCore ARCore wykorzystuje setCameraConfig, aby ustawić konfigurację kamery która najlepiej pasuje do listy dostępnych konfiguracji zwracanych przez getSupportedCameraConfigs(CameraConfigFilter) Aplikacja może używać uprawnień CameraConfigFilter zawężać dostępne konfiguracje kamery dla danego urządzenia w czasie działania przez filtrowanie według potrzeb aplikacji.

Typowe przypadki użycia filtrów:

  • Ograniczenie liczby klatek na sekundę podczas nagrywania aparatem do 30 kl./s. Na urządzeniach, które obsługują 60 kl./s, ARCore nadaje priorytet konfiguracjom kamery, które: liczby klatek na sekundę. Aby odfiltrować wszystkie konfiguracje kamery obsługujące 60 kl./s, zastosuj filtr z zastosowaniem funkcji setTargetFps za pomocą 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)

  • Nie zezwalaj ARCore na używanie czujnika głębi. Na urządzeniach, które mają obsługiwanego czujnika głębi, ARCore nadaje priorytet konfiguracjom kamery, które korzystają z głębi . Aby odfiltrować wszystkie konfiguracje aparatów, które korzystają z czujnika głębi, zastosuj setDepthSensorUsage filtr za pomocą funkcji 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)

  • Wybieranie alternatywnej rozdzielczości tekstury GPU. Wł. obsługiwanych urządzeniach, ARCore może udostępniać dla dodatkowych rozdzielczości tekstur dostępnych w GPU. Wybieranie tekstury GPU o niższej rozdzielczości może pomóc zwiększyć wydajność aplikacji przez zmniejszenie obciążenia GPU i zmniejszenie pamięci wymagań związanych z przepustowością, chociaż nie możemy zagwarantować, że poprawi to wydajność we wszystkich przypadkach.

Korzystanie z filtrów konfiguracji kamery

Aby włączyć filtrowanie konfiguracji kamery, wykonaj te czynności.

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]

Tryb pełnej koncentracji

Tryb pełnej koncentracji możesz też ustawić w konfiguracji sesji. Stała ostrość lepiej sprawdza się w śledzeniu (i jest domyślnym ustawieniem ARCore na większości urządzeń). Autofokus jest wymagany do nagrywania, fotografowania i filmowania oraz wtedy, gdy obiekty w pobliżu muszą być ostre.

Zobacz Config.FocusMode .