Berita Produk

Mencerahkan Feed Kamera Real-Time dengan Peningkatan Cahaya Rendah

Waktu baca: 7 menit
Donovan McMurray
Developer Relations Engineer

Baru-baru ini kami membagikan cara Instagram memungkinkan pengguna mengambil foto menakjubkan dalam kondisi minim cahaya menggunakan Mode Malam. Fitur tersebut sangat cocok untuk gambar diam, yang memungkinkan Anda menggabungkan beberapa eksposur untuk membuat foto statis berkualitas tinggi. Namun, bagaimana dengan momen yang terjadi di antara foto-foto tersebut? Pengguna perlu berinteraksi dengan kamera lebih dari sekadar saat tombol rana ditekan. Mereka juga menggunakan pratinjau untuk menyusun adegan atau memindai kode QR.

Hari ini, kita akan membahas Peningkatan Cahaya Redup (LLB), fitur canggih yang dirancang untuk mencerahkan streaming kamera real-time. Tidak seperti Mode Malam, yang memerlukan durasi pengambilan gambar yang stabil, Peningkatan Cahaya Redup berfungsi secara instan pada pratinjau langsung dan rekaman video Anda. LLB secara otomatis menyesuaikan jumlah pencerahan yang diperlukan berdasarkan cahaya yang tersedia, sehingga dioptimalkan untuk setiap lingkungan.

Dengan update terbaru, LLB memungkinkan pengguna Instagram menyusun bidikan yang sempurna, dan kemudian penerapan Mode Malam yang ada menghasilkan foto berkualitas tinggi dalam kondisi cahaya redup yang sama seperti yang telah dinikmati pengguna mereka selama lebih dari setahun.

Mengapa Kecerahan Real-time Penting

Meskipun Mode Malam bertujuan untuk meningkatkan kualitas gambar akhir, Peningkatan Cahaya Redup ditujukan untuk kegunaan dan interaktivitas di lingkungan gelap. Faktor penting lainnya yang perlu dipertimbangkan adalah – meskipun keduanya bekerja sama dengan sangat baik – Anda dapat menggunakan LLB dan Mode Malam secara terpisah, dan Anda akan melihat bahwa dalam beberapa kasus penggunaan ini, LLB memiliki nilai tersendiri saat foto Mode Malam tidak diperlukan. Berikut cara LLB meningkatkan pengalaman pengguna:

  • Pembingkaian & Pengambilan Gambar yang Lebih Baik: Dalam adegan yang kurang terang, pratinjau kamera standar bisa berwarna hitam pekat. LLB mencerahkan jendela bidik, sehingga pengguna dapat melihat dengan jelas apa yang mereka bidik sebelum menekan tombol shutter. Untuk pengalaman ini, Anda dapat menggunakan Mode Malam untuk mendapatkan hasil foto minim cahaya berkualitas terbaik, atau Anda dapat membiarkan LLB memberikan hasil foto “apa yang Anda lihat adalah apa yang Anda dapatkan” kepada pengguna.
  • Pemindaian yang Andal: Kode QR ada di mana-mana, tetapi memindainya di restoran yang gelap atau garasi parkir sering kali membuat frustrasi. Dengan feed kamera yang jauh lebih terang, algoritma pemindaian dapat mendeteksi dan mendekode kode QR secara andal bahkan di lingkungan yang sangat redup.
  • Interaksi yang Ditingkatkan: Untuk aplikasi yang melibatkan interaksi video live (seperti asisten AI atau panggilan video), LLB meningkatkan jumlah informasi yang dapat dirasakan, sehingga memastikan model computer vision memiliki cukup data untuk digunakan

Perbedaan di Instagram

LLB_IG_demo_white_background.gif

Tim engineering di balik aplikasi Instagram Android selalu bekerja keras untuk memberikan pengalaman kamera canggih bagi penggunanya. Anda dapat melihat dalam contoh di atas betapa besar perbedaan yang dihasilkan LLB pada Pixel 10 Pro. 

lowlight.png

Anda dapat dengan mudah membayangkan perbedaan yang dihasilkan dalam pengalaman pengguna. Jika pengguna tidak dapat melihat apa yang mereka rekam, kemungkinan besar mereka akan membatalkan perekaman. 

lowlight1.png

Memilih Penerapan Anda

Ada dua cara untuk menerapkan Peningkatan Cahaya Redup guna memberikan pengalaman terbaik di berbagai perangkat:

  1. Mode AE Peningkatan Cahaya Rendah: Ini adalah mode eksposur otomatis lapisan hardware. Opsi ini menawarkan kualitas dan performa tertinggi karena secara langsung menyempurnakan pipeline Image Signal Processor (ISP). Selalu periksa hal ini terlebih dahulu.
  2. Peningkatan Cahaya Rendah Google: Jika perangkat tidak mendukung mode AE, Anda dapat kembali ke solusi berbasis software ini yang disediakan oleh layanan Google Play. Fungsi ini menerapkan pasca-pemrosesan ke streaming kamera untuk mencerahkannya. Sebagai solusi semua software, fitur ini tersedia di lebih banyak perangkat, sehingga penerapan ini membantu Anda menjangkau lebih banyak perangkat dengan LLB.

Mode AE Peningkatan Cahaya Redup (Hardware)

Mekanisme:
Mode ini didukung di perangkat yang menjalankan Android 15 dan yang lebih baru, serta mengharuskan OEM menerapkan dukungan di HAL (saat ini tersedia di perangkat Pixel 10). Fitur ini terintegrasi langsung dengan Prosesor Sinyal Gambar (ISP) kamera. Jika Anda menyetel CaptureRequest.CONTROL_AE_MODE ke CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY, sistem kamera akan mengambil alih kontrol.

Perilaku:
HAL/ISP menganalisis pemandangan dan menyesuaikan parameter sensor dan pemrosesan, sering kali termasuk meningkatkan waktu pencahayaan, untuk mencerahkan gambar. Hal ini dapat menghasilkan frame dengan rasio sinyal terhadap derau (SNR) yang jauh lebih baik karena waktu eksposur yang lebih lama, bukan peningkatan perolehan sensor digital (ISO), memungkinkan sensor menangkap lebih banyak informasi cahaya.

Keuntungan:
Kualitas gambar dan efisiensi daya yang berpotensi lebih baik karena memanfaatkan jalur hardware khusus.

Kelemahan:
Dapat menghasilkan kecepatan frame yang lebih rendah dalam kondisi yang sangat gelap karena sensor memerlukan lebih banyak waktu untuk menangkap cahaya. Kecepatan frame dapat turun hingga 10 FPS dalam kondisi cahaya yang sangat redup.

Penyempurnaan Cahaya Redup Google (Software melalui Layanan Google Play)

Mekanisme:
Solusi ini, yang didistribusikan sebagai modul opsional melalui layanan Google Play, menerapkan pemrosesan pasca-pemrosesan ke aliran kamera. Fitur ini menggunakan teknologi peningkatan kualitas gambar real-time canggih yang disebut HDRNet.

Google HDRNet:
Model deep learning ini menganalisis gambar pada resolusi yang lebih rendah untuk memprediksi serangkaian parameter ringkas (petak bilateral). Petak ini kemudian memandu peningkatan efisien dan bervariasi secara spasial pada gambar beresolusi penuh di GPU. Model ini dilatih untuk mencerahkan dan meningkatkan kualitas gambar dalam kondisi cahaya redup, dengan fokus pada visibilitas wajah.

Orkestrasi Proses:
Model HDRNet dan logika yang menyertainya diorkestrasi oleh prosesor Low Light Boost. Hal ini mencakup:

  1. Analisis Adegan:
    Kalkulator kustom yang memperkirakan kecerahan adegan sebenarnya menggunakan metadata kamera (sensitivitas sensor, waktu eksposur, dll.) dan konten gambar. Analisis ini menentukan tingkat peningkatannya.
  2. Pemrosesan HDRNet:
    Menerapkan model HDRNet untuk mencerahkan frame. Model yang digunakan disesuaikan untuk adegan cahaya redup dan dioptimalkan untuk performa real-time.
  3. Penggabungan:
    Frame asli dan frame yang diproses HDRNet digabungkan. Jumlah perpaduan yang diterapkan dikontrol secara dinamis oleh kalkulator kecerahan adegan, sehingga memastikan transisi yang lancar antara status yang ditingkatkan dan tidak ditingkatkan.
low-light-boost-processor-diagram.png

Keuntungan:
Berfungsi di berbagai perangkat (saat ini mendukung Samsung S22 Ultra, S23 Ultra, S24 Ultra, S25 Ultra, dan Pixel 6 hingga Pixel 9) tanpa memerlukan dukungan HAL tertentu. Mempertahankan kecepatan frame kamera karena merupakan efek pascapemrosesan.

Trade-off:
Sebagai metode pasca-pemrosesan, kualitas dibatasi oleh informasi yang ada dalam frame yang dikirimkan oleh sensor. Fitur ini tidak dapat memulihkan detail yang hilang karena kegelapan ekstrem di tingkat sensor.

Dengan menawarkan jalur hardware dan software, Peningkatan Cahaya Rendah memberikan solusi yang skalabel untuk meningkatkan performa kamera dalam kondisi cahaya rendah di seluruh ekosistem Android. Developer harus memprioritaskan mode AE jika tersedia dan menggunakan Peningkatan Cahaya Redup Google sebagai penggantian yang andal.

Menerapkan Peningkatan Cahaya Redup di Aplikasi Anda

Sekarang, mari kita lihat cara menerapkan kedua penawaran LLB. Anda dapat menerapkan hal berikut, baik saat menggunakan CameraX atau Camera2 di aplikasi. Untuk hasil terbaik, sebaiknya terapkan Langkah 1 dan Langkah 2.

Langkah 1: Mode AE Peningkatan Cahaya Redup

Tersedia di perangkat tertentu yang menjalankan Android 15 dan yang lebih tinggi, Mode AE LLB berfungsi sebagai mode Auto-Exposure (AE) tertentu.

1. Periksa Ketersediaan

Pertama, periksa apakah perangkat kamera mendukung Mode AE LLB.

  val cameraInfo = cameraProvider.getCameraInfo(cameraSelector)
val isLlbSupported = cameraInfo.isLowLightBoostSupported

2. Mengaktifkan Mode

Jika didukung, Anda dapat mengaktifkan Mode AE LLB menggunakan objek CameraControl CameraX.

  // After setting up your camera, use the CameraInfo object to enable LLB AE Mode.
camera = cameraProvider.bindToLifecycle(...)

if (isLlbSupported) {
  try {
    // The .await() extension suspends the coroutine until the
    // ListenableFuture completes. If the operation fails, it throws
    // an exception which we catch below.
    camera?.cameraControl.enableLowLightBoostAsync(true).await()
  } catch (e: IllegalStateException) {
    Log.e(TAG, "Failed to enable low light boost: not available on this device or with the current camera configuration", e)
  } catch (e: CameraControl.OperationCanceledException) {
    Log.e(TAG, "Failed to enable low light boost: camera is closed or value has changed", e)
  }
}

3. Memantau Status

Hanya karena Anda meminta mode tersebut, bukan berarti saat ini "meningkatkan". Sistem hanya mengaktifkan peningkatan saat adegan benar-benar gelap. Anda dapat menyiapkan Observer untuk memperbarui UI (seperti menampilkan ikon bulan) atau mengonversi ke Flow menggunakan fungsi ekstensi asFlow().

  if (isLlbSupported) {
  camera?.cameraInfo.lowLightBoostState.asFlow().collectLatest { state ->
    // Update UI accordingly
    updateMoonIcon(state == LowLightBoostState.ACTIVE)
  }
}

Anda dapat membaca panduan lengkap tentang Mode AE Peningkatan Cahaya Rendah di sini.

Langkah 2: Peningkatan Cahaya Rendah Google

Untuk perangkat yang tidak mendukung mode AE hardware, Peningkatan Kualitas Cahaya Rendah Google berfungsi sebagai pengganti yang efektif. Aplikasi ini menggunakan LowLightBoostSession untuk mencegat dan mencerahkan streaming.

1. Tambahkan Dependensi

Fitur ini disediakan melalui layanan Google Play.

  implementation("com.google.android.gms:play-services-camera-low-light-boost:16.0.1-beta06")
// Add coroutines-play-services to simplify Task APIs
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.10.2")

2. Menginisialisasi Klien

Sebelum memulai kamera, gunakan LowLightBoostClient untuk memastikan modul diinstal dan perangkat didukung.

  val llbClient = LowLightBoost.getClient(context)

// Check support and install if necessary
val isSupported = llbClient.isCameraSupported(cameraId).await()
val isInstalled = llbClient.isModuleInstalled().await()

if (isSupported && !isInstalled) {
    // Trigger installation
    llbClient.installModule(installCallback).await()
}

3. Membuat Sesi LLB

Google LLB memproses setiap frame, jadi Anda harus memberikan Surface tampilan ke LowLightBoostSession, dan Surface yang telah menerapkan pencerahan akan dikembalikan kepada Anda. Untuk aplikasi Camera2, Anda dapat menambahkan Surface yang dihasilkan dengan CaptureRequest.Builder.addTarget(). Untuk CameraX, pipeline pemrosesan ini paling sesuai dengan class CameraEffect, tempat Anda dapat menerapkan efek dengan SurfaceProcessor dan memberikannya kembali ke Pratinjau dengan SurfaceProvider, seperti yang terlihat dalam kode ini.

  // With a SurfaceOutput from SurfaceProcessor.onSurfaceOutput() and a
// SurfaceRequest from Preview.SurfaceProvider.onSurfaceRequested(),
// create a LLB Session.
suspend fun createLlbSession(surfaceRequest: SurfaceRequest, outputSurfaceForLlb: Surface) {
  // 1. Create the LLB Session configuration
  val options = LowLightBoostOptions(
    outputSurfaceForLlb,
    cameraId,
    surfaceRequest.resolution.width,
    surfaceRequest.resolution.height,
    true // Start enabled
  )

  // 2. Create the session.
  val llbSession = llbClient.createSession(options, callback).await()

  // 3. Get the surface to use.
  val llbInputSurface = llbSession.getCameraSurface()

  // 4. Provide the surface to the CameraX Preview UseCase.
  surfaceRequest.provideSurface(llbInputSurface, executor, resultListener)

  // 5. Set the scene detector callback to monitor how much boost is being applied.
  val onSceneBrightnessChanged = object : SceneDetectorCallback {
    override fun onSceneBrightnessChanged(
      session: LowLightBoostSession,
      boostStrength: Float
    ) {
      // Monitor the boostStrength from 0 (no boosting) to 1 (maximum boosting)
    }
  }
  llbSession.setSceneDetectorCallback(onSceneBrightnessChanged, null)
}

4. Meneruskan Metadata

Agar algoritma berfungsi, algoritma perlu menganalisis status eksposur otomatis kamera. Anda harus meneruskan hasil pengambilan kembali ke sesi LLB. Di CameraX, hal ini dapat dilakukan dengan memperluas Preview.Builder dengan Camera2Interop.Extender.setSessionCaptureCallback().

  Camera2Interop.Extender(previewBuilder).setSessionCaptureCallback(
  object : CameraCaptureSession.CaptureCallback() {
    override fun onCaptureCompleted(
      session: CameraCaptureSession,
      request: CaptureRequest,
      result: TotalCaptureResult
    ) {
      super.onCaptureCompleted(session, request, result)
      llbSession?.processCaptureResult(result)
    }
  }
)

Langkah-langkah penerapan mendetail untuk klien dan sesi dapat ditemukan di panduan Google Low Light Boost.

Langkah Berikutnya

Dengan menerapkan kedua opsi ini, Anda memastikan bahwa pengguna dapat melihat dengan jelas, memindai dengan andal, dan berinteraksi secara efektif, terlepas dari kondisi pencahayaan.

Untuk melihat cara kerja fitur ini dalam codebase lengkap yang siap produksi, lihat Aplikasi Kamera Jetpack di GitHub. Contoh ini mengimplementasikan Mode AE LLB dan Google LLB, sehingga memberi Anda referensi untuk integrasi Anda sendiri. 

Ditulis oleh:

Lanjutkan membaca