Làm sáng nguồn cấp dữ liệu từ camera theo thời gian thực bằng tính năng Tăng cường ánh sáng yếu
7 phút đọc
Gần đây, chúng tôi đã chia sẻ cách Instagram giúp người dùng chụp những bức ảnh tuyệt đẹp trong điều kiện ánh sáng yếu bằng Chế độ ban đêm. Tính năng này rất phù hợp với ảnh tĩnh, khi có thời gian để kết hợp nhiều độ phơi sáng nhằm tạo ra một bức ảnh tĩnh chất lượng cao. Nhưng còn những khoảnh khắc diễn ra giữa các bức ảnh thì sao? Người dùng cần tương tác với máy ảnh nhiều hơn, chứ không chỉ tại thời điểm nhấn nút chụp. Người dùng cũng sử dụng bản xem trước để tạo cảnh hoặc quét mã QR.
Hôm nay, chúng ta sẽ tìm hiểu về Cải thiện ánh sáng yếu (LLB), một tính năng mạnh mẽ được thiết kế để làm sáng luồng video của camera theo thời gian thực. Không giống như Chế độ ban đêm (yêu cầu bạn giữ yên thiết bị trong một khoảng thời gian chụp), tính năng Tăng cường ánh sáng yếu hoạt động tức thì trên bản xem trước trực tiếp và bản quay video. Tính năng LLB tự động điều chỉnh mức độ sáng cần thiết dựa trên ánh sáng hiện có, nhờ đó, tính năng này được tối ưu hoá cho mọi môi trường.
Trong bản cập nhật gần đây, LLB cho phép người dùng Instagram căn chỉnh để có được bức ảnh hoàn hảo, sau đó, việc triển khai Chế độ ban đêm hiện tại sẽ mang lại những bức ảnh chất lượng cao trong điều kiện thiếu sáng mà người dùng đã được trải nghiệm trong hơn một năm qua.
Tầm quan trọng của tính năng Độ sáng theo thời gian thực
Mặc dù Chế độ ban đêm nhằm cải thiện chất lượng hình ảnh cuối cùng, nhưng tính năng Cải thiện ánh sáng yếu lại nhằm mục đích tăng khả năng hữu dụng và tương tác trong môi trường tối. Một yếu tố quan trọng khác cần cân nhắc là mặc dù hoạt động cùng nhau rất hiệu quả, nhưng bạn có thể sử dụng LLB và Chế độ ban đêm một cách độc lập. Bạn sẽ thấy trong một số trường hợp sử dụng, LLB có giá trị riêng khi không cần ảnh Chế độ ban đêm. Sau đây là cách LLB cải thiện trải nghiệm người dùng:
- Căn khung hình và chụp ảnh đẹp hơn: Trong cảnh thiếu sáng, bản xem trước của camera thông thường có thể tối đen. LLB làm sáng kính ngắm, giúp người dùng thực sự nhìn thấy những gì họ đang lấy khung hình trước khi nhấn nút chụp. Để có trải nghiệm này, bạn có thể sử dụng Chế độ ban đêm để có được kết quả ảnh chụp trong điều kiện thiếu sáng chất lượng nhất, hoặc bạn có thể để LLB cung cấp cho người dùng kết quả ảnh chụp "thấy gì chụp nấy".
- Quét đáng tin cậy: Mã QR có ở khắp mọi nơi, nhưng việc quét mã QR trong nhà hàng tối hoặc gara đỗ xe thường gây khó chịu. Nhờ nguồn cấp dữ liệu từ camera sáng hơn đáng kể, các thuật toán quét có thể phát hiện và giải mã mã QR một cách đáng tin cậy ngay cả trong môi trường rất tối.
- Tương tác nâng cao: Đối với các ứng dụng có tương tác video trực tiếp (như trợ lý AI hoặc cuộc gọi video), LLB tăng lượng thông tin có thể nhận biết, đảm bảo các mô hình thị giác máy tính có đủ dữ liệu để hoạt động
Sự khác biệt trên Instagram
Nhóm kỹ sư phát triển ứng dụng Instagram trên Android luôn nỗ lực hết mình để mang đến trải nghiệm camera hiện đại cho người dùng. Trong ví dụ trên, bạn có thể thấy sự khác biệt rõ rệt mà tính năng LLB mang lại trên điện thoại Pixel 10 Pro.
Bạn có thể dễ dàng hình dung sự khác biệt mà điều này mang lại cho trải nghiệm người dùng. Nếu người dùng không thể xem nội dung họ đang chụp, thì nhiều khả năng họ sẽ huỷ chụp.
Chọn cách triển khai
Có hai cách để triển khai tính năng Cải thiện ánh sáng yếu nhằm mang lại trải nghiệm tốt nhất trên nhiều loại thiết bị nhất:
- Chế độ phơi sáng tự động (AE) tăng cường ánh sáng yếu: Đây là chế độ phơi sáng tự động ở lớp phần cứng. Chế độ này mang lại chất lượng và hiệu suất cao nhất vì tinh chỉnh trực tiếp quy trình của Bộ xử lý tín hiệu hình ảnh (ISP). Luôn kiểm tra điều này trước tiên.
- Tính năng Tăng cường ánh sáng yếu của Google: Nếu thiết bị không hỗ trợ chế độ AE, bạn có thể quay lại giải pháp dựa trên phần mềm này do Dịch vụ Google Play cung cấp. Tính năng này áp dụng quy trình xử lý hậu kỳ cho luồng video của camera để làm sáng luồng video. Là một giải pháp hoàn toàn bằng phần mềm, giải pháp này có trên nhiều thiết bị hơn, vì vậy, việc triển khai này giúp bạn tiếp cận nhiều thiết bị hơn bằng LLB.
Chế độ phơi sáng tự động cải thiện ánh sáng yếu (Phần cứng)
Cơ chế:
Chế độ này được hỗ trợ trên các thiết bị chạy Android 15 trở lên và yêu cầu OEM phải triển khai tính năng hỗ trợ trong HAL (hiện có trên các thiết bị Pixel 10). Tính năng này tích hợp trực tiếp với Bộ xử lý tín hiệu hình ảnh (ISP) của camera. Nếu bạn đặt CaptureRequest.CONTROL_AE_MODE thành CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY, thì hệ thống camera sẽ nắm quyền kiểm soát.
Hành vi:
HAL/ISP phân tích cảnh và điều chỉnh các thông số cảm biến cũng như xử lý, thường bao gồm cả việc tăng thời gian phơi sáng để làm sáng hình ảnh. Điều này có thể tạo ra các khung hình có tỷ lệ tín hiệu trên nhiễu (SNR) được cải thiện đáng kể vì thời gian phơi sáng kéo dài, thay vì tăng độ khuếch đại cảm biến kỹ thuật số (ISO), cho phép cảm biến thu được nhiều thông tin ánh sáng hơn.
Ưu điểm:
Có thể cải thiện chất lượng hình ảnh và hiệu suất năng lượng vì tận dụng các đường dẫn phần cứng chuyên dụng.
Đánh đổi:
Có thể dẫn đến tốc độ khung hình thấp hơn trong điều kiện rất tối vì cảm biến cần nhiều thời gian hơn để thu ánh sáng. Tốc độ khung hình có thể giảm xuống mức thấp nhất là 10 khung hình/giây trong điều kiện ánh sáng rất yếu.
Tính năng Cải thiện ánh sáng yếu của Google (Phần mềm thông qua Dịch vụ Google Play)
Cơ chế:
Giải pháp này được phân phối dưới dạng một mô-đun không bắt buộc thông qua Dịch vụ Google Play, áp dụng quy trình xử lý hậu kỳ cho luồng video của camera. Công nghệ này sử dụng một công nghệ cải thiện hình ảnh theo thời gian thực tinh vi có tên là HDRNet.
Google HDRNet:
Mô hình học sâu này phân tích hình ảnh ở độ phân giải thấp hơn để dự đoán một tập hợp thông số nhỏ gọn (lưới song phương). Sau đó, lưới này sẽ hướng dẫn cách cải thiện hiệu quả, thay đổi theo không gian của hình ảnh có độ phân giải đầy đủ trên GPU. Mô hình này được huấn luyện để làm sáng và cải thiện chất lượng hình ảnh trong điều kiện ánh sáng yếu, tập trung vào khả năng hiển thị khuôn mặt.
Điều phối quy trình:
Mô hình HDRNet và logic đi kèm được điều phối bởi bộ xử lý Tăng cường ánh sáng yếu. Điều này bao gồm:
- Phân tích cảnh:
Một công cụ tính toán tuỳ chỉnh giúp ước tính độ sáng thực của cảnh bằng cách sử dụng siêu dữ liệu của camera (độ nhạy của cảm biến, thời gian phơi sáng, v.v.) và nội dung hình ảnh. Phân tích này xác định mức tăng. - Xử lý HDRNet:
Áp dụng mô hình HDRNet để làm sáng khung hình. Mô hình được sử dụng được điều chỉnh cho phù hợp với cảnh thiếu sáng và được tối ưu hoá để đạt hiệu suất theo thời gian thực. - Kết hợp:
Khung hình gốc và khung hình được xử lý bằng HDRNet sẽ được kết hợp với nhau. Mức độ kết hợp được áp dụng sẽ do trình tính toán độ sáng của cảnh điều khiển linh hoạt, đảm bảo quá trình chuyển đổi mượt mà giữa trạng thái tăng cường và không tăng cường.
Ưu điểm:
Hoạt động trên nhiều thiết bị hơn (hiện hỗ trợ Samsung S22 Ultra, S23 Ultra, S24 Ultra, S25 Ultra và Pixel 6 đến Pixel 9) mà không cần hỗ trợ HAL cụ thể. Duy trì tốc độ khung hình của camera vì đây là hiệu ứng xử lý hậu kỳ.
Đánh đổi:
Vì là phương pháp xử lý hậu kỳ nên chất lượng bị giới hạn bởi thông tin có trong các khung hình do cảm biến cung cấp. Tính năng này không thể khôi phục các chi tiết bị mất do độ tối quá mức ở cấp cảm biến.
Bằng cách cung cấp cả đường dẫn phần cứng và phần mềm, tính năng Tăng cường ánh sáng yếu mang đến một giải pháp có thể mở rộng để nâng cao hiệu suất của camera trong điều kiện ánh sáng yếu trên toàn hệ sinh thái Android. Nhà phát triển nên ưu tiên chế độ AE (nếu có) và sử dụng tính năng Tăng cường ánh sáng yếu của Google làm phương án dự phòng hiệu quả.
Triển khai tính năng Cải thiện ánh sáng yếu trong ứng dụng
Bây giờ, hãy cùng tìm hiểu cách triển khai cả hai dịch vụ LLB. Bạn có thể triển khai những bước sau đây cho dù bạn dùng CameraX hay Camera2 trong ứng dụng. Để có kết quả tốt nhất, bạn nên triển khai cả Bước 1 và Bước 2.
Bước 1: Chế độ phơi sáng tự động (AE) tăng cường ánh sáng yếu
Có trên một số thiết bị chạy Android 15 trở lên, Chế độ LLB AE hoạt động như một chế độ Phơi sáng tự động (AE) cụ thể.
1. Kiểm tra tình trạng còn hàng
Trước tiên, hãy kiểm tra xem thiết bị camera có hỗ trợ Chế độ LLB AE hay không.
val cameraInfo = cameraProvider.getCameraInfo(cameraSelector) val isLlbSupported = cameraInfo.isLowLightBoostSupported
2. Bật chế độ
Nếu được hỗ trợ, bạn có thể bật Chế độ LLB AE bằng đối tượng CameraControl của 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. Theo dõi trạng thái
Việc bạn yêu cầu chế độ này không có nghĩa là chế độ này hiện đang "tăng cường". Hệ thống chỉ kích hoạt tính năng tăng cường khi cảnh thực sự tối. Bạn có thể thiết lập một Observer để cập nhật giao diện người dùng (chẳng hạn như hiển thị biểu tượng mặt trăng) hoặc chuyển đổi thành Flow bằng hàm mở rộng asFlow().
if (isLlbSupported) {
camera?.cameraInfo.lowLightBoostState.asFlow().collectLatest { state ->
// Update UI accordingly
updateMoonIcon(state == LowLightBoostState.ACTIVE)
}
}Bạn có thể đọc hướng dẫn đầy đủ về Chế độ phơi sáng tự động tăng cường ánh sáng yếu tại đây.
Bước 2: Tính năng Cải thiện ánh sáng yếu của Google
Đối với những thiết bị không hỗ trợ chế độ phơi sáng tự động (AE) của phần cứng, tính năng Tăng cường ánh sáng yếu của Google sẽ đóng vai trò là một giải pháp dự phòng hiệu quả. Chế độ này sử dụng LowLightBoostSession để chặn và làm sáng luồng.
1. Thêm phần phụ thuộc
Tính năng này được cung cấp thông qua Dịch vụ 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. Khởi động ứng dụng
Trước khi khởi động camera, hãy sử dụng LowLightBoostClient để đảm bảo mô-đun đã được cài đặt và thiết bị được hỗ trợ.
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. Tạo phiên LLB
Google LLB xử lý từng khung hình, vì vậy, bạn phải cung cấp Surface hiển thị cho LowLightBoostSession và sẽ trả về cho bạn một Surface đã được làm sáng. Đối với ứng dụng Camera2, bạn có thể thêm Surface thu được bằng CaptureRequest.Builder.addTarget(). Đối với CameraX, quy trình xử lý này phù hợp nhất với lớp CameraEffect, trong đó bạn có thể áp dụng hiệu ứng bằng SurfaceProcessor và cung cấp lại hiệu ứng đó cho Preview bằng SurfaceProvider, như trong đoạn mã này.
// 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. Truyền siêu dữ liệu
Để thuật toán hoạt động, thuật toán cần phân tích trạng thái phơi sáng tự động của máy ảnh. Bạn phải chuyển kết quả chụp lại cho phiên LLB. Trong CameraX, bạn có thể thực hiện việc này bằng cách mở rộng Preview.Builder bằng 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)
}
}
)Bạn có thể xem các bước triển khai chi tiết cho ứng dụng và phiên trong hướng dẫn về tính năng Tăng cường ánh sáng yếu của Google.
Các bước tiếp theo
Bằng cách triển khai hai tuỳ chọn này, bạn đảm bảo rằng người dùng có thể nhìn rõ, quét một cách đáng tin cậy và tương tác hiệu quả, bất kể điều kiện ánh sáng.
Để xem các tính năng này hoạt động trong một toàn bộ mã nguồn hoàn chỉnh, sẵn sàng phát hành công khai, hãy xem Ứng dụng Jetpack Camera trên GitHub. Ứng dụng này triển khai cả Chế độ LLB AE và Google LLB, giúp bạn có tài liệu tham khảo cho quá trình tích hợp của riêng mình.
-
Tin tức về sản phẩmTrong kỷ nguyên trí tuệ nhân tạo, người dùng không còn chỉ thao tác trên các ứng dụng mà còn thể hiện những mục tiêu cấp cao và mong đợi các tác nhân AI như Gemini hoàn thành các quy trình làm việc nhiều bước, đôi khi trên nhiều ứng dụng trên thiết bị của họ.
Jingyu Shi • Thời gian đọc: 4 phút -
Tin tức về sản phẩmHôm nay, tại Hội nghị Nhà phát triển Android, chúng tôi xin thông báo về việc cung cấp rộng rãi nhiều công cụ và API được thiết kế để loại bỏ những trở ngại hằng ngày và giúp bạn linh hoạt hơn trong việc xây dựng các ứng dụng Android tuyệt vời.
Matthew McCullough • Thời gian đọc: 4 phút -
Tin tức về sản phẩmAndroid Studio Rabbit 2 hiện đã ổn định và sẵn sàng để bạn sử dụng trong môi trường thực tế. Bản phát hành này bao gồm các tính năng chính giúp cải thiện quá trình phát triển của bạn, chẳng hạn như Bring Your Own Agent (Sử dụng tác nhân của riêng bạn), các tính năng mới của Trình mô phỏng XR, bản cập nhật LeakCanary, công cụ quản lý kỹ năng mới của tác nhân, tính năng xem xét mã bằng AI và nhiều tính năng khác.
Matthew Warner • Đọc trong 3 phút
Nhận thông tin chi tiết mới nhất về hoạt động phát triển Android trong hộp thư đến của bạn hằng tuần.