كاميرا ITS

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

تقع الخدمة في تسجِير اختبار 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 في مسار التشغيل الخاص بقشرة أو وحدة تحكّم الطرفية التي تعمل على الحاسب المضيف. بالنسبة إلى الإصدار الذي تم طرحه للجميع من أدوات Android SDK Platform، يمكنك الاطّلاع على ملاحظات إصدار أدوات النظام الأساسي لحزمة تطوير البرامج (SDK).

Python

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

موبلي

بالنسبة إلى الإصدار 12 من Android والإصدارات الأحدث، يجب تثبيت إطار عمل اختبار Mobly. يتيح لك تطبيق Mobly إعداد جهاز DUT وجهاز لوحي لعرض الرسوم البيانية في فئة its_base_test. لتثبيت إطار عمل اختبار Mobly، شغِّل:

pip install mobly

إعداد البيئة

لإعداد بيئة الاختبار، يمكنك تنفيذ ما يلي:

cd CameraITS
source build/envsetup.sh

يتحقّق هذا الأمر من تثبيت Python، ويضبط متغيّر البيئة PYTHONPATH ، ويُجري اختبارات الوحدة على وحدات utils/*.py. إذا لم تتم طباعة أي أخطاء على الوحدة الطرفية، تكون البيئة جاهزة لإجراء اختبارات تقنية المعلومات.

إعداد مجموعة الأجهزة الذكية

لإعداد المشاهد، ننصحك باستخدام إعداد Camera ITS-in-a-box لأجل تسهيل التشغيل الآلي والموثوقية والكفاءة في الاختبار. توفّر منصات اختبار ITS-in-a-box جميع متطلبات الإضاءة والتوسيط وتغيير الرسم البياني لنظام ITS. يجب أيضًا استخدام حزمة ITS-in-a-box لاختبار إضافات الكاميرا.

لإجراء الاختبار اليدوي، تأكَّد مما يلي:

  • تم تثبيت جهاز DUT على حامل ثلاثي القوائم
  • يتم توجيه شاشة الاختبار إلى المشهد الصحيح لكل اختبار. (يقدّم نص اختبار ITS prompts لتغيير إعداد المشهد قبل بدء الاختبارات في مشهد جديد).
  • يتم توصيل جهاز 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.

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

بعد إعداد الجهاز والجهاز المضيف (بما في ذلك البيئة) والمشهد المادي، يمكنك إجراء اختبارات تقنية المعلومات باستخدام العملية التالية.

  1. افتح تطبيق CTS Verifer. في قائمة الاختبارات، اختَر اختبار ITS للكاميرا.

  2. من الجهاز المضيف، يمكنك إجراء اختبارات تكنولوجيا المعلومات من دليل 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 لكل اختبار تقنية معلومات. تشير القيمة FAIL* إلى أنّه تعذّر اجتياز الاختبار، ولكن بما أنّ الاختبار غير إلزامي بعد، سيتم إبلاغ فريق CtsVerifier عن الاختبار على أنّه PASS. يشير الرمز 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 نموذج تشويش في البيانات الوصفية لنتيجة الالتقاط لكل لقطة أولية. يجب تضمين نموذج الضوضاء هذا في HAL للكاميرا لكل كاميرا (على سبيل المثال، الكاميرات الأمامية والخلفية) على الجهاز الذي يُزعَم أنّه متوافق.

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

لتنفيذ نموذج تشويش، يمكنك اتباع الخطوات التالية لإنشاء نموذج تشويش وتضمين النموذج في طبقة تجريد الأجهزة (HAL) للكاميرا.

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

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

التحقّق من صحة نموذج التشويش

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