كاميرا ITS

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

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

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

لإجراء اختبارات تقنية المعلومات، يجب إعداد ما يلي:

  • الجهاز الذي يتم اختباره (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 للإصدار المقابل.

Mobly

بالنسبة إلى الإصدار 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. كما يلزم أيضًا توفير تكنولوجيا المعلومات في العلبة إضافات الكاميرا اختبار الفرضية.

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

  • تم تثبيت جهاز 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

ملف Sense_fusion مشهد 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 متعددة في testbeds

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

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

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

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

  3. للإقرار بأنّ الاختبارات قد استوفت متطلبات الاختبار، انقر على زر علامة الاختيار الخضراء. إدخال اختبار ITS للكاميرا في CTS Verifier تصبح قائمة الاختبار باللون الأخضر ثم تشير إلى أن الهاتف قد اجتاز الاختبار بنجاح عبر الكاميرا.

اختبار 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 التحقّق من صحة نموذج الضوضاء من خلال التحقّق من صحة قيم الضوضاء لتعريض اللقطة ودرجة الاستفادة المقدَّمة في بيانات الكاميرا.