Düşük ışık güçlendirmesiyle anlık kamera feed'lerinizi aydınlatın
Okuma süresi: 7 dk.
Kısa süre önce Instagram'ın, kullanıcıların gece modunu kullanarak düşük ışıkta çarpıcı fotoğraflar çekmesini nasıl sağladığını paylaşmıştık. Bu özellik, yüksek kaliteli bir statik çekim oluşturmak için birden fazla pozlamanın birleştirilebileceği statik görüntüler için idealdir. Peki fotoğraflar arasında yaşanan anlar? Kullanıcıların, deklanşör düğmesine basıldığı anın dışında da kamerayla etkileşimde bulunması gerekir. Ayrıca, sahneyi oluşturmak veya QR kodlarını taramak için de önizlemeyi kullanırlar.
Bugün, anlık kamera akışlarını aydınlatmak için tasarlanmış güçlü bir özellik olan Zayıf Işık Güçlendirme (LLB)'yi ayrıntılı olarak ele alacağız. Gece Modu'nda sabit çekim süresi gerekirken Zayıf Işık Geliştirme özelliği, canlı önizlemenizde ve video kayıtlarınızda anında çalışır. LLB, mevcut ışığa göre ne kadar aydınlatma gerektiğini otomatik olarak ayarlar. Bu nedenle her ortam için optimize edilmiştir.
Yakın zamanda yapılan bir güncelleme ile LLB, Instagram kullanıcılarının mükemmel çekimi yapmasına olanak tanıyor. Mevcut gece modu uygulaması ise kullanıcıların bir yılı aşkın süredir keyifle kullandığı aynı yüksek kaliteli düşük ışık fotoğraflarını çekmelerini sağlıyor.
Anlık Parlaklık Neden Önemlidir?
Gece modu, nihai görüntü kalitesini artırmayı amaçlarken düşük ışık güçlendirme, karanlık ortamlarda kullanılabilirlik ve etkileşim için tasarlanmıştır. Göz önünde bulundurulması gereken bir diğer önemli faktör de bu iki özelliğin birlikte çok iyi çalışmasına rağmen bağımsız olarak da kullanılabileceğidir. Bu kullanım alanlarından bazılarında, gece modu fotoğraflarına ihtiyaç duyulmadığında LLB'nin tek başına da değerli olduğunu göreceksiniz. LLB, kullanıcı deneyimini şu şekilde iyileştirir:
- Daha İyi Kadraj ve Çekim: Loş ışıklı sahnelerde standart kamera önizlemesi tamamen karanlık olabilir. LLB, vizörü aydınlatarak kullanıcıların deklanşör düğmesine basmadan önce kadrajlarına aldıkları öğeleri görmelerini sağlar. Bu deneyimde, düşük ışıkta en iyi kalitede fotoğraf sonucu için gece modunu kullanabilir veya LLB'nin kullanıcıya "gördüğünüz gibi" bir fotoğraf sonucu vermesine izin verebilirsiniz.
- Güvenilir Tarama: QR kodları her yerde bulunur ancak bunları karanlık bir restoranda veya otoparkta taramak genellikle sinir bozucudur. Tarama algoritmaları, önemli ölçüde daha parlak bir kamera feed'i sayesinde QR kodlarını çok karanlık ortamlarda bile güvenilir bir şekilde algılayıp çözebilir.
- Gelişmiş Etkileşimler: Canlı video etkileşimleri (ör. yapay zeka asistanları veya görüntülü görüşmeler) içeren uygulamalarda LLB, algılanabilir bilgi miktarını artırarak bilgisayarla görme modellerinin çalışmak için yeterli veriye sahip olmasını sağlar.
Instagram'daki Fark
Android Instagram uygulamasının arkasındaki mühendislik ekibi, kullanıcılarına en iyi kamera deneyimini sunmak için her zaman yoğun bir şekilde çalışır. Yukarıdaki örnekte, LLB'nin Pixel 10 Pro'da ne kadar fark yarattığını görebilirsiniz.
Bu durumun kullanıcı deneyiminde ne kadar fark yarattığını tahmin etmek kolaydır. Kullanıcılar çektiklerini göremezse çekimi bırakma olasılıkları daha yüksektir.
Uygulama Seçme
En geniş cihaz yelpazesinde en iyi deneyimi sunmak için Zayıf Işık Güçlendirme'yi uygulamanın iki yolu vardır:
- Düşük ışık güçlendirmesi AE modu: Bu, donanım katmanı otomatik pozlama modudur. Görüntü sinyali işlemcisi (GSİ) ardışık düzenini doğrudan ayarladığı için en yüksek kaliteyi ve performansı sunar. Öncelikle bunu kontrol edin.
- Google Low Light Boost: Cihaz AE modunu desteklemiyorsa Google Play Hizmetleri tarafından sağlanan bu yazılıma dayalı çözüme geri dönebilirsiniz. Kamera görüntü akışını aydınlatmak için son işlem uygular. Tamamen yazılıma dayalı bir çözüm olduğundan daha fazla cihazda kullanılabilir. Bu nedenle, bu uygulama LLB ile daha fazla cihaza ulaşmanıza yardımcı olur.
Düşük ışık güçlendirmesi AE modu (donanım)
Mekanizma:
Bu mod, Android 15 ve sonraki sürümlerin yüklü olduğu cihazlarda desteklenir ve OEM'in HAL'de desteği uygulaması gerekir (şu anda Pixel 10 cihazlarda kullanılabilir). Doğrudan kameranın görüntü sinyali işlemcisiyle (ISP) entegre olur. CaptureRequest.CONTROL_AE_MODE değerini CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY olarak ayarlarsanız kamera sistemi kontrolü ele alır.
Davranış:
HAL/ISP, sahneyi analiz eder ve sensör ile işleme parametrelerini ayarlar. Bu ayarlamalar genellikle pozlama süresini artırarak görüntüyü aydınlatmayı içerir. Bu, dijital sensör kazancında (ISO) artış yerine pozlama süresinin uzatılması sayesinde sensörün daha fazla ışık bilgisi yakalamasına olanak tanıdığı için önemli ölçüde iyileştirilmiş sinyal-gürültü oranına (SNR) sahip kareler elde etmenizi sağlayabilir.
Avantaj:
Özel donanım yollarından yararlandığı için görüntü kalitesi ve güç verimliliği daha iyi olabilir.
Değişim:
Sensörün ışığı yakalaması için daha fazla zamana ihtiyacı olduğundan çok karanlık koşullarda daha düşük bir kare hızıyla sonuçlanabilir. Kare hızı, çok düşük ışık koşullarında 10 FPS'ye kadar düşebilir.
Google Low Light Boost (Google Play Hizmetleri aracılığıyla yazılım)
Mekanizma:
Google Play Hizmetleri üzerinden isteğe bağlı bir modül olarak dağıtılan bu çözüm, kamera görüntü akışına son işlem uygular. HDRNet adlı gelişmiş bir anlık görüntü geliştirme teknolojisi kullanır.
Google HDRNet:
Bu derin öğrenme modeli, kompakt bir parametre grubu (çift taraflı bir ızgara) tahmin etmek için görüntüyü daha düşük çözünürlükte analiz eder. Bu ızgara, GPU'daki tam çözünürlüklü görüntünün verimli ve uzamsal olarak değişen şekilde iyileştirilmesini sağlar. Model, yüz görünürlüğüne odaklanarak düşük ışık koşullarında görüntü kalitesini iyileştirmek ve parlaklığı artırmak için eğitilmiştir.
Süreç düzenleme:
HDRNet modeli ve beraberindeki mantık, düşük ışık güçlendirme işlemcisi tarafından düzenlenir. Bunlardan bazıları:
- Sahne Analizi:
Kamera meta verilerini (sensör hassasiyeti, pozlama süresi vb.) ve görüntü içeriğini kullanarak gerçek sahne parlaklığını tahmin eden özel bir hesap makinesi. Bu analiz, artış seviyesini belirler. - HDRNet İşleme:
Kareyi aydınlatmak için HDRNet modelini uygular. Kullanılan model, düşük ışıklı sahneler için ayarlanmış ve anlık performans için optimize edilmiştir. - Karıştırma:
Orijinal ve HDRNet ile işlenmiş kareler karıştırılır. Uygulanan karıştırma miktarı, sahne parlaklığı hesaplayıcı tarafından dinamik olarak kontrol edilir. Böylece, artırılmış ve artırılmamış durumlar arasında sorunsuz bir geçiş sağlanır.
Avantaj:
Daha geniş bir cihaz yelpazesinde çalışır (şu anda Samsung S22 Ultra, S23 Ultra, S24 Ultra, S25 Ultra ve Pixel 6 ile Pixel 9 cihazlarını destekler) ve belirli bir HAL desteği gerektirmez. Son işlem efekti olduğundan kameranın kare hızını korur.
Değişken:
Bir son işleme yöntemi olarak kalite, sensör tarafından sağlanan karelerdeki bilgilerle sınırlıdır. Sensör düzeyinde aşırı karanlık nedeniyle kaybolan ayrıntıları kurtaramaz.
Hem donanım hem de yazılım yolları sunan düşük ışık güçlendirmesi, Android ekosisteminde düşük ışıkta kamera performansını artırmak için ölçeklenebilir bir çözüm sağlar. Geliştiriciler, varsa AE moduna öncelik vermeli ve Google Zayıf Işık Güçlendirme'yi sağlam bir yedek olarak kullanmalıdır.
Uygulamanızda Düşük Işık Güçlendirmesini Uygulama
Şimdi de her iki LLB teklifinin nasıl uygulanacağına bakalım. Uygulamanızda CameraX veya Camera2 kullanmanıza bakılmaksızın aşağıdakileri uygulayabilirsiniz. En iyi sonuçlar için hem 1. hem de 2. adımı uygulamanızı öneririz.
1. adım: Zayıf ışıkta otomatik pozlama modunu güçlendirme
Android 15 ve sonraki sürümlerin yüklü olduğu belirli cihazlarda kullanılabilen LLB AE modu, belirli bir otomatik pozlama (AE) modu olarak işlev görür.
1. Uygunluk durumunu kontrol etme
Öncelikle kamera cihazının LLB AE modunu destekleyip desteklemediğini kontrol edin.
val cameraInfo = cameraProvider.getCameraInfo(cameraSelector) val isLlbSupported = cameraInfo.isLowLightBoostSupported
2. Modu etkinleştirme
Destekleniyorsa CameraX'in CameraControl nesnesini kullanarak LLB AE Modu'nu etkinleştirebilirsiniz.
// 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. Devleti İzleme
Modu istemiş olmanız, şu anda "artırıldığı" anlamına gelmez. Sistem, yalnızca sahne gerçekten karanlık olduğunda güçlendirmeyi etkinleştirir. Kullanıcı arayüzünüzü güncellemek (ör. ay simgesi göstermek) için Observer ayarlayabilir veya uzantı işlevi olan asFlow() ile Flow'a dönüştürebilirsiniz.
if (isLlbSupported) {
camera?.cameraInfo.lowLightBoostState.asFlow().collectLatest { state ->
// Update UI accordingly
updateMoonIcon(state == LowLightBoostState.ACTIVE)
}
}Düşük Işıkta AE Modunu Artırma ile ilgili kılavuzun tamamını okuyabilirsiniz.
2. adım: Google Zayıf Işık Güçlendirme
Donanım AE modunu desteklemeyen cihazlarda Google Low Light Boost, güçlü bir yedek olarak işlev görür. Akışı yakalayıp aydınlatmak için LowLightBoostSession kullanır.
1. Bağımlılık Ekleme
Bu özellik, Google Play Hizmetleri aracılığıyla sunulur.
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. İstemciyi başlatma
Kameranızı başlatmadan önce modülün yüklendiğinden ve cihazın desteklendiğinden emin olmak için LowLightBoostClient'ı kullanın.
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. LLB oturumu oluşturma
Google LLB her kareyi işler. Bu nedenle, ekran yüzeyinizi LowLightBoostSession'ya vermeniz gerekir. Bu işlem sonucunda, parlaklık uygulanmış bir yüzey size geri verilir. Camera2 uygulamalarında, sonuçta elde edilen Surface'i CaptureRequest.Builder.addTarget() ile ekleyebilirsiniz. CameraX'te bu işleme ardışık düzeni en iyi şekilde CameraEffect sınıfıyla uyumludur. Bu sınıfta, efekti SurfaceProcessor ile uygulayabilir ve bu kodda gösterildiği gibi SurfaceProvider ile önizlemenize geri verebilirsiniz.
// 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. Meta verileri iletme
Algoritmanın çalışması için kameranın otomatik pozlama durumunu analiz etmesi gerekir. Yakalanan sonuçları LLB oturumuna geri iletmeniz gerekir. CameraX'te bu işlem, Preview.Builder'ı Camera2Interop.Extender.setSessionCaptureCallback() ile genişleterek yapılabilir.
Camera2Interop.Extender(previewBuilder).setSessionCaptureCallback(
object : CameraCaptureSession.CaptureCallback() {
override fun onCaptureCompleted(
session: CameraCaptureSession,
request: CaptureRequest,
result: TotalCaptureResult
) {
super.onCaptureCompleted(session, request, result)
llbSession?.processCaptureResult(result)
}
}
)İstemci ve oturum için ayrıntılı uygulama adımlarını Google Low Light Boost kılavuzunda bulabilirsiniz.
Sonraki Adımlar
Bu iki seçeneği uygulayarak kullanıcılarınızın ışık koşullarından bağımsız olarak net bir şekilde görebilmesini, güvenilir bir şekilde tarayabilmesini ve etkili bir şekilde etkileşim kurabilmesini sağlayabilirsiniz.
Bu özellikleri eksiksiz ve üretime hazır bir kod tabanında görmek için GitHub'daki Jetpack Camera App'e göz atın. Hem LLB AE Modu hem de Google LLB'yi uygulayarak kendi entegrasyonunuz için referans sağlar.
-
Ürün HaberleriGoogle Play'de, büyümenizi sağlamanıza, yeni iş modellerine uyum sağlamanıza ve kullanıcılarınıza tam olarak bulundukları yerde ulaşmanıza yardımcı olmak için abonelik platformumuzu sürekli olarak genişletiyoruz.
Sheenam Mittal • Okuma süresi: 4 dakika -
Ürün HaberleriGeçen yıl Android Studio, tüm yapay zeka modellerine açıldı. Bugün, kodlama aracınızı seçme desteğini sunarak bir sonraki adımı atıyoruz.
Matthew Warner • Okuma süresi: 3 dk. -
Ürün HaberleriGooglebook, ortak bir Android temeli üzerine inşa edilmiş yeni bir dizüstü bilgisayar kategorisini tanıtıyor. HP, Dell, Lenovo, Acer ve Asus gibi iş ortaklarının yüksek performanslı donanımları, mobil kolaylığı masaüstü gücüyle birleştirir.
Fahd Imtiaz, Loryn Hairston • Okuma süresi: 4 dakika
Android geliştirmeyle ilgili en son analizleri haftalık olarak gelen kutunuza alın.