نظرة عامة على مجموعة اختبارات توافق الكاميرا (ITS)

‫Camera Image Test Suite (ITS) هو إطار عمل لإجراء اختبارات على الصور التي تنتجها كاميرا Android. الهدف العام من كل اختبار في ITS هو ضبط الكاميرا بطريقة معيّنة، والتقاط صورة واحدة أو أكثر، وفحص الصور لمعرفة ما إذا كانت تحتوي على بيانات الصورة المتوقّعة. تتطلّب العديد من الاختبارات توجيه الكاميرا إلى لوحة أهداف معيّنة أو إضاءتها بكثافة معيّنة.

يقع ITS في أداة اختبار CTS Verifier ضمن cts/apps/CameraITS. يجب أن تجتاز الأجهزة اختبارات ITS التي تتوافق مع الميزات المتوافقة التي يعلن عنها إطار عمل الكاميرا للتطبيقات التابعة لجهات خارجية كجزء من CTS.

الإعداد

لإجراء اختبارات ITS، يجب إعداد ما يلي:

  • جهاز قيد الاختبار (DUT)
  • جهاز مضيف (مثل كمبيوتر مكتبي أو كمبيوتر محمول يعمل بنظام التشغيل Linux)
  • مشهد تصوّره الكاميرا

إعداد جهاز قيد الاختبار (DUT)

لإعداد جهاز قيد الاختبار، اتّبِع الخطوات التالية:

  1. وصِّل جهاز قيد الاختبار بجهاز مضيف عبر USB.
  2. اضبط خيارات المطوّرين على جهاز قيد الاختبار:
    • فعِّل البقاء في الوضع النشط وتصحيح أخطاء الجهاز عبر USB.
    • أوقِف التحديثات التلقائية للنظام والتحقّق من التطبيقات عبر USB.
  3. امنح الجهاز المضيف أذونات الوصول إلى جهاز قيد الاختبار عبر ADB.
  4. ثبِّت تطبيق CTS Verifier ‏ (CtsVerifier.apk) على الجهاز. لمزيد من المعلومات، اطّلِع على مقالة استخدام CTS Verifier.

    extract root/out/host/linux-x86/cts-verfier/android-cts-verifier.zip
    cd android-cts-verifier
    adb install -r -g CtsVerifier.apk
  5. على جهاز قيد الاختبار، شغِّل تطبيق الكاميرا التلقائي وأغلِق جميع النوافذ التي تظهر عند التشغيل لتجنُّب حدوث تداخل أثناء الاختبار.

إعداد الجهاز المضيف

يتطلّب 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 CameraITS
source 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.py
python tools/run_all_tests.py camera=1
python tools/run_all_tests.py scenes=2,1,0
python tools/run_all_tests.py camera=0 scenes=scene_tele
python 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_fusion
python tools/run_all_tests.py scenes=sensor_fusion camera=0
python tools/run_all_tests.py scenes=scene_flash,feature_combination
python 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.yml
python tools/run_all_tests.py camera=<camera-id> scenes=scene_ip

إجراء اختبارات ITS

يصف هذا القسم كيفية إجراء اختبارات ITS.

استدعاء الاختبارات

بعد إعداد الجهاز والجهاز المضيف (بما في ذلك البيئة) والمشهد الفعلي، شغِّل اختبارات ITS باستخدام العملية التالية.

  1. افتح تطبيق CTS Verifier. في قائمة الاختبارات، انقر على اختبار Camera ITS. في Android 17 والإصدارات الأحدث، توجد اختبارات sensor_fusion وfeature_combination في نشاط إضافي باسم اختبار منصة دمج بيانات أجهزة استشعار Camera ITS.

  2. من الجهاز المضيف، شغِّل اختبارات 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.

  3. للتأكيد على أنّ الاختبارات قد استوفت متطلبات الاختبار، انقر على زر علامة الصح الخضراء. يصبح إدخال اختبار 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 المجمّعة للموافقة على الإصدار، اتّبِع الخطوات التالية:

  1. إعداد الأجهزة: اجمَع جهازَين أو ثلاثة أجهزة قيد الاختبار (DUT) لها جميعًا ملف مرجعي للإصدار نفسه تمامًا.
  2. تثبيت CTS Verifier: ثبِّت أحدث ملف APK لتطبيق CTS Verifier، الذي يمكن الحصول عليه من أداة استكشاف الإصدار المتوفّرة.
  3. إجراء الاختبارات بالتوازي:

    1. ثبِّت أجهزة قيد الاختبار في منصات منفصلة.
    2. شغِّل مشاهد مختلفة من Camera ITS على كل جهاز في الوقت نفسه.
    3. جمع التقارير: اسحَب تقرير CTS Verifier بعد كل عملية إجراء. يشمل ذلك التقارير التي فشلت فيها المشاهد. أعِد إجراء المشاهد التي فشلت فقط في عمليات الإجراء اللاحقة.
  4. إرسال التقارير: حمِّل تقارير CTS Verifier متعددة تم جمعها من جميع الأجهزة.

  5. مراجعة النتائج: بعد تحميل التقارير، راجِع النتائج المجمّعة:

    • يعرض قسم تحليل الاختبار قائمة كاملة بجميع المشاهد التي تم إجراؤها.
    • يتم إدراج المشاهد التي لم يتم إجراؤها أو التي فشلت ضمن قسم فشلت.

      result-aggregation-image-1

      الشكل 1: توثيق المشاهد التي لم يتم إجراؤها أو التي فشلت

    • يتم إدراج المشاهد التي اجتازت ضمن قسم اجتازت مجمّعة.

      result-aggregation-image-2

      الشكل 2: المشاهد المصنّفة على أنّها "اجتازت مجمّعة"

حالة الموافقة على الإصدار

تُمنح الموافقة على الإصدار بعد اكتمال جميع المشاهد المطلوبة بنجاح في التقارير المجمّعة.

نموذج الضوضاء بتنسيق DNG

يجب أن توفّر الأجهزة التي تعلن عن إمكانية التقاط صور بتنسيق RAW أو DNG نموذج ضوضاء في بيانات وصف نتائج الالتقاط لكل صورة بتنسيق RAW. يجب تضمين نموذج الضوضاء هذا في Camera HAL لكل كاميرا (مثل الكاميرا الأمامية والخلفية) على الجهاز الذي يطلب الدعم.

تنفيذ نموذج الضوضاء

لتنفيذ نموذج ضوضاء، اتّبِع الخطوات التالية لإنشاء نموذج ضوضاء وتضمينه في Camera HAL.

  1. لإنشاء نموذج ضوضاء لكل كاميرا، شغِّل النص البرمجي dng_noise_model.py في الدليل tools. يؤدي ذلك إلى عرض مقتطف رمز C. لمزيد من المعلومات حول كيفية إعداد الكاميرا وبيئة الالتقاط، اطّلِع على مستند DngNoiseModel.pdf في الدليل tools.

  2. لتنفيذ نموذج الضوضاء للجهاز، قُص مقتطف رمز 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* على فئة اختبار فقط، وليس على المشهد بأكمله. على سبيل المثال، يمكن اعتبار المشهد 0 PASS حتى إذا كانت اختبارات 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، ما يؤدي إلى منتج مستقر وعالي الجودة.