Konfiguruję kamerę

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

  • Identyfikator aparatu
  • czy ma być używany czujnik głębokości (jeśli jest dostępny).
  • Kierunek, w który jest skierowany aparat:
    • z przodu (selfie)
    • tyłem (świat)
  • Zakres klatek na sekundę
  • Wymiary obrazu procesora
  • Wymiar tekstury GPU
  • Jeśli jest dostępny, określa, czy ma być używany tryb stereofoniczny na urządzeniu

Podczas tworzenia nowej sesji ARCore ARCore używa setCameraConfig do ustawienia konfiguracji kamery, która najlepiej pasuje do listy dostępnych konfiguracji zwracanych przez getSupportedCameraConfigs(CameraConfigFilter). Aplikacja może używać funkcji CameraConfigFilter, aby zawężać dostępne konfiguracje kamer dla danego urządzenia w czasie działania przez filtrowanie w zależności od potrzeb aplikacji.

Typowe przypadki użycia filtrowania:

  • Ograniczam liczbę klatek w nagrywaniu kamery do 30 kl./s. Na urządzeniach, które obsługują 60 klatek na sekundę, ARCore nadaje priorytet konfiguracji kamer, które obsługują tę liczbę klatek. Aby odfiltrować wszystkie konfiguracje kamery obsługujące 60 klatek na sekundę, zastosuj filtr 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)

  • Zapobieganie korzystaniu z czujnika głębi przez ARCore Na urządzeniach z obsługiwanym czujnikiem głębokości ARCore nadaje priorytet konfiguracji kamer, które korzystają z tego czujnika. Aby odfiltrować wszystkie konfiguracje aparatu, które korzystają z czujnika głębi, zastosuj filtr setDepthSensorUsage za pomocą filtra 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 innej rozdzielczości tekstur GPU Na obsługiwanych urządzeniach ARCore może oferować dodatkowe rozdzielczości tekstur GPU. Wybór tekstury GPU w niższej rozdzielczości może poprawić wydajność aplikacji, ograniczając obciążenie GPU i zmniejszając wymagania dotyczące przepustowości pamięci. Nie gwarantujemy jednak poprawy wydajności we wszystkich przypadkach.

Korzystanie z filtrów konfiguracji aparatu

Aby włączyć w aplikacji filtrowanie konfiguracji aparatu, 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ść jest ogólnie lepsza do śledzenia (i na większości urządzeń jest to domyślna opcja ARCore). Autofokus jest wymagany przy nagrywaniu, fotografowaniu i filmowaniu, a także wtedy, gdy obiekty w pobliżu muszą być ostry

Więcej informacji znajdziesz tutaj: Config.FocusMode.