شاركنا مؤخرًا كيف أتاحت Instagram للمستخدمين التقاط صور مذهلة في الإضاءة المنخفضة باستخدام "الوضع الليلي". هذه الميزة مثالية للصور الثابتة، حيث يتوفّر الوقت لدمج درجات تعرّض متعددة للإضاءة من أجل إنشاء لقطة ثابتة عالية الجودة. ولكن ماذا عن اللحظات التي تحدث بين الصور؟ يحتاج المستخدمون إلى التفاعل مع الكاميرا أكثر من مجرد الضغط على زر الغالق. يستخدمون المعاينة أيضًا لإنشاء المشهد أو مسح رموز الاستجابة السريعة ضوئيًا.
اليوم، سنتعرّف على ميزة "تحسين الإضاءة المنخفضة" (LLB)، وهي ميزة فعّالة مصمَّمة لتحسين سطوع فيديوهات البث المباشر من الكاميرا. على عكس "الوضع الليلي" الذي يتطلّب مدة التقاط ثابتة، تعمل ميزة "تحسين الإضاءة المنخفضة" على الفور في المعاينة المباشرة وتسجيلات الفيديو. تعدّل ميزة "الإضاءة المنخفضة جدًا" تلقائيًا مقدار الإضاءة اللازمة استنادًا إلى الضوء المتوفّر، لذا فهي محسّنة لكل بيئة.
من خلال تحديث حديث، تتيح ميزة "الإضاءة المنخفضة" لمستخدمي Instagram التقاط صور مثالية، ثم تؤدي ميزة "الوضع الليلي" الحالية إلى التقاط صور عالية الجودة في الإضاءة المنخفضة كما اعتاد المستخدمون على مدار أكثر من عام.
أهمية ميزة "تعديل السطوع في الوقت الفعلي"
في حين يهدف "وضع الليل" إلى تحسين جودة الصورة النهائية، فإنّ ميزة "تحسين الإضاءة المنخفضة" مخصّصة لتحسين سهولة الاستخدام والتفاعل في البيئات المظلمة. من العوامل المهمة الأخرى التي يجب أخذها في الاعتبار أنّه على الرغم من أنّ ميزة "التعريض المنخفض للضوء" و"الوضع الليلي" تعملان معًا بشكل جيد جدًا، يمكنك استخدام كلّ منهما بشكل مستقل، وستلاحظ في بعض حالات الاستخدام أنّ ميزة "التعريض المنخفض للضوء" مفيدة بمفردها عندما لا تكون هناك حاجة إلى صور "الوضع الليلي". في ما يلي كيفية مساهمة LLB في تحسين تجربة المستخدم:
- ضبط إطار الصورة والتقاطها بشكل أفضل: في المشاهد ذات الإضاءة الخافتة، يمكن أن تكون معاينة الكاميرا العادية سوداء تمامًا. تعمل ميزة "الإضاءة المنخفضة جدًا" على زيادة سطوع عدسة الكاميرا، ما يتيح للمستخدمين رؤية ما يتم تصويره قبل الضغط على زر الغالق. للحصول على هذه التجربة، يمكنك استخدام "الوضع الليلي" للحصول على أفضل جودة للصور في الإضاءة المنخفضة، أو يمكنك السماح لميزة LLB بتقديم نتيجة صورة "ما تراه هو ما تحصل عليه" للمستخدم.
- المسح الضوئي الموثوق: رموز الاستجابة السريعة متوفرة في كل مكان، ولكن غالبًا ما يكون مسحها ضوئيًا في مطعم مظلم أو مرآب للسيارات أمرًا محبطًا. بفضل إضاءة خلاصة الكاميرا بشكل كبير، يمكن لخوارزميات المسح الضوئي رصد رموز الاستجابة السريعة وفك تشفيرها بشكل موثوق حتى في البيئات المظلمة جدًا.
- تفاعلات محسّنة: بالنسبة إلى التطبيقات التي تتضمّن تفاعلات فيديو مباشرة (مثل مساعدي الذكاء الاصطناعي أو مكالمات الفيديو)، تزيد ميزة "الحدّ الأدنى من الإضاءة" من كمية المعلومات التي يمكن إدراكها، ما يضمن توفّر بيانات كافية لنماذج رؤية الكمبيوتر.
الفرق في Instagram
يعمل فريق الهندسة الذي يقف وراء تطبيق Instagram على Android دائمًا بجدّ لتوفير تجربة كاميرا حديثة للمستخدمين. يمكنك ملاحظة الفرق الذي تحدثه ميزة "الضوء المنخفض جدًا" في المثال أعلاه على هاتف Pixel 10 Pro.
من السهل تخيّل الفرق الذي يحدثه ذلك في تجربة المستخدم. إذا لم يتمكّن المستخدمون من رؤية ما يلتقطونه، يزداد احتمال إلغاء عملية الالتقاط.
اختيار طريقة التنفيذ
هناك طريقتان لتنفيذ ميزة "تحسين الإضاءة المنخفضة" من أجل تقديم أفضل تجربة على أكبر مجموعة من الأجهزة:
- وضع "التعرّض التلقائي" لتحسين الإضاءة المنخفضة: هذا الوضع هو وضع "التعرّض التلقائي" على مستوى الأجهزة. ويوفّر أعلى جودة وأداء لأنه يضبط مسار معالجة إشارات الصور (ISP) مباشرةً. يجب التحقّق من ذلك أولاً.
- ميزة "تحسين الإضاءة المنخفضة" من Google: إذا كان الجهاز لا يتوافق مع وضع "التعرّض التلقائي"، يمكنك استخدام هذا الحل المستند إلى البرامج الذي توفّره "خدمات Google Play". ويطبّق معالجة لاحقة على بث الكاميرا لتفتيحه. بما أنّها حلّ يعتمد على البرامج فقط، تتوفّر هذه الميزة على المزيد من الأجهزة، وبالتالي يساعدك هذا التنفيذ في الوصول إلى المزيد من الأجهزة التي تستخدم LLB.
وضع "التعرّض التلقائي" لتحسين الإضاءة المنخفضة (الأجهزة)
آلية العمل:
يتوفّر هذا الوضع على الأجهزة التي تعمل بالإصدار 15 من نظام التشغيل Android والإصدارات الأحدث، ويتطلّب أن يكون مصنّع المعدات الأصلية قد أتاح إمكانية استخدامه في طبقة تجريد الأجهزة (HAL) (يتوفّر حاليًا على هواتف Pixel 10). وهي تتكامل مباشرةً مع معالج إشارة الصور (ISP) في الكاميرا. إذا ضبطت CaptureRequest.CONTROL_AE_MODE على CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY، سيتولّى نظام الكاميرا التحكّم.
السلوك:
تحلّل طبقة HAL/ISP المشهد وتعدّل مَعلمات المستشعر والمعالجة، بما في ذلك غالبًا زيادة وقت التعريض، لتفتيح الصورة. يمكن أن يؤدي ذلك إلى الحصول على لقطات بنسبة إشارة إلى ضوضاء (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) بدون الحاجة إلى توفُّر دعم معيّن لطبقة تجريد الأجهزة (HAL). يحافظ على عدد اللقطات في الثانية للكاميرا لأنّه تأثير ما بعد المعالجة.
المفاضلة:
بما أنّها طريقة معالجة لاحقة، فإنّ الجودة تكون محدودة بالمعلومات المتوفّرة في اللقطات التي تقدّمها أداة الاستشعار. ولا يمكنها استرداد التفاصيل التي تم فقدانها بسبب الظلام الشديد على مستوى المستشعر.
من خلال توفير مسارات للأجهزة والبرامج، يقدّم "تحسين الإضاءة المنخفضة" حلاً قابلاً للتوسّع لتحسين أداء الكاميرا في الإضاءة المنخفضة على مستوى منظومة Android المتكاملة. على المطوّرين إعطاء الأولوية لوضع "التعرّض التلقائي" حيثما كان متاحًا واستخدام ميزة "تعزيز الإضاءة المنخفضة من Google" كحلّ احتياطي قوي.
تنفيذ ميزة "تحسين الإضاءة المنخفضة" في تطبيقك
لنلقِ نظرة الآن على كيفية تنفيذ كلتا ميزتَي "البحث المباشر". يمكنك تنفيذ ما يلي سواء كنت تستخدم CameraX أو Camera2 في تطبيقك. وللحصول على أفضل النتائج، ننصحك بتنفيذ الخطوتَين 1 و2.
الخطوة 1: وضع "التعرّض التلقائي" في "تحسين الإضاءة المنخفضة"
تتوفّر الميزة على أجهزة محدّدة تعمل بالإصدار 15 من نظام التشغيل Android والإصدارات الأحدث، وتعمل ميزة LLB AE Mode كوضع محدّد للتعرّض التلقائي للضوء (AE).
1. التحقّق من مدى التوفّر
في البداية، تحقَّق مما إذا كان جهاز الكاميرا يتيح استخدام "وضع الضبط التلقائي للتعرّض للضوء" في LLB.
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 لتعديل واجهة المستخدم (مثل عرض رمز القمر) أو التحويل إلى Flow باستخدام دالة الإضافة asFlow().
if (isLlbSupported) {
camera?.cameraInfo.lowLightBoostState.asFlow().collectLatest { state ->
// Update UI accordingly
updateMoonIcon(state == LowLightBoostState.ACTIVE)
}
}
يمكنك الاطّلاع على الدليل الكامل حول وضع "التعرّض التلقائي" في ميزة "تحسين الإضاءة المنخفضة" هنا.
الخطوة 2: ميزة "تحسين الإضاءة المنخفضة" من Google
بالنسبة إلى الأجهزة التي لا تتوافق مع وضع AE للأجهزة، تعمل ميزة "تحسين الإضاءة المنخفضة" من 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- إنشاء جلسة LLB
تعالج ميزة "السطوع المنخفض جدًا" كل إطار، لذا عليك منح Surface الخاص بالشاشة إلى LowLightBoostSession، وستعيد إليك Surface تم تطبيق ميزة "السطوع المنخفض جدًا" عليه. بالنسبة إلى تطبيقات Camera2، يمكنك إضافة Surface الناتج باستخدام 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- تمرير البيانات الوصفية
لكي تعمل الخوارزمية، يجب أن تحلّل حالة التعريض التلقائي للكاميرا. يجب إعادة نتائج الالتقاط إلى جلسة LLB. في 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. يتم تنفيذ كلّ من وضع LLB AE وGoogle LLB، ما يمنحك مرجعًا لعملية الدمج الخاصة بك.
متابعة القراءة
-
أخبار المنتجات
أصبح الإصدار 4 من استوديو Android Panda ثابتًا وجاهزًا للاستخدام في الإنتاج. يتضمّن هذا الإصدار "وضع التخطيط" و"توقّع التعديل التالي" والمزيد، ما يسهّل إنشاء تطبيقات Android عالية الجودة أكثر من أي وقت مضى.
Matt Dyor • مدة القراءة: 5 دقائق
-
أخبار المنتجات
إذا كنت من مطوّري تطبيقات Android وتتطلّع إلى دمج ميزات مبتكرة تستند إلى الذكاء الاصطناعي في تطبيقك، أطلقنا مؤخرًا تحديثات جديدة وفعّالة.
Thomas Ezan • قراءة لمدة 3 دقائق
-
أخبار المنتجات
وصل الإصدار التجريبي 4 من نظام التشغيل Android 17، وهو آخر إصدار تجريبي مُجدوَل من دورة الإصدار هذه، ويمثّل إنجازًا مهمًا لتحقيق توافق التطبيقات وثبات النظام الأساسي.
Daniel Galpin • مدة القراءة: 4 دقائق
البقاء على اطّلاع على آخر التحديثات
يمكنك تلقّي أحدث الإحصاءات حول تطوير تطبيقات Android في بريدك الوارد أسبوعيًا.