कम रोशनी में बेहतर फ़ोटो लेने की सुविधा की मदद से, रीयल-टाइम कैमरा फ़ीड को बेहतर बनाएं
7 मिनट में पढ़ें
हमने हाल ही में बताया था कि Instagram ने उपयोगकर्ताओं को नाइट मोड का इस्तेमाल करके, कम रोशनी में शानदार फ़ोटो लेने की सुविधा कैसे दी है. यह सुविधा, स्टैटिक इमेज के लिए सबसे सही है. इसमें अच्छी क्वालिटी का स्टैटिक शॉट बनाने के लिए, कई एक्सपोज़र को एक साथ जोड़ा जा सकता है. लेकिन, फ़ोटो के बीच के पलों का क्या होगा? उपयोगकर्ताओं को कैमरे से सिर्फ़ शटर बटन दबाने के समय ही नहीं, बल्कि उससे ज़्यादा समय तक इंटरैक्ट करना होगा. ये लोग, सीन बनाने या क्यूआर कोड स्कैन करने के लिए भी झलक का इस्तेमाल करते हैं.
आज हम कम रोशनी वाला मोड (एलएलबी) के बारे में जानेंगे. यह एक बेहतरीन सुविधा है, जिसे रीयल-टाइम में कैमरा स्ट्रीम की रोशनी बढ़ाने के लिए डिज़ाइन किया गया है. नाइट मोड में, फ़ोटो को स्थिर रखने की ज़रूरत होती है. हालांकि, Low Light Boost की सुविधा, लाइव प्रीव्यू और वीडियो रिकॉर्डिंग पर तुरंत काम करती है. एलएलबी की सुविधा, आस-पास की रोशनी के हिसाब से इमेज को अपने-आप बेहतर बनाती है. इसलिए, यह हर तरह के माहौल के लिए ऑप्टिमाइज़ की गई है.
हाल ही में हुए अपडेट के बाद, LLB की मदद से Instagram का इस्तेमाल करने वाले लोग, बेहतरीन शॉट ले सकते हैं. इसके बाद, नाइट मोड की सुविधा का इस्तेमाल करके, कम रोशनी में भी अच्छी क्वालिटी वाली फ़ोटो ली जा सकती हैं. इस सुविधा का इस्तेमाल, लोग एक साल से ज़्यादा समय से कर रहे हैं.
रीयल-टाइम में चमक कम या ज़्यादा करने की सुविधा क्यों ज़रूरी है
नाइट मोड का मकसद, फ़ोटो की क्वालिटी को बेहतर बनाना है. वहीं, Low Light Boost का मकसद, अंधेरे में फ़ोटो लेने की सुविधा को बेहतर बनाना है. एक और ज़रूरी बात यह है कि एलएलबी और नाइट मोड, दोनों एक साथ बहुत अच्छी तरह से काम करते हैं. हालांकि, इनका इस्तेमाल अलग-अलग भी किया जा सकता है. कुछ मामलों में, नाइट मोड की फ़ोटो की ज़रूरत न होने पर भी एलएलबी का इस्तेमाल किया जा सकता है. एलएलबी, उपयोगकर्ता अनुभव को इस तरह बेहतर बनाता है:
- बेहतर फ़्रेमिंग और कैप्चर: कम रोशनी वाले सीन में, स्टैंडर्ड कैमरा प्रीव्यू पूरी तरह से काला हो सकता है. एलएलबी, व्यूफ़ाइंडर को ज़्यादा रोशनी देता है. इससे उपयोगकर्ता, शटर बटन दबाने से पहले यह देख पाते हैं कि वे किस चीज़ का फ़्रेम बना रहे हैं. इस सुविधा के लिए, कम रोशनी में अच्छी क्वालिटी की फ़ोटो पाने के लिए, नाइट मोड का इस्तेमाल किया जा सकता है. इसके अलावा, एलएलबी को उपयोगकर्ता को “जैसा दिखता है वैसा ही मिलता है” फ़ोटो का नतीजा देने की अनुमति दी जा सकती है.
- भरोसेमंद स्कैनिंग: क्यूआर कोड हर जगह मौजूद होते हैं. हालांकि, अंधेरे रेस्टोरेंट या पार्किंग गैराज में इन्हें स्कैन करना मुश्किल होता है. कैमरे की फ़ीड को ज़्यादा रोशनी मिलने से, स्कैन करने वाले एल्गोरिदम, क्यूआर कोड को आसानी से पहचान सकते हैं और उन्हें डिकोड कर सकते हैं. ऐसा कम रोशनी वाले माहौल में भी किया जा सकता है.
- बेहतर इंटरैक्शन: लाइव वीडियो इंटरैक्शन (जैसे, एआई असिस्टेंट या वीडियो कॉल) वाले ऐप्लिकेशन के लिए, LLB से कंप्यूटर विज़न मॉडल को ज़्यादा जानकारी मिलती है. इससे यह पक्का होता है कि कंप्यूटर विज़न मॉडल के पास काम करने के लिए ज़रूरी डेटा है
Instagram में अंतर
Android Instagram ऐप्लिकेशन की इंजीनियरिंग टीम, अपने उपयोगकर्ताओं को बेहतरीन कैमरा अनुभव देने के लिए हमेशा काम करती रहती है. ऊपर दिए गए उदाहरण में देखा जा सकता है कि Pixel 10 Pro पर LLB की वजह से कितना फ़र्क़ पड़ता है.
इससे उपयोगकर्ता अनुभव पर पड़ने वाले असर का अंदाज़ा आसानी से लगाया जा सकता है. अगर उपयोगकर्ताओं को यह नहीं दिखता कि वे क्या कैप्चर कर रहे हैं, तो इस बात की संभावना बढ़ जाती है कि वे कैप्चर करने की प्रोसेस को बीच में ही छोड़ देंगे.
लागू करने का तरीका चुनना
कम रोशनी में बेहतर फ़ोटो खींचने की सुविधा को लागू करने के दो तरीके हैं, ताकि ज़्यादा से ज़्यादा डिवाइसों पर बेहतरीन अनुभव दिया जा सके:
- कम रोशनी में बेहतर फ़ोटो खींचने की सुविधा वाला एई मोड: यह हार्डवेयर लेयर वाला ऑटो-एक्सपोज़र मोड है. यह सबसे अच्छी क्वालिटी और परफ़ॉर्मेंस देता है, क्योंकि यह इमेज सिग्नल प्रोसेसर (आईएसपी) पाइपलाइन को सीधे तौर पर बेहतर बनाता है. सबसे पहले, इसकी जांच करें.
- Google Low Light Boost: अगर डिवाइस पर एई मोड काम नहीं करता है, तो Google Play services की ओर से उपलब्ध कराए गए इस सॉफ़्टवेयर का इस्तेमाल किया जा सकता है. यह कैमरे से किसी और डिवाइस पर स्ट्रीम किए गए वीडियो को ज़्यादा चमकदार बनाने के लिए, प्रोसेसिंग पूरी होने के बाद लागू होता है. यह पूरी तरह से सॉफ़्टवेयर पर आधारित समाधान है. इसलिए, यह ज़्यादा डिवाइसों पर उपलब्ध है. इससे आपको एलएलबी की सुविधा को ज़्यादा डिवाइसों पर उपलब्ध कराने में मदद मिलती है.
कम रोशनी में बेहतर फ़ोटो खींचने की सुविधा वाला एई मोड (हार्डवेयर)
मैकेनिज़्म:
यह मोड, 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 तक के फ़ोन पर काम करती है. इसके लिए, किसी खास एचएएल की ज़रूरत नहीं होती. यह इफ़ेक्ट, प्रोसेसिंग पूरी होने के बाद लागू होता है. इसलिए, इससे कैमरे का फ़्रेम रेट बना रहता है.
ट्रेड-ऑफ़:
पोस्ट-प्रोसेसिंग के तरीके के तौर पर, क्वालिटी इस बात पर निर्भर करती है कि सेंसर से डिलीवर किए गए फ़्रेम में कितनी जानकारी मौजूद है. सेंसर लेवल पर बहुत ज़्यादा अंधेरा होने की वजह से, यह खोई हुई जानकारी को वापस नहीं ला सकता.
हार्डवेयर और सॉफ़्टवेयर, दोनों तरह के पाथवे उपलब्ध कराने की वजह से, Low Light Boost की मदद से 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)
}
}Low Light Boost AE मोड के बारे में पूरी गाइड यहां पढ़ें.
दूसरा चरण: 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 हर फ़्रेम को प्रोसेस करता है. इसलिए, आपको अपना डिसप्ले Surface, LowLightBoostSession को देना होगा. इसके बाद, यह आपको ऐसा Surface वापस देगा जिस पर ब्राइटनिंग लागू की गई हो. 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 पर अपने सदस्यता प्लैटफ़ॉर्म का लगातार विस्तार कर रहे हैं, ताकि आपको अपने कारोबार को आगे बढ़ाने, नए कारोबारी मॉडल अपनाने, और अपने उपयोगकर्ताओं की ज़रूरतों को पूरा करने में मदद मिल सके.
Sheenam Mittal • 4 मिनट में पढ़ें -
प्रॉडक्ट से जुड़ी खबरेंपिछले साल, Android Studio को किसी भी एआई मॉडल के लिए उपलब्ध कराया गया था. आज हम एक और कदम आगे बढ़ाते हुए, आपकी पसंद के कोडिंग एजेंट के लिए सहायता उपलब्ध करा रहे हैं.
Matthew Warner • 3 मिनट में पढ़ा जा सकता है -
प्रॉडक्ट से जुड़ी खबरेंGooglebook, Android पर आधारित लैपटॉप की नई कैटगरी पेश करता है. HP, Dell, Lenovo, Acer, और Asus जैसे पार्टनर के बेहतरीन हार्डवेयर में, मोबाइल की सुविधा के साथ-साथ डेस्कटॉप की पावर भी मिलती है.
Fahd Imtiaz, Loryn Hairston • 4 मिनट में पढ़ें
Android डेवलपमेंट से जुड़ी नई अहम जानकारी, हर हफ़्ते अपने इनबॉक्स में पाएं.