Camera Image Test Suite (ITS) هو إطار عمل لإجراء اختبارات على الصور التي تنتجها كاميرا Android. الهدف العام من كل اختبار في ITS هو ضبط الكاميرا بطريقة معيّنة، والتقاط صورة واحدة أو أكثر، وفحص الصور لمعرفة ما إذا كانت تحتوي على بيانات الصورة المتوقّعة. تتطلّب العديد من الاختبارات توجيه الكاميرا إلى لوحة أهداف معيّنة أو إضاءتها بكثافة معيّنة.
يقع ITS في أداة اختبار CTS Verifier ضمن
cts/apps/CameraITS.
يجب أن تجتاز الأجهزة اختبارات ITS التي تتوافق مع الميزات المتوافقة التي يعلن عنها إطار عمل الكاميرا للتطبيقات التابعة لجهات خارجية كجزء من CTS.
الإعداد
لإجراء اختبارات ITS، يجب إعداد ما يلي:
- جهاز قيد الاختبار (DUT)
- جهاز مضيف (مثل كمبيوتر مكتبي أو كمبيوتر محمول يعمل بنظام التشغيل Linux)
- مشهد تصوّره الكاميرا
إعداد جهاز قيد الاختبار (DUT)
لإعداد جهاز قيد الاختبار، اتّبِع الخطوات التالية:
- وصِّل جهاز قيد الاختبار بجهاز مضيف عبر USB.
- اضبط خيارات المطوّرين على جهاز قيد الاختبار:
- فعِّل البقاء في الوضع النشط وتصحيح أخطاء الجهاز عبر USB.
- أوقِف التحديثات التلقائية للنظام والتحقّق من التطبيقات عبر USB.
- امنح الجهاز المضيف أذونات الوصول إلى جهاز قيد الاختبار عبر ADB.
ثبِّت تطبيق CTS Verifier (
CtsVerifier.apk) على الجهاز. لمزيد من المعلومات، اطّلِع على مقالة استخدام CTS Verifier.extract root/out/host/linux-x86/cts-verfier/android-cts-verifier.zipcd android-cts-verifieradb install -r -g CtsVerifier.apkعلى جهاز قيد الاختبار، شغِّل تطبيق الكاميرا التلقائي وأغلِق جميع النوافذ التي تظهر عند التشغيل لتجنُّب حدوث تداخل أثناء الاختبار.
إعداد الجهاز المضيف
يتطلّب ITS أن يكون الجهاز المضيف متصلاً بجهاز قيد الاختبار عبر USB، وأن يكون قادرًا على استخدام ADB للتحكّم في الجهاز والتواصل معه، وأن يكون مثبَّتًا عليه البرنامج المطلوب.
لإعداد جهازك المضيف، تأكَّد من تثبيت البرنامج التالي.
أدوات منصة Android SDK
يجب تثبيت أدوات منصة Android SDK ويجب أن يكون ADB في مسار الملفات القابلة للتنفيذ للواجهة أو المحطة الطرفية التي يتم تشغيلها على الجهاز المضيف. للاطّلاع على الإصدار العلني من أدوات منصة Android SDK، راجِع ملاحظات إصدار أدوات منصة SDK.
Python
يجب تثبيت Python على الجهاز المضيف. ننصحك باستخدام توزيعة Python مجمّعة لضمان التوافق مع الإصدارات المتوافقة. للحصول على تفاصيل حول إصدارات Python والحِزم التي يجب تثبيتها لإصدار معيّن، اطّلِع على ملاحظات إصدار Camera ITS للإصدار المقابل.
Mobly
بالنسبة إلى Android 12 والإصدارات الأحدث، ثبِّت إطار عمل اختبار Mobly. يتيح لك Mobly إعداد جهاز قيد الاختبار وجهاز لوحي لعرض الرسم البياني في فئة its_base_test. لتثبيت إطار عمل اختبار Mobly، شغِّل ما يلي:
pip install moblyإعداد البيئة
لإعداد بيئة الاختبار، شغِّل ما يلي:
cd CameraITSsource build/envsetup.sh
يتحقّق هذا الأمر من تثبيت Python، ويضبط متغيّر بيئة PYTHONPATH، ويُجري اختبارات الوحدات على وحدات utils/*.py. إذا لم تظهر أي أخطاء في المحطة الطرفية، تكون البيئة جاهزة لإجراء اختبارات ITS.
إعداد المشهد
لإعداد المشاهد، ننصحك باستخدام إعداد Camera ITS-in-a-box لتسهيل التشغيل الآلي والموثوقية والكفاءة في الاختبار. تتوافق منصات اختبار ITS-in-a-box مع جميع متطلبات الإضاءة والتوسيط وتغيير الرسم البياني في ITS. بالإضافة إلى ذلك، يجب استخدام ITS-in-a-box لاختبار إضافات الكاميرا
لإجراء الاختبار اليدوي، تأكَّد مما يلي:
- وضع جهاز قيد الاختبار على حامل ثلاثي القوائم
- توجيه جهاز قيد الاختبار إلى المشهد الصحيح لكل اختبار. (يقدّم نص اختبار ITS طلبات لتغيير إعداد المشهد قبل بدء الاختبارات في مشهد جديد.)
- توصيل جهاز قيد الاختبار بالجهاز المضيف عبر USB.
- عدم تحريك جهاز قيد الاختبار أثناء إجراء الاختبار
- إضاءة المشهد بمصدر ضوء ثابت وغير متذبذب. (لا تستخدِم مصباحًا فلورسنت لأنّه يؤدي إلى ظهور وميض.)
يعرض نص اختبار ITS طلبًا يطلب من المستخدم تغيير إعداد المشهد قبل بدء الاختبارات في مشهد جديد.
يجب ضبط اتجاه الهاتف بحيث تلتقط الكاميرا الصور بدون تدوير. أسهل طريقة للتحقّق من ذلك هي استخدام مشاهد الوجه في المشهد 2. تكون معظم الهواتف في الوضع الأفقي مع تدوير الهاتف عكس اتجاه عقارب الساعة للكاميرا الخلفية وفي اتجاه عقارب الساعة للكاميرا الأمامية.
للتحقّق من محاذاة جهاز قيد الاختبار والرسم البياني، شغِّل tools/check_alignment.py لعرض إحداثيات x وy لمركز الرسم البياني مقارنةً بمركز الصورة، وأضِف تعليقات توضيحية إلى صورة تم التقاطها باستخدام المركزَين لتحقيق المحاذاة المثالية.
ملفات الإعداد
باستخدام إطار عمل Mobly، عليك إنشاء ملف إعداد config.yml لتحديد منصة اختبار Mobly. في ما يلي أمثلة على حالات الاستخدام المختلفة.
ملف config.yml للمشاهد المستندة إلى الأجهزة اللوحية
في ما يلي مثال على ملف config.yml للمشاهد المستندة إلى الأجهزة اللوحية. لإجراء الاختبار المستند إلى الأجهزة اللوحية، يجب أن تتضمّن منصة الاختبار الكلمة الرئيسية TABLET. أثناء عملية الإعداد، يُعدّ برنامج تشغيل اختبار Mobly المَعلمات في الملف ويُمرِّرها إلى الاختبارات الفردية.
TestBeds:
- Name: TEST_BED_TABLET_SCENES
# Test configuration for scenes[0:4, 6, _change]
Controllers:
AndroidDevice:
- serial: 8A9X0NS5Z
label: dut
- serial: 5B16001229
label: tablet
TestParams:
brightness: 192
chart_distance: 22.0
debug_mode: "False" # "True" or "False"; quotes needed
lighting_cntl: <controller-type> # "arduino" or "None"; quotes needed
lighting_ch: <controller-channel>
camera: 0
foldable_device: "False". # set "True" if testing foldable
scene: <scene-name> # if <scene-name> runs all scenes
لاستدعاء منصة الاختبار، شغِّل tools/run_all_tests.py. إذا لم تكن هناك قيم في سطر الأوامر تحدّد الكاميرات أو المشاهد، يتم إجراء الاختبار باستخدام القيم في ملف config.yml. إذا كانت هناك قيم في سطر الأوامر للكاميرات أو المشاهد، فإنّها تحل محل القيم في قسم TestParams من ملف config.yml.
على سبيل المثال:
python tools/run_all_tests.pypython tools/run_all_tests.py camera=1python tools/run_all_tests.py scenes=2,1,0python tools/run_all_tests.py camera=0 scenes=scene_telepython tools/run_all_tests.py camera=0.4 scenes=4,scene6_tele
مَعلمة chart_scaling
في Android 17 والإصدارات الأحدث، يتم تضمين المَعلمة chart_scaling في config.yml لـ TEST_BED_TABLET_SCENES. تعالج هذه المَعلمة مشاكل تغيير حجم الرسم البياني لأجهزة الكاميرا المقرِّبة (تيليفوتو) التي لها مجال رؤية أوسع، ما يمنع اقتصاص المشهد ويفرض التركيز المناسب للجهاز أثناء الاختبار.
القيم المسموح بها لـ chart_scaling هي 1 أو 0.33 أو 0.5 أو 0.67، مع ضبط None كقيمة تلقائية. يتيح هذا النهج للأجهزة استخدام عامل تغيير حجم مثالي مصمّم خصيصًا لتلبية متطلباتها المحدّدة، ما يحافظ على الاختبار الوظيفي على جميع الأجهزة.
إذا تم ضبط chart_scaling على None، تحدّد الاختبارات تلقائيًا عامل تغيير الحجم باستخدام chart_scaling_logic. بخلاف ذلك، يتم استخدام القيمة المحدّدة في config.yml، أو يتم وضع علامة على خطأ إذا كان تغيير الحجم غير متاح.
في ما يلي نموذج config.yml يتضمّن المَعلمة chart_scaling
TestBeds:
- Name: TEST_BED_TABLET_SCENES # Need 'tablet' in name for tablet scenes
# Use TEST_BED_MANUAL for manual testing and remove below lines:
# - serial <tablet_id>
# label: tablet
# Test configuration for scenes[0:4, 6]
Controllers:
AndroidDevice:
- serial: <device-id> # quotes needed if serial id entirely numeric
label: dut
- serial: <tablet-id> # quotes needed if serial id entirely numeric
label: tablet
TestParams:
brightness: 192
chart_distance: 22.0
debug_mode: "False" # quotes needed
lighting_cntl: <controller-type> # can be arduino or "None"
lighting_ch: <controller-channel>
camera: <camera-id>
scene: <scene-name> # if <scene-name> runs all scenes
foldable_device: "False" # "True" if testing foldable device
chart_scaling: "None" # use the values available for scene to be tested
resultstore_upload: "False" # "True" if results should be uploaded to ResultStore
يجب إجراء تعديلات على جانب الاختبار لتفعيل إمكانات تغيير حجم الرسم البياني في Camera ITS. إذا كان الاختبار الذي تستخدمه لا يتيح ذلك، أبلِغ عن خطأ.
في ما يلي نموذج لتغيير جانب الاختبار باستخدام المَعلمة chart_scaling.
# load chart for scene
its_session_utils.load_scene(
cam, props, self.scene, self.tablet, self.chart_distance,
chart_scaling=self.chart_scaling)
ملف config.yml لمشهد sensor_fusion
في ما يلي مثال على ملف config_yml لاختبارات sensor_fusion.
لإجراء اختبار sensor_fusion، يجب أن تتضمّن منصة الاختبار الكلمة الرئيسية SENSOR_FUSION. لا يتيح Android 13 والإصدارات الأحدث سوى وحدة التحكّم Arduino لدمج بيانات أجهزة الاستشعار بسبب اختبارات معاينة الفيديو وثباته.
يتيح Android 12 وحدتَي التحكّم Arduino وCanakit.
Testbeds
- Name: TEST_BED_SENSOR_FUSION
# Test configuration for sensor_fusion/test_sensor_fusion.py
Controllers:
AndroidDevice:
- serial: 8A9X0NS5Z
label: dut
TestParams:
fps: 30
img_size: 640,480
test_length: 7
debug_mode: "False"
chart_distance: 25
rotator_cntl: arduino
rotator_ch: 1
camera: 0
لإجراء اختبارات sensor_fusion باستخدام
صندوق دمج بيانات أجهزة الاستشعار، شغِّل ما يلي:
python tools/run_all_tests.py scenes=sensor_fusionpython tools/run_all_tests.py scenes=sensor_fusion camera=0python tools/run_all_tests.py scenes=scene_flash,feature_combinationpython tools/run_all_tests.py scenes=checkerboard camera=1
ملف config.yml لمنصات اختبار متعددة
في ما يلي مثال على ملف config.yml يتضمّن منصات اختبار متعددة، ومنصة اختبار للأجهزة اللوحية ومنصة اختبار sensor_fusion. يتم تحديد منصة الاختبار الصحيحة من خلال المشاهد التي تم اختبارها.
Testbeds
- Name: TEST_BED_TABLET_SCENES
# Test configuration for scenes[0:4, 6, _change]
Controllers:
AndroidDevice:
- serial: 8A9X0NS5Z
label: dut
- serial: 5B16001229
label: tablet
TestParams:
brightness: 192
chart_distance: 22.0
debug_mode: "False"
chart_loc_arg: ""
camera: 0
scene: <scene-name> # if <scene-name> runs all scenes
- Name: TEST_BED_SENSOR_FUSION
# Test configuration for sensor_fusion/test_sensor_fusion.py
Controllers:
AndroidDevice:
- serial: 8A9X0NS5Z
label: dut
TestParams:
fps: 30
img_size: 640,480
test_length: 7
debug_mode: "False"
chart_distance: 25
rotator_cntl: arduino # cntl can be arduino or canakit
rotator_ch: 1
camera: 0
ملف config.yml للاختبار اليدوي
في ما يلي مثال على ملف config.yml للاختبار اليدوي. يتيح Android 14
والإصدارات الأحدث الاختبار اليدوي لجميع الاختبارات باستثناء
scene_extensions
الاختبارات. لإجراء الاختبار اليدوي، يجب أن تتضمّن منصة الاختبار الكلمة الرئيسية MANUAL.
بالإضافة إلى ذلك، لا يمكن أن يتضمّن قسم AndroidDevice قسمًا للرقم التسلسلي أو التصنيف لجهاز لوحي.
TestBeds:
- Name: TEST_BED_MANUAL
Controllers:
AndroidDevice:
- serial: 8A9X0NS5Z
label: dut
TestParams:
debug_mode: "False"
camera: 0
scene: 1
ملف config.yml لاختبار منصة Gen2
في ما يلي مثال على ملف config.yml لمنصة اختبار TEST_BED_GEN2.
استخدِم منصة الاختبار هذه لاختبارات scene_ip التي تستخدِم منصة
Gen2.
يعرض المثال التالي مَعلمات منصة الاختبار عندما تكون منصة Gen2
متاحة و
scene_ip
لم يتم تخطّي الاختبارات.
Testbeds
- Name: TEST_BED_GEN2
# Test configuration for scene_ip/test_default_jca_ip.py
Controllers:
AndroidDevice:
- serial: <device-id> # quotes needed if serial id entirely numeric
label: dut
TestParams:
debug_mode: "False" # quotes are needed here
chart_distance: 30
rotator_cntl: gen2_rotator # gen2 rig specific. "None" if gen2 rig not available
rotator_ch: 0
camera: <camera-id>
foldable_device: "False" # "True" if testing foldable device
tablet_device: "False" # "True" if testing tablet device
lighting_cntl: gen2_lights # gen2 rig specific. "None" if gen2 rig not available
lighting_ch: 1
scene: scene_ip
يعرض المثال التالي مَعلمات منصة الاختبار عندما لا تكون منصة Gen2 متاحة وتم تخطّي اختبارات scene_ip.
Testbeds
- Name: TEST_BED_GEN2
# Test configuration for scene_ip/test_default_jca_ip.py
Controllers:
AndroidDevice:
- serial: <device-id> # quotes needed if serial id entirely numeric
label: dut
TestParams:
debug_mode: "False" # quotes are needed here
chart_distance: 30
rotator_cntl: "None" # gen2 rig specific. "None" if gen2 rig not available
rotator_ch: <controller-channel>
camera: <camera-id>
foldable_device: "False" # "True" if testing foldable device
tablet_device: "False" # "True" if testing tablet device
lighting_cntl: "None" # gen2 rig specific. "None" if gen2 rig not available
lighting_ch: <controller-channel>
scene: scene_ip
لإجراء اختبار scene_ip، استخدِم أحد الأوامر التالية:
python tests/scene_ip/test_default_jca_ip.py -c config.ymlpython tools/run_all_tests.py camera=<camera-id> scenes=scene_ip
إجراء اختبارات ITS
يصف هذا القسم كيفية إجراء اختبارات ITS.
استدعاء الاختبارات
بعد إعداد الجهاز والجهاز المضيف (بما في ذلك البيئة) والمشهد الفعلي، شغِّل اختبارات ITS باستخدام العملية التالية.
افتح تطبيق CTS Verifier. في قائمة الاختبارات، انقر على اختبار Camera ITS. في Android 17 والإصدارات الأحدث، توجد اختبارات
sensor_fusionوfeature_combinationفي نشاط إضافي باسم اختبار منصة دمج بيانات أجهزة استشعار Camera ITS.من الجهاز المضيف، شغِّل اختبارات ITS من الدليل
CameraITS/. على سبيل المثال، بالنسبة إلى جهاز مزوّد بكاميرا أمامية وخلفية، شغِّل الأمر التالي:python tools/run_all_tests.pyيتكرّر النص البرمجي خلال الكاميرات ومشاهد الاختبار استنادًا إلى ملف
config.yml. لإعدادات تصحيح الأخطاء، ننصحك بإجراء أحد مشاهدscene2باستخدام اختبار واحد لتحقيق أسرع وقت استجابة.لإجراء الاختبار اليدوي، قبل بدء إجراء مجموعة اختبارات ITS على كل مشهد، يلتقط النص البرمجي صورة للمشهد الحالي ويحفظها بتنسيق JPEG ويطبع مسار ملف JPEG على وحدة التحكّم ويطلب من المستخدم تأكيد ما إذا كانت الصورة جيدة. تتكرّر عملية التقاط الصورة والتأكيد إلى أن يؤكّد المستخدم أنّ الصورة جيدة. في ما يلي الرسائل في هذه العملية.
Preparing to run ITS on camera 0 Start running ITS on camera: 0 Press Enter after placing camera 0 to frame the test scene: scene1_1 The scene setup should be: A grey card covering at least the middle 30% of the scene Running vendor 3A on device Capture an image to check the test scene Capturing 1 frame with 1 format [yuv] Please check scene setup in /tmp/tmpwBOA7g/0/scene1_1.jpg Is the image okay for ITS scene1_1? (Y/N)تطبع كل عملية تشغيل للنص البرمجي سجلاً يعرض
PASSأوFAILأوFAIL*أوSKIPلكل اختبار ITS. تشيرFAIL*إلى أنّ الاختبار قد فشل، ولكن بما أنّه لم يتم فرضه بعد، سيتم الإبلاغ عن الاختبار على أنّهPASSفي CtsVerifier. تشيرSKIPإلى أنّ الاختبار قد اجتاز لأنّ الجهاز لم يعلن عن الإمكانية الأساسية التي يتم اختبارها. على سبيل المثال، إذا لم يعلن الجهاز من خلال واجهات الكاميرا أنّه يتيح تنسيق DNG، يتم تخطّي الاختبارات المتعلقة بالتقاط ملفات DNG ويتم احتسابها على أنّهاPASS.للتأكيد على أنّ الاختبارات قد استوفت متطلبات الاختبار، انقر على زر علامة الصح الخضراء. يصبح إدخال اختبار Camera ITS في قائمة اختبارات CTS Verifier باللون الأخضر ويشير إلى أنّ الهاتف قد اجتاز اختبار Camera ITS.
تقليل وقت الاختبار
يتيح Camera ITS عدة ميزات لتحسين وقت إجراء الاختبار الإجمالي وتقليله على مستوى الأجهزة والمشاهد.
اختبار الكاميرا الفرعية
إحدى أكثر الطرق فعاليةً لتقليل وقت اختبار الكاميرا هي عرض كاميرا منطقية واحدة للتطبيقات التابعة لجهات خارجية باستخدام واجهة برمجة التطبيقات متعددة الكاميرات. تحدّد واجهة برمجة التطبيقات متعددة الكاميرات نظام كاميرا منطقية يتألف من كاميرا أساسية، وهي عادةً الكاميرا ذات مجال الرؤية العريض، بالإضافة إلى كاميرات فرعية فعلية تعمل بمستويات تكبير/تصغير مختلفة، وهي عادةً الكاميرات فائقة العرض والمقرِّبة (تيليفوتو). تؤدي الكاميرات التي تستخدِم واجهة برمجة التطبيقات متعددة الكاميرات إلى تقليل وقت الاختبار بشكلٍ كبير مقارنةً بعرض الكاميرات بشكلٍ فردي. بينما تُجري الكاميرا المنطقية الرئيسية مجموعة الاختبارات الكاملة، تُجري الكاميرات الفرعية مجموعة فرعية مستهدَفة من مجموعة الاختبارات الإجمالية كما هو موضّح في الجدول التالي:
| المشهد | اختبارات الكاميرا الفرعية |
|---|---|
| scene0 | test_jitter وtest_solid_color_test_pattern |
| scene1_1 | test_burst_sameness_manual وtest_dng_noise_model وtest_exposure وtest_linearity |
| scene1_2 | test_raw_exposure وtest_raw_sensitivity وtest_yuv_plus_raw |
| scene2_a | test_faces وtest_num_faces |
| scene3 | test_flip_mirror |
| scene4 | test_aspect_ratio_and_crop |
| sensor_fusion | test_sensor_fusion |
اختبار أجهزة قيد الاختبار المتوازية
تتيح الأجهزة التي تعمل بنظام التشغيل Android 14 أو الإصدارات الأحدث اختبار أجهزة قيد الاختبار المتوازية. يتيح لك ذلك اختبار أجهزة قيد الاختبار بالتوازي باستخدام منصات متعددة لتسريع عملية الاختبار الإجمالية. على سبيل المثال، يتيح لك الاختبار المتوازي اختبار الكاميرا 0 في منصة واحدة والكاميرا 1 في منصة أخرى في الوقت نفسه. بالنسبة إلى Android 17 والإصدارات الأحدث، بما أنّ اختبارات Camera ITS مقسّمة إلى نشاطَين، يمكنك إجراء اختبارات sensor_fusion وfeature_combination على جهاز قيد الاختبار واحد، وإجراء اختبارات أخرى على جهاز قيد الاختبار آخر بالتوازي. يتم تجميع جميع الاختبارات لجلسات الاختبار المتوازي على جلسة CTS Verifier على جهاز قيد الاختبار المرجعي.
عليك إجراء الاختبار المتوازي باستخدام التحكّم في الإضاءة من خلال Arduino، لأنّه لا يتم إتاحة التحكّم اليدوي في الإضاءة مع الاختبار المتوازي. تأكَّد من أنّ قناة مختلفة على وحدة التحكّم نفسها في Arduino تتحكّم في الإضاءة لكل منصة.
في ما يلي نموذج لملف config.yml يحدّد ثلاث منصات اختبار لإجرائها بالتوازي.
TestBeds:
- Name: TEST_BED_TABLET_SCENES_INDEX_0
Controllers:
AndroidDevice:
- serial: <device-id-0>
label: dut
- serial: <tablet-id-0>
label: tablet
TestParams:
brightness: 192
chart_distance: 22.0
debug_mode: "False"
lighting_cntl: "arduino"
lighting_ch: <controller-channel-0>
camera: 0
scene: <scene-name> # if <scene-name> left as-is runs all scenes
foldable_device: "False"
- Name: TEST_BED_TABLET_SCENES_INDEX_1
Controllers:
AndroidDevice:
- serial: <device-id-1>
label: dut
- serial: <tablet-id-1>
label: tablet
TestParams:
brightness: 192
chart_distance: 22.0
debug_mode: "False"
lighting_cntl: "arduino"
lighting_ch: <controller-channel-1>
camera: 1
scene: <scene-name> # if <scene-name> left as-is runs all scenes
foldable_device: "False"
# TEST_BED_SENSOR_FUSION represents testbed index 2
# Parallel sensor_fusion is currently unsupported due to Arduino requirements
- Name: TEST_BED_SENSOR_FUSION
# Test configuration for sensor_fusion
Controllers:
AndroidDevice:
- serial: <device-id>
label: dut
TestParams:
fps: 30
img_size: 640,480
test_length: 7
debug_mode: "False"
chart_distance: 25
rotator_cntl: "arduino"
rotator_ch: <controller-channel-2>
camera: <camera-id>
foldable_device: "False"
tablet_device: "False"
lighting_cntl: "None"
lighting_ch: <controller-channel>
scene: "sensor_fusion"
لإجراء منصات الاختبار بالتوازي، استخدِم الأمر التالي:
for i in 0 1 2; do python3 tools/run_all_tests.py testbed_index=$i num_testbeds=3 & done; waitإرسال نتائج الاختبار المجمّعة
في Android 17 والإصدارات الأحدث، يمكنك إرسال نتائج اختبارات Camera ITS المجمّعة للموافقة على الإصدار. يتيح لك CTS Verifier إجراء اختبارات متزامنة لمشاهد متعددة على أجهزة متعددة، وتجميع نتائج الاختبارات من تقارير CTS Verifier متعددة (من عمليات إجراء اختبارات أو أجهزة مختلفة) في عملية إرسال واحدة وموحّدة.
عملية الإرسال
لإرسال نتائج Camera ITS المجمّعة للموافقة على الإصدار، اتّبِع الخطوات التالية:
- إعداد الأجهزة: اجمَع جهازَين أو ثلاثة أجهزة قيد الاختبار (DUT) لها جميعًا ملف مرجعي للإصدار نفسه تمامًا.
- تثبيت CTS Verifier: ثبِّت أحدث ملف APK لتطبيق CTS Verifier، الذي يمكن الحصول عليه من أداة استكشاف الإصدار المتوفّرة.
إجراء الاختبارات بالتوازي:
- ثبِّت أجهزة قيد الاختبار في منصات منفصلة.
- شغِّل مشاهد مختلفة من Camera ITS على كل جهاز في الوقت نفسه.
- جمع التقارير: اسحَب تقرير CTS Verifier بعد كل عملية إجراء. يشمل ذلك التقارير التي فشلت فيها المشاهد. أعِد إجراء المشاهد التي فشلت فقط في عمليات الإجراء اللاحقة.
إرسال التقارير: حمِّل تقارير CTS Verifier متعددة تم جمعها من جميع الأجهزة.
مراجعة النتائج: بعد تحميل التقارير، راجِع النتائج المجمّعة:
- يعرض قسم تحليل الاختبار قائمة كاملة بجميع المشاهد التي تم إجراؤها.
يتم إدراج المشاهد التي لم يتم إجراؤها أو التي فشلت ضمن قسم فشلت.
الشكل 1: توثيق المشاهد التي لم يتم إجراؤها أو التي فشلت
يتم إدراج المشاهد التي اجتازت ضمن قسم اجتازت مجمّعة.
الشكل 2: المشاهد المصنّفة على أنّها "اجتازت مجمّعة"
حالة الموافقة على الإصدار
تُمنح الموافقة على الإصدار بعد اكتمال جميع المشاهد المطلوبة بنجاح في التقارير المجمّعة.
نموذج الضوضاء بتنسيق DNG
يجب أن توفّر الأجهزة التي تعلن عن إمكانية التقاط صور بتنسيق RAW أو DNG نموذج ضوضاء في بيانات وصف نتائج الالتقاط لكل صورة بتنسيق RAW. يجب تضمين نموذج الضوضاء هذا في Camera HAL لكل كاميرا (مثل الكاميرا الأمامية والخلفية) على الجهاز الذي يطلب الدعم.
تنفيذ نموذج الضوضاء
لتنفيذ نموذج ضوضاء، اتّبِع الخطوات التالية لإنشاء نموذج ضوضاء وتضمينه في Camera HAL.
لإنشاء نموذج ضوضاء لكل كاميرا، شغِّل النص البرمجي
dng_noise_model.pyفي الدليلtools. يؤدي ذلك إلى عرض مقتطف رمز C. لمزيد من المعلومات حول كيفية إعداد الكاميرا وبيئة الالتقاط، اطّلِع على مستندDngNoiseModel.pdfفي الدليلtools.لتنفيذ نموذج الضوضاء للجهاز، قُص مقتطف رمز C والصقه في Camera HAL.
التحقّق من صحة نموذج الضوضاء
يتحقّق اختبار ITS الآلي tests/scene1_1/test_dng_noise_model.py
من صحة نموذج الضوضاء من خلال التأكّد من أنّ قيم الضوضاء
لتعرّض الصورة والزيادة المقدّمة في بيانات الكاميرا صحيحة.
الاختبارات التي اجتازت بشكلٍ هامشي (حالة الاختبار PASS*)
في Android 17 والإصدارات الأحدث، يشير الاجتياز الهامشي (PASS*) إلى أنّ الاختبار قد اجتاز، ولكنّ مقاييس الأداء الخاصة به قريبة جدًا من الحد الأدنى للاجتياز المحدّد مسبقًا. على الرغم من أنّ الاختبار يستوفي من الناحية الفنية معايير الاجتياز، فإنّ قربه من حد الفشل يشير إلى ضرورة إجراء فحص أدق.
مزايا الاجتياز الهامشي
توفّر حالة PASS* عدة مزايا:
نظام الإنذار المبكر: يحدّد الاختبارات التي على وشك الفشل، ما يسمح للفِرق بمعالجة المشاكل قبل أن تؤدي إلى حالات فشل صريحة.
التحسين الاستباقي: يشجّع الفِرق على تحسين الاختبارات والرمز البرمجي اللذين يحققان أداءً في الحد الأدنى من النطاق المقبول، ما يؤدي إلى تحسين الاستقرار العام.
تحسين الجودة: يساعد في الحفاظ على مستوى أعلى من الجودة من خلال وضع علامة على المناطق التي قد تكون عُرضةً لحالات تراجع مستقبلية مع إجراء تغييرات طفيفة في الرمز البرمجي.
تقليل وقت تصحيح الأخطاء: من خلال رصد اختبارات
PASS*في وقت مبكر، يمكن تقليل الوقت والجهد المطلوبَين لتصحيح أخطاء حالات الفشل الكاملة في المستقبل بشكلٍ كبير.
تفاصيل حالة PASS*
تشمل حالة PASS* ما يلي:
تحديد الحدود الدنيا: يتم تحديد حدود دنيا محددة للاجتياز الهامشي لكل اختبار ذي صلة في Camera ITS.
الرصد الآلي: يرصد نظام التشغيل الآلي للاختبارات الاختبارات ويصنّفها على أنّها
PASS*استنادًا إلى الحدود الدنيا المحدّدة.آلية التنبيه: تتلقّى الفِرق تنبيهات تلقائية لأي اختبارات تم وضع علامة عليها على أنّها
PASS*، ما يوجّهها إلى التحقيق في الاختبار المحدّد ومقاييسه.إعداد التقارير: يتم الإشارة بوضوح إلى حالات الاجتياز الهامشي في تقارير الاختبار ولوحات البيانات لتحسين نطاق ظهور العلامة التجارية على أنّها
PASS*في تقريرItsTestSummary، على غرارFail*للاختباراتnot_yet_mandated. يحافظ الاختبار على الحالة الخضراء، لأنّه يواصل الاجتياز ضمن الحدود الدنيا المحدّدة، لتجنُّب حدوث المزيد من الارتباك. تنطبق حالةPASS*على فئة اختبار فقط، وليس على المشهد بأكمله. على سبيل المثال، يمكن اعتبار المشهد 0PASSحتى إذا كانت اختبارات test_jitter وtest_metadata هيPASS*.المراقبة: يتم جمع بيانات الأداء للاختبارات التي تجتاز بشكلٍ هامشي على جهاز. يتيح ذلك رصد التحسينات المستقبلية للكاميرا التي تُجريها الشركات المصنّعة للمعدات الأصلية إذا انتقلت هذه الاختبارات إلى حالة
PASS.
في ما يلي مثال على نتائج الاختبارات التي تتضمّن PASS*:
INFO:root:Reporting camera 1 ITS results to CtsVerifier
INFO:root:ITS results to CtsVerifier: {'scene0': {'result': 'PASS', 'TEST_STATUS': [{'test': 'test_jitter', 'status': 'PASS*'}, {'test': 'test_metadata', **'status': 'PASS*'**}, {'test': 'test_request_capture_match', 'status': 'PASS'}, {'test': 'test_sensor_events', 'status': 'PASS'}, {'test': 'test_solid_color_test_pattern', 'status': 'PASS'}, {'test': 'test_test_patterns', 'status': 'SKIP'}, {'test': 'test_tonemap_curve', 'status': 'SKIP'}, {'test': 'test_unified_timestamps', 'status': 'PASS'}, {'test': 'test_vibration_restriction', 'status': 'PASS'}], 'mpc_metrics': [], 'performance_metrics': [], 'feature_query_proto': [], 'feature_query_proto_path': [], 'summary': '/tmp/CameraITS_zojk4sdr/cam_id_1/scene0/scene_test_summary.txt', 'start': 1754330630345, 'end': 1754330764534}, 'scene1_1': {'result': 'NOT_EXECUTED'}, 'scene1_2': {'result': 'NOT_EXECUTED'}, 'scene1_3': {'result': 'NOT_EXECUTED'}, 'scene2_a': {'result': 'NOT_EXECUTED'}, 'scene2_b': {'result': 'NOT_EXECUTED'}, 'scene2_c': {'result': 'NOT_EXECUTED'}, 'scene2_d': {'result': 'NOT_EXECUTED'}, 'scene2_e': {'result': 'NOT_EXECUTED'}, 'scene2_f': {'result': 'NOT_EXECUTED'}, 'scene2_g': {'result': 'NOT_EXECUTED'}, 'scene3': {'result': 'NOT_EXECUTED'}, 'scene4': {'result': 'NOT_EXECUTED'}, 'scene6': {'result': 'NOT_EXECUTED'}, 'scene7': {'result': 'NOT_EXECUTED'}, 'scene8': {'result': 'NOT_EXECUTED'}, 'scene9': {'result': 'NOT_EXECUTED'}, 'scene_extensions/scene_hdr': {'result': 'NOT_EXECUTED'}, 'scene_extensions/scene_low_light': {'result': 'NOT_EXECUTED'}, 'scene_tele/scene6_tele': {'result': 'NOT_EXECUTED'}, 'scene_tele/scene7_tele': {'result': 'NOT_EXECUTED'}, 'scene_video': {'result': 'NOT_EXECUTED'}, 'scene5': {'result': 'NOT_EXECUTED'}, 'sensor_fusion': {'result': 'NOT_EXECUTED'}, 'feature_combination': {'result': 'NOT_EXECUTED'}, 'scene_flash': {'result': 'NOT_EXECUTED'}, 'scene_ip': {'result': 'NOT_EXECUTED'}}
ننصح الشركاء بما يلي:
- مراقبة تنبيهات
PASS* - التحقيق في السبب الجذري للاختبارات
PASS* - تحسين الاختبارات والرمز البرمجي المحدّدَين على أنّهما
PASS*بشكلٍ استباقي
تهدف حالة PASS* إلى تعزيز قوة وموثوقية اختبار Camera ITS، ما يؤدي إلى منتج مستقر وعالي الجودة.