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

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

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

الإعداد

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

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

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

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

  1. وصِّل الجهاز قيد الاختبار بجهاز مضيف عبر USB.
  2. امنح الجهاز المضيف أذونات للوصول إلى الجهاز قيد الاختبار عبر ADB.
  3. ثبِّت تطبيق 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
  4. على الجهاز قيد الاختبار، شغِّل تطبيق الكاميرا التلقائي وأغلِق جميع النوافذ التي تظهر عند التشغيل لتجنُّب حدوث تداخل أثناء الاختبار.

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

يتطلّب 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. تكون معظم الهواتف في الوضع الأفقي مع تدوير الهاتف عكس اتجاه عقارب الساعة للكاميرا الخلفية وتدويره في اتجاه عقارب الساعة للكاميرا الأمامية.

ملفات الإعداد

باستخدام إطار عمل 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](/docs/compatibility/cts/camera-its-box-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.

اختبار أجهزة قيد الاختبار المتوازية

تتيح الأجهزة التي تعمل بنظام التشغيل 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* على فئة اختبار فقط، وليس على المشهد بأكمله. على سبيل المثال، يمكن اعتبار Scene_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، ما يؤدي إلى منتج مستقر وعالي الجودة.