كاميرا ITS

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

وأن نظام الخدمة يقع في نطاق اختبار CTS Verifier في cts/apps/CameraITS يجب أن تجتاز الأجهزة اختبارات تقنية المعلومات المقابلة للميزات المتوافقة. يتم الإعلان عنها من خلال إطار عمل الكاميرا للتطبيقات التابعة لجهات خارجية بصفتها مجموعة فرعية من 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
    

إعداد المضيف

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

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

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

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

Python

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

موبلي

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

pip install mobly

إعداد البيئة

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

cd CameraITS
source build/envsetup.sh

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

في حال ظهور رسالة الخطأ 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

إعداد المشهد

لإعداد المَشاهد، ننصحك باستخدام إعداد الكاميرا في صندوق للكاميرا والسهولة في الأتمتة والموثوقية والكفاءة في الاختبار. صندوق تكنولوجيا المعلومات مع تجهيزات الاختبار تتوافق مع جميع متطلبات الإضاءة والتوسيط وتغيير الرسم البياني لقسم تكنولوجيا المعلومات. كما يلزم أيضًا توفير تكنولوجيا المعلومات في العلبة إضافات الكاميرا اختبار الفرضية.

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

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

يعرض النص البرمجي لاختبار تكنولوجيا المعلومات طلبًا من المستخدم بتغيير المشهد الإعداد قبل بدء الاختبارات في مشهد جديد.

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

تشغيل اختبارات تكنولوجيا المعلومات

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

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

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

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

  2. من الجهاز المضيف، يمكنك إجراء اختبارات تكنولوجيا المعلومات من جهاز CameraITS/. الدليل. على سبيل المثال، إذا كان الجهاز مزوّدًا بكاميرا أمامية وكاميرا خلفية، شغِّل الأمر التالي:

    python tools/run_all_tests.py
    

    ويتكرر النص عبر الكاميرات ومشاهد الاختبار بناءً على ملف config.yml. لتصحيح أخطاء الإعدادات، ننصحك بتشغيل من scene2 مشهد مع اختبار واحد لتحقيق أسرع إنجاز.

    للاختبار اليدوي، وقبل البدء في تشغيل مجموعة من اختبارات تقنية المعلومات على كل مشهد، يلتقط النص صورة للمشهد الحالي، ويحفظها بتنسيق 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 أو SKIP for كل اختبار ITS، حيث تشير SKIP إلى أنه تم اجتياز الاختبار لأن الجهاز لم تعلن عن الإمكانية الأساسية التي يجري اختبارها. على سبيل المثال، إذا كانت لا يعرض موقعك الإلكتروني إعلانات من خلال واجهات الكاميرا المتوافقة يتم تخطّي الاختبارات المرتبطة بالتقاط ملفات DNG، ويتم احتسابها كبطاقات.

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

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

الأجهزة التي تعمل بنظام التشغيل Android 14 أو الإصدارات الأحدث تدعم الاتصال بالتوازي اختبار 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"

لتشغيل testbeds بالتوازي، استخدم الأمر التالي:

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) للكاميرا.

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

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