كاميرا ITS

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

يوجد 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 .

    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 للتحكم في الجهاز والاتصال به، وتثبيت البرنامج المطلوب.

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

أدوات منصة Android SDK

يجب تثبيت أدوات Android SDK Platform ويجب أن يكون ADB في المسار القابل للتنفيذ لـ Shell أو المحطة الطرفية التي تعمل على الجهاز المضيف. للحصول على الإصدار العام من أدوات Android SDK Platform، راجع ملاحظات إصدار SDK Platform Tools .

بايثون

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

موبلي

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

pip install mobly

إعداد البيئة

لإعداد بيئة الاختبار، قم بتشغيل:

cd CameraITS
source build/envsetup.sh

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

إذا رأيت رسالة الخطأ libtinfo.so.6: no version information available (required by /bin/sh) في وقت التشغيل، فقم بتشغيل الأمر التالي لإعادة تسمية الملف libtinfo.so.6 .

mv $ENV_DIRECTORY/lib/libtinfo.so.6 $ENV_DIRECTORY/lib/libtinfo.so.6.bak

إعداد المشهد

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

للاختبار اليدوي، تأكد مما يلي:

  • DUT على حامل ثلاثي الأرجل
  • يتم توجيه 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

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

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

  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)
    

    يقوم كل تشغيل للبرنامج النصي بطباعة سجل يعرض إما النجاح أو الفشل أو التخطي لكل اختبار لـ ITS، حيث يشير تخطي إلى أنه تم اجتياز الاختبار لأن الجهاز لم يعلن عن القدرة الأساسية التي يتم اختبارها. على سبيل المثال، إذا لم يعلن أحد الأجهزة من خلال واجهات الكاميرا أنه يدعم DNG، فسيتم تخطي الاختبارات المتعلقة بالتقاط ملف DNG ويتم احتسابها كنجاحات.

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

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

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