كاميرا ITS

"مجموعة اختبارات صور الكاميرا" (ITS) هي إطار عمل لإجراء اختبارات على الصور التي تُنتجها كاميرا Android. الهدف العام من كل اختبار في ITS هو ضبط الكاميرا بطريقة معيّنة، والتقاط لقطة واحدة أو أكثر، وexaminedفحص اللقطات لمعرفة ما إذا كانت تحتوي على بيانات الصورة المتوقّعة. تتطلّب العديد من الاختبارات توجيه الكاميرا نحو رسم بياني مستهدَف محدّد أو استخدام كثافة ضوء معيّنة.

يمكن العثور على ITS في حزمة اختبار أداة التحقّق من التوافق (CTS Verifier) في cts/apps/CameraITS. يجب أن تجتاز الأجهزة اختبارات ITS الخاصة بالميزات المتوافقة التي يعلن عنها إطار عمل الكاميرا للتطبيقات التابعة لجهات خارجية كمجموعة فرعية من مجموعة أدوات اختبار التوافق (CTS).

ضبط إعدادات الجهاز

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

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

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

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

  1. وصِّل جهاز DUT بجهاز مضيف عبر USB.
  2. امنح المضيف أذونات للوصول إلى جهاز DUT عبر 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

إعداد المضيف

تتطلّب أداة ITS توصيل الجهاز المضيف بجهاز DUT عبر USB، ويجب أن يكون بإمكانه استخدام ADB للتحكّم في الجهاز والتواصل معه، ويجب أن يكون البرنامج المطلوب مثبَّتًا عليه.

لإعداد الجهاز المضيف، تأكَّد من تثبيت البرامج التالية.

أدوات نظام التشغيل لحزمة تطوير البرامج (SDK) لنظام التشغيل Android

يجب تثبيت أدوات حزمة تطوير البرامج (SDK) لنظام التشغيل Android ويجب أن يكون برنامج ADB في مسار التشغيل الخاص بقشرة أو وحدة تحكّم الطرفية التي تعمل على الحاسب المضيف. للاطّلاع على الإصدار العلني من أدوات حزمة تطوير البرامج (SDK) لمنصة Android، اطّلِع على ملاحظات الإصدار الخاصة بأدوات حزمة تطوير البرامج (SDK) لمنصة Android.

Python

يجب تثبيت Python على الجهاز المضيف. ننصحك باستخدام حِزمة ملف تعريفٍ مُجمَّع للغة Python لضمان توافق الإصدارات. لمعرفة تفاصيل حول إصدارات Python والحِزم التي يجب تثبيتها لإصدار معيّن، يُرجى الاطّلاع على ملاحظات إصدار Camera ITS للإصدار المقابل.

Mobly

بالنسبة إلى الإصدار 12 من Android والإصدارات الأحدث، يجب تثبيت إطار عمل اختبار Mobly. يتيح لك تطبيق Mobly إعداد جهاز DUT وجهاز لوحي لعرض الرسوم البيانية في فئة 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 لاختبار إضافات الكاميرا.

بالنسبة إلى الاختبار اليدوي، تأكَّد مما يلي:

  • تم تثبيت جهاز DUT على حامل ثلاثي القوائم
  • يتم توجيه شاشة الاختبار إلى المشهد الصحيح لكل اختبار. (يقدّم نص اختبار ITS طلبات لتغيير إعداد المشهد قبل بدء الاختبارات في مَشهد جديد).
  • يتم توصيل جهاز DUT بالجهاز المضيف عبر USB.
  • لا يتم تحريك DUT أثناء إجراء الاختبار.
  • يتم إضاءة المشهد بمصدر ضوء ثابت غير متذبذب. (لا تستخدم مصباحًا فلوريًا لأنّه يسبب وميضًا).

يعرض نص اختبار 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=1 scenes=2,1,0

ملف sensor_fusion scene config.yml

في ما يلي مثال على ملف 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

ملف 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

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

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

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

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

  1. افتح تطبيق CTS Verifer. في قائمة الاختبارات، اختَر Camera ITS Test (اختبار 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. للإقرار بأنّ الاختبارات قد استوفت متطلبات الاختبار، انقر على زر علامة الاختيار الخضراء. يصبح إدخال اختبار ITS للكاميرا في قائمة اختبارات أداة التحقّق من توافق الأجهزة مع معيار CTS باللون الأخضر، ما يشير إلى اجتياز الهاتف لاختبار ITS للكاميرا.

اختبار DUT الموازٍ

تتيح الأجهزة التي تعمل بالإصدار 14 من نظام التشغيل Android أو إصدار أحدث إجراء اختبار DUT موازٍ. يتيح لك ذلك اختبار وحدات DUT بشكل موازٍ مع عدة أجهزة اختبار لتسريع عملية الاختبار بشكل عام. على سبيل المثال، يتيح لك الاختبار المتوازي اختبار الكاميرا 0 في منصة واحدة والكاميرا 1 في منصة أخرى في الوقت نفسه. يتم تجميع جميع اختبارات جلسات الاختبار المُوازي في جلسة أداة التحقّق من CTS على جهاز DUT المرجعي. يجب إجراء اختبار موازٍ باستخدام وحدة التحكّم في الإضاءة من 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

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

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

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

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

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

  2. لتنفيذ نموذج الضوضاء للجهاز، عليك قص مقتطف رمز C الصغير ولصقه في HAL للكاميرا.

التحقّق من صحة نموذج الضوضاء

يُجري اختبار ITS المبرمَج tests/scene1_1/test_dng_noise_model.py التحقّق من صحة نموذج الضوضاء من خلال التحقّق من صحة قيم الضوضاء لمستوى تعريض اللقطة ودرجة التوسيع المقدَّمة في بيانات الكاميرا.