وفّر نظام التشغيل Android 9 واجهة برمجة تطبيقات لأجهزة الكاميرات المتعدّدة من خلال جهاز كاميرا منطقي جديد يتألف من جهازَي كاميرا أو أكثر موجهَين في الاتجاه نفسه. يتم الكشف عن جهاز الكاميرا المنطقي كجهاز CameraDevice/CaptureSession واحد لتطبيق يتيح التفاعل مع ميزات الكاميرات المتعدّدة المدمجة في HAL. يمكن للتطبيقات اختياريًا الوصول إلى أحداث البث والبيانات الوصفية وعناصر التحكّم الأساسية للكاميرا المادية والتحكّم فيها.
الشكل 1: إتاحة استخدام كاميرات متعددة
في هذا المخطّط البياني، يتم ترميز أرقام تعريف الكاميرات المختلفة حسب اللون. يمكن للتطبيق بثّ ذاكرات التخزين المؤقت الأوّلية من كل كاميرا في الوقت نفسه. من المُمكن أيضًا ضبط عناصر تحكّم منفصلة وتلقّي بيانات وصفية منفصلة من كاميرات خارجية مختلفة.
الأمثلة والمصادر
يجب الإعلان عن الأجهزة المزوّدة بعدّة كاميرات مع توضيح إمكانية استخدام كاميرات متعددة.
يمكن لعملاء الكاميرا الاستعلام عن معرّف الكاميرا للأجهزة المادية التي تتكون منها
كاميرا منطقية معيّنة من خلال الاتصال
getPhysicalCameraIds()
.
بعد ذلك، يتم استخدام أرقام التعريف التي يتم عرضها كجزء من النتيجة للتحكّم في الأجهزة المادية
بشكلٍ فردي من خلال
setPhysicalCameraId()
.
يمكن البحث عن نتائج هذه الطلبات الفردية من النتيجة الكاملة
عن طريق استدعاء
getPhysicalCameraResults()
.
قد لا تتيح طلبات الكاميرات الفردية سوى مجموعة فرعية محدودة من
المَعلمات. للحصول على قائمة بالمَعلمات المتوافقة، يمكن للمطوّرين الاتصال بالرقم
getAvailablePhysicalCameraRequestKeys()
.
لا تتوفّر إمكانية بث كاميرات الفيديو إلا لطلبات عدم إعادة المعالجة واستخدام أدوات استشعار الصور الأحادية اللون وأدوات استشعار Bayer فقط.
التنفيذ
قائمة التحقّق من الدعم
لإضافة أجهزة منطقية متعددة الكاميرات من جانب HAL:
- أضِف إمكانية استخدام
ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
لأي جهاز كاميرا منطقي يستند إلى كاميرتَين أو أكثر كاميرات حقيقية يتم عرضها أيضًا للتطبيق. - املأ الحقل الثابت لبيانات
ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS
الوصفية بقائمة أرقام تعريف الكاميرات الفعلية. - املأ البيانات الوصفية الثابتة المتعلّقة بالعمق والتي تكون مطلوبة لربط بكسل
البث المباشر للكاميرا:
ANDROID_LENS_POSE_ROTATION
،ANDROID_LENS_POSE_TRANSLATION
،ANDROID_LENS_INTRINSIC_CALIBRATION
،ANDROID_LENS_DISTORTION
،ANDROID_LENS_POSE_REFERENCE
. اضبط حقل البيانات الوصفية الساكنة
ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
على:ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_APPROXIMATE
: بالنسبة إلى أدوات الاستشعار في الوضع "الرئيسي-الرئيسي"، لا تتم مزامنة الغالق/التثبيت في الأجهزة.ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE_CALIBRATED
: بالنسبة إلى أجهزة الاستشعار في الوضع "الرئيسي/ الثانوي"، تتم مزامنة الغالق/ التعريض للأجهزة.
املأ
ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS
بقائمة بالمَعلمات المتوافقة للكاميرات الفردية. يمكن أن تكون القائمة فارغة إذا كان الجهاز المنطقي لا يتيح الطلبات الفردية.إذا كانت الطلبات الفردية متاحة، يجب معالجة علامة
physicalCameraSettings
الفردية وتطبيقها، والتي يمكن أن تصل كجزء من طلبات التسجيل، وإلحاق العلامة الفرديةphysicalCameraMetadata
بالطريقة المناسبة.بالنسبة إلى إصدارات Camera HAL للأجهزة التي تعمل بالإصدار 3.5 (تم طرحها في Android 10) أو الإصدارات الأحدث، يجب ملء ملف تعريف
ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
مفتاح النتيجة باستخدام رقم تعريف الكاميرا الفعلية النشطة الحالية التي تدعم الكاميرا المنطقية.
بالنسبة إلى الأجهزة التي تعمل بنظام التشغيل Android 9، يجب أن تتيح كاميرات تلك الأجهزة استبدال بث YUV/RAW منطقي واحد ببثَين فعليَين بالحجم نفسه (لا ينطبق ذلك على أحداث البث بتنسيق RAW) والتنسيق نفسه من كاميرتَين فعليتَين. ولا ينطبق ذلك على الأجهزة التي تعمل بنظام التشغيل Android 10.
بالنسبة إلى الأجهزة التي تعمل بنظام التشغيل Android 10 ويكون فيها
إصدار جهاز HAL للكاميرا هو
3.5
أو إصدار أحدث، يجب أن يكون جهاز الكاميرا متوافقًا مع isStreamCombinationSupported
لكي تتمكّن التطبيقات من الاستعلام عمّا إذا كانت مجموعة بث معيّنة تتضمّن
عمليات بث ماديًا متوافقة.
خريطة إعدادات البث
بالنسبة إلى الكاميرا المنطقية، تكون مجموعات البث الإلزامية لجهاز الكاميرا من
مستوى أجهزة معيّن مماثلة لما هو مطلوب في
CameraDevice.createCaptureSession
.
يجب أن تكون جميع مصادر البيانات في خريطة إعدادات مصدر البيانات مصادر بيانات منطقية.
بالنسبة إلى جهاز الكاميرا المنطقي الذي يتيح استخدام تنسيق RAW مع كاميرات فرعية مادية بأحجام مختلفة، إذا أعدّ تطبيق بثًا منطقيًا بتنسيق RAW، يجب ألا يبدّل جهاز الكاميرا المنطقي إلى كاميرات فرعية مادية بأحجام مختلفة لأجهزة الاستشعار. ويضمن ذلك عدم تعطُّل تطبيقات الالتقاط الحالية بتنسيق RAW.
للاستفادة من ميزة التكبير/التصغير البصري التي توفّرها HAL من خلال التبديل بين الكاميرات الفرعية المادية أثناء التقاط الصور بتنسيق RAW، يجب أن تهدف التطبيقات إلى ضبط عمليات بث الكاميرات الفرعية المادية بدلاً من بث RAW المنطقي.
مجموعة البث المضمونة
يجب أن تضمن كلّ من الكاميرا المنطقية والكاميرات المادية الأساسية مجموعات البث الإلزامية المطلوبة لمستويات الأجهزة.
يجب أن يعمل جهاز الكاميرا المنطقي بالطريقة نفسها التي يعمل بها جهاز كاميرا مادي استنادًا إلى مستوى الأجهزة وإمكاناتها. يُنصح بأن تكون مجموعة ميزاته أكبر من مجموعة ميزات الكاميرات الفردية.
على الأجهزة التي تعمل بنظام التشغيل Android 9، يجب أن توفّر الكاميرا المنطقية كلّ ما يلي لكلّ مجموعة من عمليات البث المضمونة:
استبدال بث منطقي واحد بتنسيق YUV_420_888 أو بث عادي ببثَّين ماديَّين بالحجم والتنسيق نفسهما، وكلّ منهما من كاميرا مادية منفصلة، شرط أن يكون الحجم والتنسيق متوافقَين مع الكاميرات المادية
إضافة مصدرَين للبثّ بتنسيق RAW، أحدهما من كل كاميرا أساسية، إذا كانت الكاميرا المنطقية لا تعرض إمكانية استخدام تنسيق RAW، ولكن الكاميرات الأساسية تفعل ذلك. يحدث ذلك عادةً عندما تكون أحجام أدوات الاستشعار في الكاميرات الأساسية مختلفة.
استخدام مصادر بيانات فعلية بدلاً من مصدر بيانات منطقي بالحجم وال التنسيق نفسهما يجب ألا يؤدي ذلك إلى إبطاء عدد اللقطات في الثانية لالتقاط المحتوى عندما يكون الحد الأدنى لمدة اللقطة في البثّين المادي والمنطقي متطابقًا.
اعتبارات الأداء واستهلاك الطاقة
الأداء:
- قد يؤدي ضبط مصادر البث المادي وبثها إلى إبطاء معدل التقاط الكاميرا المنطقية بسبب قيود الموارد.
- قد يؤدي تطبيق إعدادات الكاميرا المادية إلى إبطاء معدل الالتقاط إذا تم ضبط الكاميرات الأساسية على عدد لقطات مختلف في الثانية.
الطاقة:
- يستمر تحسين الطاقة في HAL بالعمل في الحالة التلقائية.
- قد يؤدي ضبط مصادر البيانات المادية أو طلبها إلى إلغاء ميزة تحسين استهلاك الطاقة الداخلية في HAL وزيادة استهلاك الطاقة.
التخصيص
يمكنك تخصيص عملية تنفيذ الجهاز بالطرق التالية:
- يعتمد الإخراج المجمّع لجهاز الكاميرا المنطقي بالكامل على تنفيذ HAL. إنّ قرار كيفية الحصول على أحداث الفيديو المجمّعة من الكاميرات الفعلية يكون واضحًا للتطبيق وإطار عمل كاميرا Android.
- يمكن أن تكون الطلبات والنتائج المادية الفردية متاحة اختياريًا. تعتمد مجموعة المَعلمات المتاحة في هذه الطلبات أيضًا بالكامل على طريقة تنفيذ HAL المحدّدة.
- اعتبارًا من Android 10، يمكن أن يحدّ HAL من عدد
الكاميرات التي يمكن للتطبيق فتحها مباشرةً من خلال اختيار عدم
نشر بعض PHYSICAL_IDs أو كلها في
getCameraIdList
. بعد ذلك، يجب أن يؤدي الاتصال بـgetPhysicalCameraCharacteristics
إلى عرض خصائص الكاميرا الفعلية.
التحقُّق
يجب أن تجتاز الأجهزة المنطقية المزوّدة بعدة كاميرات اختبار CTS الخاص بالكاميرا مثل أي كاميرا عادية أخرى.
يمكن العثور على حالات الاختبار التي تستهدف هذا النوع من الأجهزة في ملف برمجي
LogicalCameraDeviceTest
.
تستهدف اختبارات ITS الثلاثة هذه أنظمة الكاميرات المتعدّدة لتسهيل دمج الصور بشكلٍ سليم:
scene1/test_multi_camera_match.py
scene4/test_multi_camera_alignment.py
sensor_fusion/test_multi_camera_frame_sync.py
يتم إجراء اختبارَي المشهد 1 والمشهد 4 باستخدام تجهيزات اختبار
ITS-in-a-box. يؤكد اختبار test_multi_camera_match
أنّ سطوع
وسط الصور يتطابق عندما تكون كلتا الكاميراَين مفعّلتَين. يؤكد اختبار
test_multi_camera_alignment
أنّه تم تحميل مَعلمات المسافات بين الكاميرات واتجاهاتها
والتشوه بشكلٍ صحيح. إذا كان نظام الكاميرات المتعدّدة
يتضمّن كاميرا ذات مجال رؤية واسع (>90 درجة)، يجب استخدام الإصدار 2 من مربّع ITS.
Sensor_fusion
هو جهاز اختبار ثانٍ يتيح تكرار حركات الهاتف المُحدَّدة ويؤكد تطابق الطوابع الزمنية لجهاز الاستشعار الدوراني وجهاز استشعار الصور، فضلاً عن تزامن frmes من الكاميرات المتعددة.
تتوفّر جميع العلب من خلال شركة AcuSpec, Inc. (www.acuspecinc.com، fred@acuspecinc.com) وشركة MYWAY Manufacturing (www.myway.tw، sales@myway.tw). بالإضافة إلى ذلك، يمكن شراء علبة ITS من الإصدار 1 من خلال West-Mark (www.west-mark.com، dgoodman@west-mark.com).
أفضل الممارسات
للاستفادة بشكل كامل من الميزات التي تتيحها ميزة "الكاميرات المتعدّدة" مع الحفاظ على توافق التطبيق، اتّبِع أفضل الممارسات التالية عند تنفيذ جهاز منطقي "للكاميرات المتعدّدة":
- (Android 10 أو إصدار أحدث) إخفاء الكاميرات الفرعية الفعلية من
getCameraIdList
ويؤدي ذلك إلى تقليل عدد الكاميرات التي يمكن للتطبيقات فتحها مباشرةً، ما يغني التطبيقات عن استخدام منطق معقد لاختيار الكاميرا. - (الإصدار 11 من نظام التشغيل Android أو الإصدارات الأحدث) بالنسبة إلى جهاز كاميرا متعدّدة منطقي
يدعم التكبير/التصغير البصري، يمكنك استخدام واجهة برمجة التطبيقات
ANDROID_CONTROL_ZOOM_RATIO
واستخدامANDROID_SCALER_CROP_REGION
لاقتصاص الصور حسب نسبة العرض إلى الارتفاع فقط.ANDROID_CONTROL_ZOOM_RATIO
يتيح هذا الزر للجهاز تصغير الصورة والحفاظ على دقة أفضل. في هذه الحالة، يجب أن يعدّل HAL نظام الإحداثيات فيANDROID_SCALER_CROP_REGION
،ANDROID_CONTROL_AE_REGIONS
،ANDROID_CONTROL_AWB_REGIONS
،ANDROID_CONTROL_AF_REGIONS
،ANDROID_STATISTICS_FACE_RECTANGLES
، وANDROID_STATISTICS_FACE_LANDMARKS
لمعالجة مجال الرؤية بعد التكبير كصفيف نشط لجهاز الاستشعار. لمزيد من المعلومات حول كيفية استخدامANDROID_SCALER_CROP_REGION
معANDROID_CONTROL_ZOOM_RATIO
، يُرجى الاطّلاع علىcamera3_crop_reprocess#cropping
. - بالنسبة إلى الأجهزة المزوّدة بعدة كاميرات خارجية ذات قدرات مختلفة، تأكَّد من أنّ الجهاز يعلن عن توافقه مع قيمة أو نطاق معيّنَين عنصر تحكّم فقط إذا كان نطاق التكبير/التصغير بأكمله متوافقًا مع القيمة أو النطاق. على سبيل المثال، إذا كانت الكاميرا المنطقية تتألف من كاميرا فائقة العرض
وكاميرا بزاوية عريضة وكاميرا مقرِّبة، عليك اتّباع الخطوات التالية:
- إذا كانت أحجام المصفوفات النشطة للكاميرات الفعلية مختلفة، يجب أن يُجري واجهة HAL للكاميرا عملية الربط من المصفوفات النشطة للكاميرات الفعلية إلى المصفوفة النشطة للكاميرا المنطقية لكل من
ANDROID_SCALER_CROP_REGION
،ANDROID_CONTROL_AE_REGIONS
،ANDROID_CONTROL_AWB_REGIONS
،ANDROID_CONTROL_AF_REGIONS
،ANDROID_STATISTICS_FACE_RECTANGLES
، وANDROID_STATISTICS_FACE_LANDMARKS
كي يكون نظام الإحداثيات من منظور التطبيق هو حجم المصفوفة النشطة للكاميرا المنطقية. - إذا كانت الكاميرا ذات الزاوية الواسعة والكاميرا المقرِّبة تتيحان ميزة التركيز التلقائي، ولكن الكاميرا الفائقة العرض تتضمّن تركيزًا ثابتًا، تأكَّد من أنّ الكاميرا المنطقية تعرض ميزة التركيز التلقائي. يجب أن يحاكي HAL آلة حالة التركيز التلقائي للكاميرا ذات الزاوية الواسعة جدًا، بحيث لا يلاحظ التطبيق أنّ الكاميرا الأساسية ذات تركيز ثابت عندما يكبِّر التطبيق الصورة باستخدام العدسة ذات الزاوية الواسعة جدًا، وتعمل آلات حالة التركيز التلقائي لأوضاع التركيز التلقائي المتوافقة على النحو المُتوقَّع.
- إذا كانت الكاميرا ذات الزاوية الواسعة والكاميرا ذات الزاوية المقرّبة تتيحان تسجيل الفيديوهات بدقة 4K بمعدّل 60 لقطة في الثانية، وكانت
الكاميرا ذات الزاوية الفائقة تتيح تسجيل الفيديوهات بدقة 4K بمعدّل 30 لقطة في الثانية أو 1080p بمعدّل 60 لقطة في الثانية، ولكن
لا تتيح تسجيل الفيديوهات بدقة 4K بمعدّل 60 لقطة في الثانية، تأكَّد من أنّ الكاميرا المنطقية لا تعرض دقة 4K
بمعدّل 60 لقطة في الثانية في إعدادات البث المتوافقة. يضمن ذلك
سلامة إمكانات الكاميرا المنطقية، ما يضمن عدم مواجهة التطبيق
لمشكلة عدم تحقيق دقة 4K بمعدل 60 لقطة في الثانية عند قيمة
ANDROID_CONTROL_ZOOM_RATIO
أقل من 1.
- إذا كانت أحجام المصفوفات النشطة للكاميرات الفعلية مختلفة، يجب أن يُجري واجهة HAL للكاميرا عملية الربط من المصفوفات النشطة للكاميرات الفعلية إلى المصفوفة النشطة للكاميرا المنطقية لكل من
- اعتبارًا من Android 10، لن يكون من الضروري توفُّر كاميرا منطقية متعددة لتوفير مجموعات بث تتضمّن مصادر بث مادي.
إذا كان HAL يتيح الجمع مع أحداث البث المباشر:
- (Android 11 أو إصدار أحدث) للتعامل بشكل أفضل مع حالات الاستخدام مثل العمق من الاستيريو وتتبُّع الحركة، اجعل مجال الرؤية لمخرجات البث المادي أكبر ما يمكن أن يحققه الجهاز. ومع ذلك، إذا كان مصدر البثّ المادي والبثّ المنطقي هو الكاميرا المادية نفسها، قد تفرض قيود الأجهزة أن يكون مجال رؤية البثّ المادي هو نفسه مجال رؤية البثّ المنطقي.
- لحلّ مشكلة الضغط على الذاكرة الناتجة عن مصادر بيانات متعددة،
تأكَّد من أنّ التطبيقات تستخدم
discardFreeBuffers
لإلغاء تخصيص ذاكرة التخزين المؤقت المجانية (ذاكرة التخزين المؤقت التي يُطلقها المستخدِم، ولكن لم يُخرجها المنتج من "قائمة الانتظار" بعد) إذا كان من المتوقّع أن يكون مصدر البيانات في وضعٍ دوارٍ لمدة زمنية معيّنة. - إذا لم تكن عمليات البث المباشر من كاميرات خارجية مختلفة مرتبطة عادةً
بالطلب نفسه، تأكَّد من أنّ التطبيقات تستخدم
surface group
كي يتم استخدام قائمة انتظار واحدة للذاكرة المؤقتة لدعم سطحَين موجهَين للتطبيق، وبالتالي تقليل استهلاك الذاكرة.