प्रॉडक्ट से जुड़ी खबरें
कम रोशनी में बेहतर फ़ोटो लेने की सुविधा की मदद से, रीयल-टाइम में कैमरा स्ट्रीम को बेहतर बनाएं
7 मिनट में पढ़ा जा सकता है
हाल ही में, हमने बताया था कि Instagram पर नाइट मोड की मदद से, कम रोशनी में शानदार फ़ोटो कैसे ली जा सकती हैं. यह सुविधा, स्थिर इमेज के लिए सबसे सही है. इसमें, अच्छी क्वालिटी की स्थिर इमेज बनाने के लिए, कई एक्सपोज़र को एक साथ जोड़ा जा सकता है. हालांकि, फ़ोटो के बीच के पलों के बारे में क्या? शटर बटन दबाने के अलावा, उपयोगकर्ताओं को कैमरे के साथ इंटरैक्ट करने की ज़रूरत होती है. वे सीन कंपोज़ करने या क्यूआर कोड स्कैन करने के लिए, झलक का भी इस्तेमाल करते हैं.
आज हम कम रोशनी में बेहतर फ़ोटो लेने की सुविधा (एलएलबी) के बारे में बात करेंगे. यह एक बेहतरीन सुविधा है, जिसे रीयल-टाइम में कैमरा स्ट्रीम को बेहतर बनाने के लिए डिज़ाइन किया गया है. नाइट मोड में, फ़ोटो कैप्चर करने के लिए डिवाइस को स्थिर रखना पड़ता है. हालांकि, कम रोशनी में बेहतर फ़ोटो लेने की सुविधा, लाइव झलक और वीडियो रिकॉर्डिंग पर तुरंत काम करती है. एलएलबी, उपलब्ध रोशनी के हिसाब से, अपने-आप तय करता है कि कितनी रोशनी की ज़रूरत है. इसलिए, यह हर तरह के माहौल के लिए ऑप्टिमाइज़ की गई है.
हाल ही में हुए अपडेट के बाद, एलएलबी की मदद से Instagram उपयोगकर्ता, शानदार फ़ोटो ले सकते हैं. साथ ही, नाइट मोड की मौजूदा सुविधा की मदद से, कम रोशनी में अच्छी क्वालिटी वाली फ़ोटो ली जा सकती हैं. उपयोगकर्ता, पिछले एक साल से इस सुविधा का फ़ायदा उठा रहे हैं.
रीयल-टाइम में रोशनी की सुविधा क्यों ज़रूरी है
नाइट मोड का मकसद, फ़ोटो की क्वालिटी को बेहतर बनाना है. वहीं, कम रोशनी में बेहतर फ़ोटो लेने की सुविधा, कम रोशनी वाले माहौल में इस्तेमाल और इंटरैक्टिविटी के लिए है. एक और अहम बात यह है कि एलएलबी और नाइट मोड, दोनों का इस्तेमाल अलग-अलग किया जा सकता है. हालांकि, ये दोनों एक साथ भी काम करते हैं. कुछ मामलों में, एलएलबी की सुविधा अपने-आप काम करती है. इसके लिए, नाइट मोड की ज़रूरत नहीं होती. एलएलबी, उपयोगकर्ता अनुभव को कैसे बेहतर बनाता है, यहां बताया गया है:
- बेहतर फ़्रेमिंग और कैप्चर: कम रोशनी वाले सीन में, सामान्य कैमरा झलक पूरी तरह से काली दिख सकती है. एलएलबी, व्यूफ़ाइंडर को बेहतर बनाता है. इससे उपयोगकर्ता, शटर बटन दबाने से पहले देख पाते हैं कि वे किस चीज़ को फ़्रेम कर रहे हैं. इस अनुभव के लिए, कम रोशनी में अच्छी क्वालिटी वाली फ़ोटो लेने के लिए, नाइट मोड का इस्तेमाल किया जा सकता है. इसके अलावा, एलएलबी की मदद से, उपयोगकर्ता को “जैसा दिखता है वैसा ही मिलता है” वाली फ़ोटो मिल सकती है.
- भरोसेमंद स्कैनिंग: क्यूआर कोड हर जगह मौजूद हैं. हालांकि, कम रोशनी वाले रेस्टोरेंट या पार्किंग गैराज में इन्हें स्कैन करना अक्सर मुश्किल होता है. कैमरा फ़ीड की रोशनी बेहतर होने की वजह से, स्कैनिंग एल्गोरिदम, कम रोशनी वाले माहौल में भी क्यूआर कोड को भरोसेमंद तरीके से पहचान और डिकोड कर सकते हैं.
- बेहतर इंटरैक्शन: लाइव वीडियो इंटरैक्शन वाले ऐप्लिकेशन (जैसे, एआई असिस्टेंट या वीडियो कॉल) के लिए, एलएलबी, दिखने वाली जानकारी की मात्रा को बढ़ाता है. इससे, कंप्यूटर विज़न मॉडल के पास काम करने के लिए, ज़रूरत के मुताबिक डेटा होता है
Instagram में अंतर
Android Instagram ऐप्लिकेशन को बनाने वाली इंजीनियरिंग टीम, अपने उपयोगकर्ताओं को बेहतर कैमरा अनुभव देने के लिए हमेशा काम करती रहती है. ऊपर दिए गए उदाहरण में देखा जा सकता है कि एलएलबी, Pixel 10 Pro पर कितना अंतर पैदा करता है.
इससे उपयोगकर्ता अनुभव में कितना अंतर आता है, इसका अंदाज़ा आसानी से लगाया जा सकता है. अगर उपयोगकर्ता, कैप्चर की जा रही चीज़ को नहीं देख पाते हैं, तो इस बात की संभावना ज़्यादा होती है कि वे कैप्चर करना छोड़ देंगे.
अपने हिसाब से लागू करने का तरीका चुनना
कम रोशनी में बेहतर फ़ोटो लेने की सुविधा को लागू करने के दो तरीके हैं. इससे, ज़्यादा से ज़्यादा डिवाइसों पर बेहतर अनुभव दिया जा सकता है:
- कम रोशनी में बेहतर फ़ोटो लेने की सुविधा वाला एई मोड: यह हार्डवेयर-लेयर वाला ऑटो-एक्सपोज़र मोड है. यह सबसे अच्छी क्वालिटी और परफ़ॉर्मेंस देता है, क्योंकि यह सीधे इमेज सिग्नल प्रोसेसर (आईएसपी) पाइपलाइन को बेहतर बनाता है. सबसे पहले, इसकी जांच करें.
- 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 पर सेट किया है, तो कैमरा सिस्टम कंट्रोल ले लेता है.
व्यवहार:
एचएएल/आईएसपी, सीन का विश्लेषण करता है और सेंसर और प्रोसेसिंग पैरामीटर को अडजस्ट करता है. इसमें, इमेज को बेहतर बनाने के लिए, अक्सर एक्सपोज़र टाइम बढ़ाना शामिल होता है. इससे, सिग्नल-टू-नॉइज़ रेशियो (एसएनआर) को बेहतर बनाया जा सकता है. ऐसा इसलिए, क्योंकि डिजिटल सेंसर गेन (आईएसओ) में बढ़ोतरी के बजाय, एक्सपोज़र टाइम बढ़ाने से, सेंसर ज़्यादा रोशनी की जानकारी कैप्चर कर पाता है.
फ़ायदा:
इमेज की क्वालिटी और पावर एफिशिएंसी बेहतर हो सकती है, क्योंकि यह खास हार्डवेयर पाथवे का इस्तेमाल करता है.
नुकसान:
बहुत कम रोशनी वाले माहौल में, फ़्रेम रेट कम हो सकता है, क्योंकि सेंसर को रोशनी कैप्चर करने में ज़्यादा समय लगता है. बहुत कम रोशनी वाले माहौल में, फ़्रेम रेट 10 एफपीएस तक गिर सकता है.
Google Low Light Boost (Google Play services के ज़रिए सॉफ़्टवेयर)
मैकेनिज़्म:
यह समाधान, Google Play services के ज़रिए एक वैकल्पिक मॉड्यूल के तौर पर डिस्ट्रिब्यूट किया जाता है. यह कैमरा स्ट्रीम पर पोस्ट-प्रोसेसिंग लागू करता है. यह HDRNet नाम की, रीयल-टाइम में इमेज को बेहतर बनाने वाली एक बेहतरीन टेक्नोलॉजी का इस्तेमाल करता है.
Google HDRNet:
यह डीप लर्निंग मॉडल, कम रिज़ॉल्यूशन पर इमेज का विश्लेषण करके, पैरामीटर का एक छोटा सेट (बाइलेटरल ग्रिड) का अनुमान लगाता है. इसके बाद, यह ग्रिड, जीपीयू पर पूरी तरह से रिज़ॉल्यूशन वाली इमेज को बेहतर बनाने में मदद करता है. मॉडल को कम रोशनी वाले माहौल में, इमेज की क्वालिटी को बेहतर बनाने और रोशनी बढ़ाने के लिए ट्रेन किया जाता है. इसमें, चेहरे की विज़िबिलिटी पर फ़ोकस किया जाता है.
प्रोसेस ऑर्केस्ट्रेशन:
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 ऑब्जेक्ट का इस्तेमाल करके, एलएलबी एई मोड को चालू किया जा सकता है.
// 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. स्टेटस की निगरानी करना
सिर्फ़ मोड का अनुरोध करने का मतलब यह नहीं है कि यह फ़िलहाल "बूस्ट" कर रहा है. सिस्टम, बूस्ट को सिर्फ़ तब चालू करता है, जब सीन में वाकई कम रोशनी होती है. यूज़र इंटरफ़ेस (यूआई) को अपडेट करने के लिए, ऑब्ज़र्वर सेट अप किया जा सकता है. जैसे, चंद्रमा का आइकॉन दिखाना. इसके अलावा, एक्सटेंशन फ़ंक्शन asFlow() का इस्तेमाल करके, इसे फ़्लो में बदला जा सकता है.
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. एलएलबी सेशन बनाना
Google एलएलबी, हर फ़्रेम को प्रोसेस करता है. इसलिए, आपको अपने डिसप्ले Surface को LowLightBoostSession देना होगा. इसके बदले में, आपको एक ऐसा Surface मिलता है जिस पर रोशनी की सुविधा लागू की गई है. Camera2 ऐप्लिकेशन के लिए, CaptureRequest.Builder.addTarget() के साथ, नतीजे के तौर पर मिले Surface को जोड़ा जा सकता है. CameraX के लिए, यह प्रोसेसिंग पाइपलाइन, CameraEffect क्लास के साथ सबसे अच्छी तरह से काम करती है. इसमें, SurfaceProcessor की मदद से इफ़ेक्ट लागू किया जा सकता है और SurfaceProvider की मदद से, इसे अपनी झलक में वापस दिया जा सकता है. इसके लिए, यह कोड देखें.
// 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. मेटाडेटा पास करना
एल्गोरिदम को काम करने के लिए, उसे कैमरे के ऑटो-एक्सपोज़र स्टेटस का विश्लेषण करना होगा. आपको कैप्चर के नतीजे, एलएलबी सेशन में वापस पास करने होंगे. CameraX में, Preview.Builder को 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)
}
}
)क्लाइंट और सेशन के लिए, लागू करने के बारे में ज़्यादा जानकारी, Google Low Light Boost की गाइड में देखी जा सकती है.
अगले चरण
इन दोनों विकल्पों को लागू करने से, यह पक्का होता है कि आपके उपयोगकर्ता, रोशनी की स्थिति चाहे जैसी भी हो, साफ़ तौर पर देख सकें, भरोसेमंद तरीके से स्कैन कर सकें, और असरदार तरीके से इंटरैक्ट कर सकें.
इन सुविधाओं को, प्रोडक्शन के लिए तैयार कोडबेस में देखने के लिए, GitHub पर Jetpack Camera App देखें. इसमें, एलएलबी एई मोड और Google एलएलबी, दोनों को लागू किया गया है. इससे, आपको अपने इंटिग्रेशन के लिए रेफ़रंस मिलता है.
पढ़ना जारी रखें
-
प्रॉडक्ट से जुड़ी खबरें
हमें यह बताते हुए खुशी हो रही है कि Android XR के लिए, Unreal Engine और Godot के आधिकारिक सपोर्ट की सुविधा उपलब्ध हो गई है. हम नए टूल भी लॉन्च कर रहे हैं. इन्हें आपकी परफ़ॉर्मेंस को बेहतर बनाने और नए XR की सुविधाएं उपलब्ध कराने के लिए डिज़ाइन किया गया है: Android XR Engine Hub और Android XR Interaction Framework.
Luke Hopkins • 4 मिनट में पढ़ा जा सकता है
-
प्रॉडक्ट से जुड़ी खबरें
Android 17 के रिलीज़ होने के बाद, हम अडैप्टिव फ़र्स्ट डेवलपमेंट स्टैंडर्ड पर ट्रांज़िशन कर रहे हैं. आपके उपयोगकर्ता अब सिर्फ़ एक फ़ॉर्म फ़ैक्टर पर निर्भर नहीं रहते. वे दिन भर फ़ोन, फ़ोल्ड किए जा सकने वाले डिवाइस, टैबलेट, लैपटॉप, Automotive डिसप्ले, और इमर्सिव XR एनवायरमेंट के बीच ट्रांज़िशन करते हैं.
Fahd Imtiaz • 4 मिनट में पढ़ा जा सकता है
-
प्रॉडक्ट से जुड़ी खबरें
हमें Google TV की उन सुविधाओं और डेवलपर टूल के बारे में बताते हुए खुशी हो रही है जिन्हें आपके कॉन्टेंट की खोज को बढ़ाने और आपके ऐप्लिकेशन को टीवी के आने वाले अनुभवों के लिए तैयार करने के लिए डिज़ाइन किया गया है.
Paul Lammertsma • 4 मिनट में पढ़ा जा सकता है
अप-टू-डेट रहें
Android डेवलपमेंट से जुड़ी नई अहम जानकारी, हर हफ़्ते अपने इनबॉक्स में पाएं.