कम रोशनी में बेहतर फ़ोटो लेने की सुविधा की मदद से, कैमरे के रीयल-टाइम फ़ीड को बेहतर बनाएं
पढ़ने में 7 मिनट लगेंगे
हाल ही में, हमने बताया था कि Instagram ने नाइट मोड की सुविधा उपलब्ध कराई है. इसकी मदद से, उपयोगकर्ता कम रोशनी में भी शानदार फ़ोटो ले सकते हैं. यह सुविधा, स्टैटिक इमेज के लिए सबसे सही है. इसमें अलग-अलग एक्सपोज़र को मिलाकर, अच्छी क्वालिटी की स्टैटिक इमेज बनाने का समय मिलता है. हालांकि, फ़ोटो के बीच के पलों का क्या होगा? उपयोगकर्ताओं को कैमरे से सिर्फ़ शटर बटन दबाने के समय ही नहीं, बल्कि उससे ज़्यादा समय तक इंटरैक्ट करना होगा. वे सीन बनाने या क्यूआर कोड स्कैन करने के लिए भी झलक का इस्तेमाल करते हैं.
आज हम कम रोशनी वाला मोड (एलएलबी) के बारे में जानेंगे. यह एक बेहतरीन सुविधा है, जिसे रीयल-टाइम में कैमरा स्ट्रीम की रोशनी बढ़ाने के लिए डिज़ाइन किया गया है. नाइट मोड में, फ़ोटो को स्थिर रखने के लिए कुछ समय लगता है. हालांकि, कम रोशनी में बेहतर फ़ोटो लेने की सुविधा, लाइव प्रीव्यू और वीडियो रिकॉर्डिंग पर तुरंत काम करती है. एलएलबी की सुविधा, आस-पास की रोशनी के हिसाब से इमेज की चमक को अपने-आप अडजस्ट करती है. इसलिए, यह हर तरह के माहौल के लिए ऑप्टिमाइज़ की गई है.
हाल ही में हुए अपडेट के बाद, LLB की मदद से Instagram के उपयोगकर्ता, बेहतरीन शॉट ले सकते हैं. इसके बाद, नाइट मोड की सुविधा का इस्तेमाल करके, कम रोशनी में भी अच्छी क्वालिटी वाली फ़ोटो ली जा सकती हैं. इस सुविधा का इस्तेमाल, Instagram के उपयोगकर्ता पिछले एक साल से कर रहे हैं.
रीयल-टाइम में रोशनी का अडजस्ट होना क्यों ज़रूरी है
नाइट मोड का मकसद, फ़ोटो की क्वालिटी को बेहतर बनाना है. वहीं, Low Light Boost का मकसद, अंधेरे में फ़ोटो लेने की सुविधा को बेहतर बनाना है. एक और ज़रूरी बात यह है कि एलएलबी और नाइट मोड, दोनों एक साथ बहुत अच्छी तरह से काम करते हैं. हालांकि, इनका इस्तेमाल अलग-अलग भी किया जा सकता है. कुछ मामलों में, नाइट मोड की फ़ोटो की ज़रूरत न होने पर भी एलएलबी का इस्तेमाल किया जा सकता है. एलएलबी, उपयोगकर्ता अनुभव को इस तरह बेहतर बनाता है:
- बेहतर फ़्रेमिंग और कैप्चर: कम रोशनी वाले सीन में, स्टैंडर्ड कैमरा प्रीव्यू पूरी तरह से काला हो सकता है. एलएलबी, व्यूफ़ाइंडर को ज़्यादा चमकदार बनाता है. इससे लोगों को शटर बटन दबाने से पहले, यह देखने में मदद मिलती है कि वे किस चीज़ का फ़्रेम बना रहे हैं. इस सुविधा के लिए, कम रोशनी में अच्छी क्वालिटी की फ़ोटो पाने के लिए, नाइट मोड का इस्तेमाल किया जा सकता है. इसके अलावा, एलएलबी को उपयोगकर्ता को “जैसा दिखता है वैसा ही मिलता है” फ़ोटो का नतीजा देने की अनुमति दी जा सकती है.
- भरोसेमंद स्कैनिंग: क्यूआर कोड हर जगह मौजूद हैं, लेकिन अंधेरे रेस्टोरेंट या पार्किंग गैराज में इन्हें स्कैन करना अक्सर मुश्किल होता है. कैमरा फ़ीड को ज़्यादा बेहतर बनाने से, स्कैन करने वाले एल्गोरिदम, क्यूआर कोड को आसानी से पहचान सकते हैं और उन्हें डिकोड कर सकते हैं. ऐसा कम रोशनी वाली जगहों पर भी किया जा सकता है.
- बेहतर इंटरैक्शन: लाइव वीडियो इंटरैक्शन (जैसे, एआई असिस्टेंट या वीडियो कॉल) वाले ऐप्लिकेशन के लिए, एलएलबी से कंप्यूटर विज़न मॉडल को ज़्यादा जानकारी मिलती है. इससे यह पक्का होता है कि कंप्यूटर विज़न मॉडल के पास काम करने के लिए ज़रूरी डेटा है
Instagram में अंतर
Android Instagram ऐप्लिकेशन के लिए काम करने वाली इंजीनियरिंग टीम, अपने उपयोगकर्ताओं को बेहतरीन कैमरा अनुभव देने के लिए हमेशा कड़ी मेहनत करती है. ऊपर दिए गए उदाहरण में देखा जा सकता है कि Pixel 10 Pro पर LLB की वजह से क्या अंतर पड़ता है.
इससे उपयोगकर्ता अनुभव में क्या बदलाव होता है, इसका अंदाज़ा लगाना आसान है. अगर उपयोगकर्ताओं को यह नहीं दिखता कि वे क्या कैप्चर कर रहे हैं, तो इस बात की ज़्यादा संभावना है कि वे कैप्चर करना बंद कर देंगे.
लागू करने का तरीका चुनना
ज़्यादा से ज़्यादा डिवाइसों पर बेहतरीन अनुभव देने के लिए, कम रोशनी में बेहतर फ़ोटो खींचने की सुविधा को दो तरीकों से लागू किया जा सकता है:
- कम रोशनी में बेहतर फ़ोटो खींचने की सुविधा वाला एई मोड: यह हार्डवेयर लेयर वाला ऑटो-एक्सपोज़र मोड है. यह सबसे अच्छी क्वालिटी और परफ़ॉर्मेंस देता है, क्योंकि यह इमेज सिग्नल प्रोसेसर (आईएसपी) पाइपलाइन को सीधे तौर पर बेहतर बनाता है. हमेशा इसकी जांच करें.
- Google Low Light Boost: अगर डिवाइस पर एई मोड काम नहीं करता है, तो Google Play services की ओर से उपलब्ध कराए गए इस सॉफ़्टवेयर का इस्तेमाल किया जा सकता है. यह कैमरे की स्ट्रीम को ज़्यादा चमकदार बनाने के लिए, पोस्ट-प्रोसेसिंग लागू करता है. यह पूरी तरह से सॉफ़्टवेयर पर आधारित समाधान है. इसलिए, यह ज़्यादा डिवाइसों पर उपलब्ध है. इससे आपको ज़्यादा डिवाइसों पर LLB की सुविधा उपलब्ध कराने में मदद मिलती है.
कम रोशनी में बेहतर फ़ोटो खींचने की सुविधा वाला एई मोड (हार्डवेयर)
काम करने का तरीका:
यह मोड, Android 15 और इसके बाद के वर्शन वाले डिवाइसों पर काम करता है. इसके लिए, ओईएम को एचएएल में इस सुविधा को लागू करना होगा. फ़िलहाल, यह सुविधा Pixel 10 डिवाइसों पर उपलब्ध है. यह सीधे तौर पर कैमरे के इमेज सिग्नल प्रोसेसर (आईएसपी) के साथ इंटिग्रेट होता है. अगर आपने CaptureRequest.CONTROL_AE_MODE को CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY पर सेट किया है, तो कैमरा सिस्टम कंट्रोल ले लेता है.
व्यवहार:
HAL/ISP, सीन का विश्लेषण करता है. इसके बाद, सेंसर और प्रोसेसिंग के पैरामीटर को अडजस्ट करता है. इमेज को ज़्यादा चमकदार बनाने के लिए, अक्सर एक्सपोज़र टाइम को बढ़ा दिया जाता है. इससे बेहतर सिग्नल-टू-नॉइज़ रेशियो (एसएनआर) वाले फ़्रेम मिल सकते हैं. ऐसा इसलिए होता है, क्योंकि एक्सपोज़र टाइम बढ़ने से सेंसर को ज़्यादा रोशनी मिलती है. वहीं, डिजिटल सेंसर गेन (आईएसओ) बढ़ने से सेंसर को कम रोशनी मिलती है.
फ़ायदा:
इसमें इमेज की क्वालिटी बेहतर हो सकती है और यह कम बैटरी खर्च करता है, क्योंकि यह खास हार्डवेयर पाथवे का इस्तेमाल करता है.
ट्रेड ऑफ़:
बहुत अंधेरी जगहों पर फ़्रेम रेट कम हो सकता है, क्योंकि सेंसर को रोशनी कैप्चर करने में ज़्यादा समय लगता है. बहुत कम रोशनी में, फ़्रेम रेट 10 एफ़पीएस तक गिर सकता है.
Google Low Light Boost (Google Play services के ज़रिए सॉफ़्टवेयर)
मैकेनिज़्म:
यह समाधान, Google Play services के ज़रिए एक वैकल्पिक मॉड्यूल के तौर पर डिस्ट्रिब्यूट किया जाता है. यह कैमरा स्ट्रीम पर पोस्ट-प्रोसेसिंग लागू करता है. इसमें एचडीआरनेट नाम की, रीयलटाइम में इमेज को बेहतर बनाने वाली टेक्नोलॉजी का इस्तेमाल किया जाता है.
Google HDRNet:
यह डीप लर्निंग मॉडल, इमेज का विश्लेषण कम रिज़ॉल्यूशन पर करता है. इससे पैरामीटर के कॉम्पैक्ट सेट (द्विपक्षीय ग्रिड) का अनुमान लगाया जा सकता है. इसके बाद, यह ग्रिड जीपीयू पर फ़ुल रिज़ॉल्यूशन वाली इमेज को बेहतर बनाने में मदद करता है. इस मॉडल को कम रोशनी में इमेज की क्वालिटी को बेहतर बनाने और उसे ज़्यादा चमकदार बनाने के लिए ट्रेन किया गया है. इसमें चेहरे को साफ़ तौर पर दिखाने पर फ़ोकस किया जाता है.
प्रोसेस ऑर्केस्ट्रेशन:
एचडीआरनेट मॉडल और इससे जुड़े लॉजिक को, कम रोशनी में बेहतर फ़ोटो खींचने की सुविधा वाले प्रोसेसर से मैनेज किया जाता है. इसमें इस तरह का कॉन्टेंट शामिल है:
- सीन का विश्लेषण:
यह एक कस्टम कैलकुलेटर है. यह कैमरा मेटाडेटा (सेंसर की संवेदनशीलता, एक्सपोज़र टाइम वगैरह) और इमेज कॉन्टेंट का इस्तेमाल करके, सीन की असल चमक का अनुमान लगाता है. इस विश्लेषण से, बूस्ट लेवल का पता चलता है. - HDRNet प्रोसेसिंग:
यह फ़्रेम की चमक बढ़ाने के लिए, HDRNet मॉडल का इस्तेमाल करता है. इस्तेमाल किया गया मॉडल, कम रोशनी वाले सीन के लिए ट्यून किया गया है. साथ ही, इसे रीयलटाइम परफ़ॉर्मेंस के लिए ऑप्टिमाइज़ किया गया है. - ब्लेंडिंग:
ओरिजनल और HDRNet से प्रोसेस किए गए फ़्रेम को ब्लेंड किया जाता है. ब्लेंडिंग की सुविधा को कितना इस्तेमाल करना है, यह सीन की चमक का हिसाब लगाने वाले टूल से तय होता है. इससे, बूस्ट की गई और बूस्ट नहीं की गई स्थितियों के बीच आसानी से ट्रांज़िशन हो पाता है.
फ़ायदा:
यह ज़्यादा डिवाइसों पर काम करता है. फ़िलहाल, यह Samsung S22 Ultra, S23 Ultra, S24 Ultra, S25 Ultra, और Pixel 6 से Pixel 9 तक के फ़ोन पर काम करता है. इसके लिए, किसी खास एचएएल की ज़रूरत नहीं होती. यह इफ़ेक्ट, प्रोसेस होने के बाद लागू होता है. इसलिए, इससे कैमरे के फ़्रेम रेट पर कोई असर नहीं पड़ता.
ट्रेड-ऑफ़:
पोस्ट-प्रोसेसिंग के तरीके के तौर पर, क्वालिटी इस बात पर निर्भर करती है कि सेंसर से डिलीवर किए गए फ़्रेम में कितनी जानकारी मौजूद है. सेंसर लेवल पर बहुत ज़्यादा अंधेरा होने की वजह से, यह खोई हुई जानकारी को वापस नहीं ला सकता.
हार्डवेयर और सॉफ़्टवेयर, दोनों तरह के पाथवे उपलब्ध कराने की वजह से, कम रोशनी में बेहतर परफ़ॉर्मेंस देने वाला बूस्ट मोड, Android के सभी डिवाइसों पर काम करता है. इससे कम रोशनी में कैमरे की परफ़ॉर्मेंस को बेहतर बनाने में मदद मिलती है. डेवलपर को, जहां भी एई मोड उपलब्ध हो वहां उसे प्राथमिकता देनी चाहिए. साथ ही, Google Low Light Boost को एक मज़बूत फ़ॉलबैक के तौर पर इस्तेमाल करना चाहिए.
अपने ऐप्लिकेशन में कम रोशनी में बेहतर फ़ोटो खींचने की सुविधा लागू करना
अब देखते हैं कि एलएलबी की दोनों सुविधाओं को कैसे लागू किया जा सकता है. अपने ऐप्लिकेशन में CameraX या Camera2 का इस्तेमाल करने पर, यहां दिए गए तरीके लागू किए जा सकते हैं. बेहतर नतीजों के लिए, हमारा सुझाव है कि आप पहले और दूसरे, दोनों चरणों को लागू करें.
पहला चरण: कम रोशनी में बेहतर फ़ोटो खींचने की सुविधा वाला एई मोड
यह सुविधा, Android 15 और इसके बाद के वर्शन वाले चुनिंदा डिवाइसों पर उपलब्ध है. एलएलबी एई मोड, खास ऑटो-एक्सपोज़र (एई) मोड के तौर पर काम करता है.
1. उपलब्धता देखना
सबसे पहले, यह देखें कि कैमरा डिवाइस, एलएलबी एई मोड के साथ काम करता है या नहीं.
val cameraInfo = cameraProvider.getCameraInfo(cameraSelector) val isLlbSupported = cameraInfo.isLowLightBoostSupported
2. मोड चालू करना
अगर यह सुविधा उपलब्ध है, तो CameraX के CameraControl ऑब्जेक्ट का इस्तेमाल करके, LLB AE मोड चालू किया जा सकता है.
// 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. स्टेट की निगरानी करना
सिर्फ़ मोड का अनुरोध करने से, यह ज़रूरी नहीं है कि फ़िलहाल "बूस्टिंग" हो रही हो. सिस्टम, बूस्ट मोड को सिर्फ़ तब चालू करता है, जब सीन वाकई में अंधेरा हो. अपने यूज़र इंटरफ़ेस (जैसे, मून आइकॉन दिखाना) को अपडेट करने के लिए, Observer सेट अप किया जा सकता है. इसके अलावा, एक्सटेंशन फ़ंक्शन asFlow() का इस्तेमाल करके, इसे Flow में बदला जा सकता है.
if (isLlbSupported) {
camera?.cameraInfo.lowLightBoostState.asFlow().collectLatest { state ->
// Update UI accordingly
updateMoonIcon(state == LowLightBoostState.ACTIVE)
}
}कम रोशनी में बेहतर फ़ोटो लेने की सुविधा वाले एई मोड के बारे में पूरी गाइड यहां पढ़ें.
दूसरा चरण: Google Low Light Boost
जिन डिवाइसों में हार्डवेयर एई मोड की सुविधा नहीं होती है उनमें Google Low Light Boost, एक बेहतर फ़ॉलबैक के तौर पर काम करता है. यह स्ट्रीम को इंटरसेप्ट करने और उसे बेहतर बनाने के लिए, LowLightBoostSession का इस्तेमाल करता है.
1. डिपेंडेंसी जोड़ना
यह सुविधा, Google Play services के ज़रिए उपलब्ध कराई जाती है.
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. क्लाइंट शुरू करना
कैमरा शुरू करने से पहले, LowLightBoostClient का इस्तेमाल करके यह पक्का करें कि मॉड्यूल इंस्टॉल हो और डिवाइस पर काम करता हो.
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 सेशन बनाना
Google LLB हर फ़्रेम को प्रोसेस करता है. इसलिए, आपको LowLightBoostSession को अपना डिसप्ले सर्फ़ेस देना होगा. इसके बाद, यह आपको एक ऐसा सर्फ़ेस वापस देगा जिस पर ब्राइटनिंग लागू की गई हो. Camera2 ऐप्लिकेशन के लिए, CaptureRequest.Builder.addTarget() की मदद से, नतीजे के तौर पर मिले Surface को जोड़ा जा सकता है. CameraX के लिए, यह प्रोसेसिंग पाइपलाइन CameraEffect क्लास के साथ सबसे अच्छी तरह से काम करती है. इसमें SurfaceProcessor की मदद से इफ़ेक्ट लागू किया जा सकता है. साथ ही, SurfaceProvider की मदद से इसे वापस Preview पर भेजा जा सकता है. इस कोड में इसे देखा जा सकता है.
// 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. मेटाडेटा पास करना
इस एल्गोरिदम को काम करने के लिए, कैमरे की ऑटो-एक्सपोज़र की स्थिति का विश्लेषण करना होता है. आपको कैप्चर किए गए नतीजों को LLB सेशन में वापस भेजना होगा. CameraX में, ऐसा Camera2Interop.Extender.setSessionCaptureCallback() का इस्तेमाल करके, Preview.Builder को बढ़ाकर किया जा सकता है.
Camera2Interop.Extender(previewBuilder).setSessionCaptureCallback(
object : CameraCaptureSession.CaptureCallback() {
override fun onCaptureCompleted(
session: CameraCaptureSession,
request: CaptureRequest,
result: TotalCaptureResult
) {
super.onCaptureCompleted(session, request, result)
llbSession?.processCaptureResult(result)
}
}
)क्लाइंट और सेशन के लिए, लागू करने के बारे में ज़्यादा जानकारी वाले निर्देश, Google Low Light Boost गाइड में देखे जा सकते हैं.
अगले चरण
इन दोनों विकल्पों को लागू करने से, यह पक्का किया जा सकता है कि आपके उपयोगकर्ताओं को साफ़ तौर पर दिखे, वे भरोसेमंद तरीके से स्कैन कर पाएं, और रोशनी की स्थिति चाहे जैसी भी हो, वे असरदार तरीके से इंटरैक्ट कर पाएं.
इन सुविधाओं को पूरी तरह से काम करते हुए देखने के लिए, GitHub पर Jetpack Camera App देखें. इसमें LLB AE मोड और Google LLB, दोनों को लागू किया गया है. इससे आपको अपने इंटिग्रेशन के लिए रेफ़रंस मिलता है.
-
प्रॉडक्ट से जुड़ी खबरेंGoogle Play पर, हम उपयोगकर्ताओं को सबसे अच्छा अनुभव देने के लिए प्रतिबद्ध हैं. साथ ही, हम यह भी पक्का करते हैं कि डेवलपर के पास सफल होने के लिए ज़रूरी टूल और अडैप्टेबिलिटी हो.
Paul Feng • तीन मिनट में पढ़ा जा सकता है -
प्रॉडक्ट से जुड़ी खबरेंपिछले साल, हमने Android डेवलपर की पहचान की पुष्टि करने की सुविधा लॉन्च की थी. इससे, हमने अपने नेटवर्क की सुरक्षा को बेहतर बनाया था. साथ ही, बुरे मकसद से काम करने वाले लोगों या ग्रुप को नुकसान पहुंचाने वाले ऐप्लिकेशन रिलीज़ करने से रोका था. ये लोग अपनी पहचान छिपाकर ऐसा करते थे.
Matthew Forsythe • दो मिनट में पढ़ें -
प्रॉडक्ट से जुड़ी खबरेंऑगमेंटेड ओवरले से लेकर पूरी तरह से इमर्सिव एनवायरमेंट तक, Android XR का इकोसिस्टम तेज़ी से बढ़ रहा है. Samsung Galaxy XR, आज से ही उपलब्ध है.
Stevan Silva, Vinny DaSilva • तीन मिनट में पढ़ा जा सकता है
Android डेवलपमेंट से जुड़ी नई अहम जानकारी, हर हफ़्ते अपने इनबॉक्स में पाएं.