أخبار المنتجات
تحسين الإضاءة المنخفضة: ميزة لزيادة سطوع خلاصات الكاميرا في الوقت الفعلي
قراءة لمدة 7 دقائق
شاركنا مؤخرًا كيف أتاح Instagram للمستخدمين التقاط صور مذهلة في الإضاءة المنخفضة باستخدام "الوضع الليلي". هذه الميزة مثالية للصور الثابتة، حيث يكون هناك وقت لدمج عمليات تعرّض متعددة للضوء من أجل إنشاء لقطة ثابتة عالية الجودة. ولكن ماذا عن اللحظات التي تحدث بين الصور؟ يحتاج المستخدمون إلى التفاعل مع الكاميرا أكثر من مجرد لحظة الضغط على زر الغالق. كما أنّهم يستخدمون المعاينة لضبط المشهد أو مسح رموز الاستجابة السريعة ضوئيًا.
اليوم، سنتناول ميزة تحسين الإضاءة المنخفضة (LLB)، وهي ميزة قوية مصمّمة لزيادة سطوع خلاصات الكاميرا في الوقت الفعلي. على عكس "الوضع الليلي" الذي يتطلب مدة التقاط ثابتة، تعمل ميزة "تحسين الإضاءة المنخفضة" على الفور في المعاينة المباشرة وتسجيلات الفيديو. تضبط ميزة "تحسين الإضاءة المنخفضة" تلقائيًا مقدار التحسين المطلوب استنادًا إلى الضوء المتاح، لذا فهي محسّنة لكل بيئة.
من خلال تحديث حديث، تتيح ميزة "تحسين الإضاءة المنخفضة" لمستخدمي Instagram ضبط اللقطة المثالية، ثم يؤدي تنفيذ "الوضع الليلي" الحالي إلى الحصول على صور عالية الجودة في الإضاءة المنخفضة نفسها التي يستمتع بها المستخدمون منذ أكثر من عام.
أهمية السطوع في الوقت الفعلي
في حين يهدف "الوضع الليلي" إلى تحسين جودة الصورة النهائية، فإنّ ميزة "تحسين الإضاءة المنخفضة" مخصّصة لتحسين سهولة الاستخدام والتفاعل في البيئات المظلمة. هناك عامل مهم آخر يجب أخذه في الاعتبار وهو أنّه يمكنك استخدام ميزة "تحسين الإضاءة المنخفضة" و"الوضع الليلي" بشكلٍ مستقل، على الرغم من أنّهما يعملان معًا بشكلٍ جيد جدًا. ستلاحظ في بعض حالات الاستخدام هذه أنّ ميزة "تحسين الإضاءة المنخفضة" لها قيمة في حد ذاتها عندما لا تكون هناك حاجة إلى صور "الوضع الليلي". إليك كيف تحسّن ميزة "تحسين الإضاءة المنخفضة" تجربة المستخدم:
- ضبط الإطار والتقاط أفضل: في المشاهد ذات الإضاءة الخافتة، يمكن أن تكون معاينة الكاميرا العادية مظلمة تمامًا. تزيد ميزة "تحسين الإضاءة المنخفضة" سطوع عدسة الكاميرا، ما يسمح للمستخدمين برؤية ما يضبطونه قبل الضغط على زر الغالق. لهذه التجربة، يمكنك استخدام "الوضع الليلي" للحصول على أفضل جودة لصور الإضاءة المنخفضة، أو يمكنك السماح لميزة "تحسين الإضاءة المنخفضة" بمنح المستخدم نتيجة صورة "ما تراه هو ما تحصل عليه".
- المسح الضوئي الموثوق به: رموز الاستجابة السريعة منتشرة في كل مكان، ولكن مسحها ضوئيًا في مطعم مظلم أو مرآب للسيارات غالبًا ما يكون محبطًا. من خلال خلاصة الكاميرا الأكثر سطوعًا بشكلٍ ملحوظ، يمكن لخوارزميات المسح الضوئي رصد رموز الاستجابة السريعة وفك تشفيرها بشكلٍ موثوق حتى في البيئات الخافتة جدًا.
- تفاعلات محسّنة: بالنسبة إلى التطبيقات التي تتضمّن تفاعلات فيديو مباشرة (مثل المساعدين المستندين إلى الذكاء الاصطناعي أو مكالمات الفيديو)، تزيد ميزة "تحسين الإضاءة المنخفضة" مقدار المعلومات التي يمكن ملاحظتها، ما يضمن حصول نماذج رؤية الكمبيوتر على بيانات كافية للعمل بها
الفرق في Instagram
يعمل فريق الهندسة المسؤول عن تطبيق Instagram على Android دائمًا بجد لتوفير تجربة كاميرا حديثة لمستخدميه. يمكنك أن ترى في المثال أعلاه الفرق الذي تحدثه ميزة "تحسين الإضاءة المنخفضة" على هاتف Pixel 10 Pro.
من السهل تخيّل الفرق الذي تحدثه هذه الميزة في تجربة المستخدم. إذا لم يتمكّن المستخدمون من رؤية ما يلتقطونه، فمن المرجّح أن يتوقفوا عن التقاط الصور.
اختيار طريقة التنفيذ
هناك طريقتان لتنفيذ ميزة "تحسين الإضاءة المنخفضة" من أجل توفير أفضل تجربة على أوسع مجموعة من الأجهزة:
- وضع التعرّض التلقائي للضوء في ميزة "تحسين الإضاءة المنخفضة": هذا وضع للتعرّض التلقائي للضوء على مستوى الأجهزة. يوفّر هذا الوضع أعلى جودة وأداء لأنّه يضبط خط أنابيب معالج إشارة الصورة (ISP) مباشرةً. يُرجى التحقّق من هذا الوضع أولاً دائمًا.
- ميزة "تحسين الإضاءة المنخفضة" من Google: إذا كان الجهاز لا يتيح وضع التعرّض التلقائي للضوء، يمكنك الرجوع إلى هذا الحل المستند إلى البرامج الذي توفّره "خدمات Google Play". يطبّق هذا الحل عملية ما بعد المعالجة على بث الكاميرا لزيادة سطوعها. بما أنّه حل مستند إلى البرامج بالكامل، فهو متاح على المزيد من الأجهزة، لذا يساعدك هذا التنفيذ في الوصول إلى المزيد من الأجهزة التي تستخدم ميزة "تحسين الإضاءة المنخفضة".
وضع التعرّض التلقائي للضوء في ميزة "تحسين الإضاءة المنخفضة" (الأجهزة)
الآلية:
يتوفّر هذا الوضع على الأجهزة التي تعمل بنظام التشغيل Android 15 والإصدارات الأحدث، ويتطلب أن يكون مصنّع المعدات الأصلية قد نفّذ الدعم في طبقة تجريد الأجهزة (HAL) (متاح حاليًا على أجهزة Pixel 10). يتكامل هذا الوضع مباشرةً مع معالج إشارة الصورة (ISP) في الكاميرا. إذا ضبطت CaptureRequest.CONTROL_AE_MODE على CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY، يتحكّم نظام الكاميرا في ذلك.
السلوك:
تحلّل طبقة تجريد الأجهزة/معالج إشارة الصورة المشهد وتضبط معلّمات أداة الاستشعار والمعالجة، بما في ذلك غالبًا زيادة وقت التعرّض للضوء، لزيادة سطوع الصورة. يمكن أن يؤدي ذلك إلى الحصول على لقطات بنسبة إشارة إلى تشويش (SNR) محسّنة بشكلٍ ملحوظ لأنّ وقت التعرّض للضوء الممتد، بدلاً من زيادة اكتساب أداة الاستشعار الرقمية (ISO)، يسمح لأداة الاستشعار بالتقاط المزيد من معلومات الضوء.
الميزة:
جودة صورة أفضل وكفاءة أكبر في استهلاك الطاقة لأنّه يستفيد من مسارات الأجهزة المخصّصة.
المقابل:
قد يؤدي ذلك إلى انخفاض معدّل اللقطات في الثانية في الظروف المظلمة جدًا لأنّ أداة الاستشعار تحتاج إلى مزيد من الوقت لالتقاط الضوء. يمكن أن ينخفض معدّل اللقطات في الثانية إلى 10 لقطات في الثانية في ظروف الإضاءة المنخفضة جدًا.
ميزة "تحسين الإضاءة المنخفضة" من Google (البرامج من خلال "خدمات Google Play")
الآلية:
يطبّق هذا الحل، الذي يتم توزيعه كوحدة اختيارية من خلال "خدمات Google Play"، عملية ما بعد المعالجة على بث الكاميرا. يستخدم هذا الحل تكنولوجيا متطورة لتحسين الصور في الوقت الفعلي تُعرف باسم HDRNet.
Google HDRNet:
يحلّل نموذج التعلّم العميق هذا الصورة بدقة منخفضة لتوقّع مجموعة مضغوطة من المعلمات (شبكة ثنائية). بعد ذلك، توجّه هذه الشبكة عملية التحسين الفعّالة والمتباينة مكانيًا للصورة كاملة الدقة على وحدة معالجة الرسومات. تم تدريب النموذج على زيادة سطوع الصور وتحسين جودتها في ظروف الإضاءة المنخفضة، مع التركيز على رؤية الوجه.
تنظيم العملية:
يتم تنظيم نموذج HDRNet والمنطق المصاحب له من خلال معالج "تحسين الإضاءة المنخفضة". ويشمل ذلك ما يلي:
-
تحليل المشهد:
آلة حاسبة مخصّصة تقدّر سطوع المشهد الحقيقي باستخدام البيانات الوصفية للكاميرا (حساسية أداة الاستشعار، ووقت التعرّض للضوء، وما إلى ذلك) ومحتوى الصورة. يحدّد هذا التحليل مستوى التحسين. -
معالجة HDRNet:
يطبّق نموذج HDRNet لزيادة سطوع اللقطة. تم ضبط النموذج المستخدَم للمشاهد ذات الإضاءة المنخفضة وتم تحسينه لتحقيق الأداء في الوقت الفعلي. -
المزج:
يتم مزج اللقطات الأصلية واللقطات التي تمت معالجتها باستخدام HDRNet. يتم التحكّم في مقدار المزج المطبّق بشكلٍ ديناميكي من خلال الآلة الحاسبة لسطوع المشهد، ما يضمن انتقالاً سلسًا بين الحالتَين المحسّنة وغير المحسّنة.
الميزة:
يعمل هذا الحل على مجموعة أوسع من الأجهزة (يتوافق حاليًا مع Samsung S22 Ultra وS23 Ultra وS24 Ultra وS25 Ultra وPixel 6 إلى Pixel 9) بدون الحاجة إلى دعم طبقة تجريد الأجهزة معيّنة. يحافظ هذا الحل على معدّل اللقطات في الثانية للكاميرا لأنّه تأثير ما بعد المعالجة.
المقابل:
بما أنّ هذه الطريقة هي طريقة ما بعد المعالجة، فإنّ الجودة محدودة بالمعلومات المتوفّرة في اللقطات التي تقدّمها أداة الاستشعار. لا يمكن استرداد التفاصيل التي فُقدت بسبب الظلام الشديد على مستوى أداة الاستشعار.
من خلال توفير مسارَين للأجهزة والبرامج، يقدّم "تحسين الإضاءة المنخفضة" حلاً قابلاً للتوسّع لتحسين أداء الكاميرا في الإضاءة المنخفضة في جميع أنحاء نظام Android. على المطوّرين إعطاء الأولوية لوضع التعرّض التلقائي للضوء عندما يكون متاحًا واستخدام ميزة "تحسين الإضاءة المنخفضة" من Google كحل احتياطي قوي.
تنفيذ ميزة "تحسين الإضاءة المنخفضة" في تطبيقك
لننظر الآن في كيفية تنفيذ كلتا ميزتَي "تحسين الإضاءة المنخفضة". يمكنك تنفيذ ما يلي سواء كنت تستخدم CameraX أو Camera2 في تطبيقك. للحصول على أفضل النتائج، ننصحك بتنفيذ الخطوتَين 1 و2.
الخطوة 1: وضع التعرّض التلقائي للضوء في ميزة "تحسين الإضاءة المنخفضة"
يتوفّر وضع التعرّض التلقائي للضوء في ميزة "تحسين الإضاءة المنخفضة" على أجهزة محدّدة تعمل بنظام التشغيل Android 15 والإصدارات الأحدث، ويعمل هذا الوضع كوضع محدّد للتعرّض التلقائي للضوء.
1. التحقّق من مدى التوفّر
أولاً، تحقَّق مما إذا كان جهاز الكاميرا يتيح وضع التعرّض التلقائي للضوء في ميزة "تحسين الإضاءة المنخفضة".
val cameraInfo = cameraProvider.getCameraInfo(cameraSelector) val isLlbSupported = cameraInfo.isLowLightBoostSupported
2. تفعيل الوضع
إذا كان جهازك يتيح وضع التعرّض التلقائي للضوء في ميزة "تحسين الإضاءة المنخفضة"، يمكنك تفعيله باستخدام عنصر CameraControl في 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. مراقبة الحالة
لا يعني طلب الوضع أنّه "يُحسّن" حاليًا. لا يفعّل النظام التحسين إلا عندما يكون المشهد مظلمًا فعلاً. يمكنك إعداد أداة مراقبة Observer لتعديل واجهة المستخدم (مثل عرض رمز القمر) أو التحويل إلى تدفق باستخدام دالة الإضافة asFlow().
if (isLlbSupported) {
camera?.cameraInfo.lowLightBoostState.asFlow().collectLatest { state ->
// Update UI accordingly
updateMoonIcon(state == LowLightBoostState.ACTIVE)
}
}
يمكنك قراءة الدليل الكامل حول وضع التعرّض التلقائي للضوء في ميزة "تحسين الإضاءة المنخفضة" هنا.
الخطوة 2: ميزة "تحسين الإضاءة المنخفضة" من Google
بالنسبة إلى الأجهزة التي لا تتيح وضع التعرّض التلقائي للضوء على مستوى الأجهزة، تعمل ميزة "تحسين الإضاءة المنخفضة" من Google كحل احتياطي قوي. تستخدم هذه الميزة LowLightBoostSession لاعتراض الخلاصة وزيادة سطوعها.
1. إضافة التبعيات
يتم توفير هذه الميزة من خلال "خدمات 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. تهيئة العميل
قبل بدء الكاميرا، استخدِم 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(). بالنسبة إلى 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.
الخطوات التالية
من خلال تنفيذ هذين الخيارَين، يمكنك التأكّد من أنّ المستخدمين يمكنهم الرؤية بوضوح والمسح الضوئي بشكلٍ موثوق والتفاعل بفعالية، بغض النظر عن ظروف الإضاءة.
للاطّلاع على هذه الميزات أثناء العمل ضمن قاعدة بيانات كاملة وجاهزة للإنتاج، اطّلِع على تطبيق Jetpack Camera على GitHub. يُنفّذ هذا التطبيق وضع التعرّض التلقائي للضوء في ميزة تحسين الإضاءة المنخفضة وميزة تحسين الإضاءة المنخفضة من Google، ما يمنحك مرجعًا لعملية الدمج الخاصة بك.
متابعة القراءة
-
أخبار المنتجات
إذا كنت مطوّر Android تبحث عن تنفيذ ميزات مبتكرة للذكاء الاصطناعي في تطبيقك، فقد أطلقنا مؤخرًا تحديثات جديدة قوية.
Thomas Ezan • قراءة لمدة 3 دقائق
-
أخبار المنتجات
وصل Android 17 إلى الإصدار التجريبي 4، وهو آخر إصدار تجريبي مجدول لدورة الإصدار هذه، ما يمثّل إنجازًا مهمًا لتوافق التطبيقات وثبات النظام الأساسي.
Daniel Galpin • قراءة لمدة 4 دقائق
-
أخبار المنتجات
نسعى إلى جعل Google Play التجربة الأكثر أمانًا وموثوقية قدر الإمكان. اليوم، نعلن عن مجموعة جديدة من تعديلات السياسات وميزة نقل الحساب لتعزيز خصوصية المستخدم وحماية مؤسستك من الاحتيال.
Bennet Manuel • قراءة لمدة 3 دقائق
البقاء على اطّلاع على آخر التحديثات
يمكنك تلقّي أحدث الإحصاءات حول تطوير Android في بريدك الوارد أسبوعيًا.