Đang định cấu hình máy ảnh

CameraConfig mô tả các thuộc tính của cảm biến camera bên dưới, bao gồm:

  • Mã camera
  • Nếu có, hãy cho biết liệu có dùng cảm biến độ sâu hay không
  • Hướng của máy ảnh:
    • mặt trước (ảnh tự chụp)
    • phía sau (thế giới)
  • Phạm vi FPS (khung hình/giây)
  • Kích thước hình ảnh CPU
  • Kích thước hoạ tiết của GPU
  • Nếu có, tính năng nhiều máy ảnh âm thanh nổi của thiết bị có được sử dụng hay không

Khi tạo một phiên ARCore mới, ARCore sử dụng setCameraConfig để thiết lập cấu hình camera phù hợp nhất với danh sách cấu hình có sẵn được trả về bởi getSupportedCameraConfigs(CameraConfigFilter). Ứng dụng của bạn có thể dùng CameraConfigFilter để thu hẹp các cấu hình máy ảnh có sẵn cho một thiết bị cụ thể trong thời gian chạy bằng cách lọc theo nhu cầu của ứng dụng.

Sau đây là các trường hợp sử dụng phổ biến cho tính năng lọc:

  • Giới hạn tốc độ khung hình chụp ảnh của máy ảnh ở 30 khung hình/giây. Trên các thiết bị hỗ trợ 60 khung hình/giây, ARCore sẽ ưu tiên các cấu hình máy ảnh hỗ trợ tốc độ khung hình. Cách lọc ra tất cả cấu hình máy ảnh hỗ trợ tốc độ 60 khung hình/giây, áp dụng bộ lọc bằng setTargetFps khi sử dụng 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)

  • Ngăn ARCore sử dụng cảm biến độ sâu. Trên các thiết bị có cảm biến độ sâu được hỗ trợ, ARCore sẽ ưu tiên các cấu hình máy ảnh sử dụng độ sâu cảm biến. Để lọc tất cả cấu hình máy ảnh sử dụng cảm biến độ sâu, hãy áp dụng setDepthSensorUsage bộ lọc bằng 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)

  • Chọn độ phân giải kết cấu GPU thay thế. Bật thiết bị được hỗ trợ, thì ARCore có thể cung cấp độ phân giải kết cấu GPU bổ sung. Chọn hoạ tiết GPU có độ phân giải thấp hơn có thể giúp cải thiện hiệu suất của ứng dụng bằng cách giảm tải GPU và giảm bộ nhớ băng thông, mặc dù điều này không được đảm bảo sẽ cải thiện hiệu suất trong mọi trường hợp.

Sử dụng bộ lọc cấu hình máy ảnh

Làm theo các bước sau để cho phép ứng dụng lọc cấu hình của camera.

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]

Chế độ tập trung

Bạn cũng có thể đặt chế độ tập trung trong phần cấu hình phiên. Tiêu điểm cố định thường tốt hơn cho việc theo dõi (và là chế độ mặc định của ARCore trên hầu hết các thiết bị). Cần có tính năng Tự động lấy nét để quay video, chụp ảnh, quay video và khi cần lấy nét đối tượng ở gần.

Xem Config.FocusMode để biết thông tin chi tiết.