ملاحظات إصدار Android 12 Camera Image Test Suite

تم تضمين عدد من تغييرات Camera ITS في إصدار Android 12. تلخص هذه الصفحة التغييرات التي تقع في أربع فئات رئيسية:

إعادة الهيكلة إلى Python 3

نظرًا لإيقاف Python 2.7 في يناير 2020 ، تمت إعادة هيكلة قاعدة بيانات Camera ITS بالكامل إلى Python 3. مطلوب إصدارات ومكتبات Python التالية في Android 12:

يظل قاذفة الاختبار الرئيسية ، tools/run_all_tests.py ، كما هو الحال مع إصدارات Android 11 أو الإصدارات الأقدم ويتم إعادة بنائه إلى Python 3.

تم إعادة بناء جميع الاختبارات الفردية وتستخدم فئة إعداد الاختبار الجديدة المحددة في tests/its_base_test.py . تظل معظم أسماء ووظائف الاختبار كما هي. في Android 12 ، تقوم جميع الاختبارات الفردية الآن بتحميل مشاهدها. بينما يزيد تحميل المشهد لكل اختبار من وقت الاختبار الإجمالي ، فإنه يتيح تصحيح أخطاء الاختبارات الفردية.

لمزيد من المعلومات حول تغييرات الاختبار الفردية ، راجع تغييرات الاختبار .

تم إعادة هيكلة وحدات Python النمطية التالية مع تغيير الاسم:

  • pymodules/its/caps.pyutils/camera_properties_utils.py
  • pymodules/its/cv2image.pyutils/opencv_processing_utils.py
  • pymodules/its/device.pyutils/its_session_utils.py
  • pymodules/its/error.pyutils/error_util.py
  • pymodules/its/image.pyutils/image_processing_utils.py
  • pymodules/its/objects.pyutils/capture_request_utils.py
  • pymodules/its/target.pyutils/target_exposure_utils.py
  • tools/hw.pyutils/sensor_fusion_utils.py

اعتماد إطار اختبار Mobly

Mobly هو إطار اختبار قائم على Python يدعم حالات الاختبار التي تتطلب أجهزة متعددة بإعدادات أجهزة مخصصة. يستخدم Camera ITS البنية التحتية للاختبار Mobly لتمكين التحكم وتسجيل الاختبارات بشكل أفضل.

يستخدم Camera ITS البنية التحتية للاختبار Mobly لتمكين التحكم وتسجيل الاختبارات بشكل أفضل. Mobly هو إطار اختبار قائم على Python يدعم حالات الاختبار التي تتطلب أجهزة متعددة بإعدادات أجهزة مخصصة. لمزيد من المعلومات حول Mobly ، راجع google / mobly .

config.yml

باستخدام إطار عمل Mobly ، يمكنك إعداد جهاز قيد الاختبار (DUT) ولوح الرسم البياني في فئة its_base_test . يتم استخدام ملف config.yml (YAML) لإنشاء اختبار Mobly. يمكن تكوين أسطح اختبار متعددة داخل ملف التكوين هذا ، على سبيل المثال ، جهاز لوحي وجهاز استشعار اندماج اختبار. ضمن قسم وحدة التحكم في كل اختبار ، يمكنك تحديد device_ids الأجهزة لتحديد أجهزة Android المناسبة لمشغل الاختبار. بالإضافة إلى معرفات الجهاز ، يتم تمرير معلمات أخرى مثل brightness الجهاز اللوحي ، و chart_distance ، و debug_mode ، و camera_id ، و scene_id في فئة الاختبار. قيم معلمات الاختبار الشائعة هي:

brightness: 192  (all tablets except Pixel C)
chart_distance: 31.0  (rev1/rev1a box for FoV < 90° cameras)
chart_distance: 22.0 (rev2 test rig for FoV > 90° cameras)

الاختبار القائم على الكمبيوتر اللوحي

بالنسبة للاختبار المستند إلى الكمبيوتر اللوحي ، يجب أن تكون الكلمة الأساسية TABLET موجودة في اسم سرير الاختبار. أثناء التهيئة ، يقوم عداء الاختبار Mobly بتهيئة TestParams ويمررها إلى الاختبارات الفردية.

ما يلي هو نموذج لملف config.yml لعمليات التشغيل المستندة إلى الكمبيوتر اللوحي.

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

يمكن استدعاء الاختبار باستخدام tools/run_all_tests.py . في حالة عدم وجود قيم سطر أوامر ، يتم إجراء الاختبارات باستخدام قيم ملف config.yml . بالإضافة إلى ذلك ، يمكنك تجاوز قيم ملف تكوين camera scene في سطر الأوامر باستخدام أوامر مشابهة لنظام Android 11 أو أقل.

علي سبيل المثال:

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 . يتم تحديد الاختبار الصحيح من خلال المشاهد التي تم اختبارها. يدعم Android 12 كلاً من وحدات التحكم Arduino و Canakit لدمج المستشعرات .

فيما يلي نموذج لملف config.yml لعمليات اندماج المستشعرات.

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         # cntl can be arduino or canakit
      rotator_ch: 1
      camera: 0

لإجراء اختبارات اندماج المستشعر مع جهاز اختبار اندماج المستشعر ، استخدم:

python tools/run_all_tests.py scenes=sensor_fusion
python tools/run_all_tests.py scenes=sensor_fusion camera=0

أسرّة اختبار متعددة

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

فيما يلي نموذج لملف config.yml يحتوي على كلٍ من قاعتي اختبار اندماج الأجهزة اللوحية وأجهزة الاستشعار.

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

الاختبار اليدوي

يستمر دعم الاختبار اليدوي في Android 12. ومع ذلك ، يجب أن يحدد الاختبار اليدوي الاختبار على هذا النحو باستخدام الكلمة الرئيسية MANUAL في اسم الاختبار. بالإضافة إلى ذلك ، لا يمكن أن يتضمن الاختبار معرّف الجهاز اللوحي.

فيما يلي نموذج لملف config.yml للاختبار اليدوي.

TestBeds:
  - Name: TEST_BED_MANUAL
    Controllers:
        AndroidDevice:
          - serial: 8A9X0NS5Z
            label: dut

    TestParams:
      debug_mode: "False"
      chart_distance: 31.0
      camera: 0
      scene: scene1

اختبار المشاهد بدون أقراص

يمكن إجراء اختبار للمشهد 0 والمشهد 5 باستخدام TEST_BED_TABLET_SCENES أو باستخدام TEST_BED_MANUAL . ومع ذلك ، إذا تم إجراء الاختبار باستخدام TEST_BED_TABLET_SCENES ، فيجب توصيل الجهاز اللوحي ويجب أن يكون المعرف التسلسلي للجهاز اللوحي صالحًا على الرغم من عدم استخدام الجهاز اللوحي لأن إعداد فئة الاختبار يعين قيمة المعرف التسلسلي للكمبيوتر اللوحي.

إجراء الاختبارات الفردية

لا يمكن تشغيل الاختبارات الفردية إلا لأغراض التصحيح لأنه لا يتم إبلاغ CTS Verifier بنتائجها. نظرًا لأنه لا يمكن الكتابة فوق ملفات config.yml في سطر الأوامر camera scene ، يجب أن تكون هذه المعلمات صحيحة في ملف config.yml للاختبار الفردي المعني. بالإضافة إلى ذلك ، إذا كان هناك أكثر من اختبار واحد في ملف التكوين ، فيجب عليك تحديد الاختبار بعلامة --test_bed . علي سبيل المثال:

python tests/scene1_1/test_black_white.py --config config.yml --test_bed TEST_BED_TABLET_SCENES

اختبار القطع الأثرية

في Android 12 ، يتم تخزين عناصر الاختبار الخاصة بـ Camera ITS بشكل مشابه لنظام Android 11 أو إصدار أقل ولكن مع التغييرات التالية:

  • يحتوي دليل أداة الاختبار /tmp على CameraITS_ مُلحق مسبقًا بالسلسلة العشوائية المكونة من 8 أحرف من أجل الوضوح.
  • يتم تخزين مخرجات الاختبار والأخطاء في test_log.DEBUG لكل اختبار بدلاً من test_name_stdout.txt و test_name_stderr.txt .
  • يتم تخزين سجلات DUT والكمبيوتر اللوحي من كل اختبار فردي في الدليل /tmp/CameraITS_######## تبسيط التصحيح حيث يتم تسجيل جميع المعلومات المطلوبة لتصحيح مشكلات 3A.

تغييرات الاختبار

في Android 12 ، تكون مشاهد الجهاز اللوحي عبارة عن ملفات PNG بدلاً من ملفات PDF. يتيح استخدام ملفات PNG المزيد من نماذج الأجهزة اللوحية لعرض المشاهد بشكل صحيح.

scene0 / test_jitter.py

يعمل اختبار test_jitter على كاميرات خفية في نظام Android 12.

scene1_1 / test_black_white.py

بالنسبة لنظام التشغيل Android 12 ، يحتوي test_black_white على وظائف كل من test_black_white و test_channel_saturation .

يصف الجدول التالي الاختبارين الفرديين في Android 11.

اسم الاختبار مستوى API الأول التأكيدات
scene1_1 / test_black_white.py الكل تعرض قصير ، كسب منخفض لقيم RGB ~ [0 ، 0 ، 0]
تعرض طويل ، مكاسب عالية لقيم RGB ~ [255 ، 255 ، 255]
scene1_1 / test_channel_saturation.py 29 تم تقليل التسامح مع اختلافات [255 ، 255 ، 255] لإزالة الصبغة اللونية في الصور البيضاء.

يصف الجدول التالي الاختبار المدمج ، scene1_1 / test_black_white.py ، في Android 12.

اسم الاختبار مستوى API الأول التأكيدات
scene1_1 / test_black_white.py الكل تعرض قصير ، كسب منخفض لقيم RGB ~ [0 ، 0 ، 0]
تعريض ضوئي طويل ، كسب عالي لقيم RGB ~ [255 ، 255 ، 255] وتفاوت أقل بين القيم لإزالة الصبغة اللونية في الصور البيضاء.

scene1_1 / test_burst_sameness_manual.py

يعمل اختبار test_burst_sameness_manual على الكاميرات الخفية المادية في Android 12.

scene1_2 / test_tonemap_sequence.py

يعمل اختبار test_tonemap_sequence على كاميرات محدودة في نظام Android 12.

scene1_2 / test_yuv_plus_raw.py

يعمل اختبار test_yuv_plus_raw على الكاميرات الخفية المادية في Android 12.

scene2_a / test_format_combos.py

يعمل اختبار test_format_combos على كاميرات محدودة في Android 12.

scene3 / test_flip_mirror.py

يعمل اختبار test_flip_mirror على كاميرات محدودة في Android 12.

المشهد 4 / test_aspect_ratio_and_crop.py

العثور على الدوائر في scene4/test_aspect_ratio_and_crop.py تم إعادة تصميمه في Android 12.

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

تظهر الملامح ومعايير الاختيار الخاصة بهم في الصورة التالية.

الرسم المفاهيمي للخطوط العامة ومعايير الاختيار

الشكل 1. الرسم المفاهيمي للخطوط العامة ومعايير الاختيار

تعد طريقة Android 12 أبسط وتعمل على حل مشكلة اقتصاص المربع المحيط في بعض أجهزة العرض اللوحية. يتم تسجيل جميع المرشحين في الدوائر لأغراض التصحيح.

في Android 12 ، يتم تشغيل اختبار المحاصيل لأجهزة FULL و LEVEL3 . تتخطى إصدارات Android 11 أو الإصدارات الأقل تأكيدات اختبار الاقتصاص للأجهزة FULL .

يسرد الجدول التالي التأكيدات الخاصة بـ test_aspect_ratio_and_crop.py التي تتوافق مع مستوى جهاز معين ومستوى API الأول.

مستوى الجهاز مستوى API الأول التأكيدات
محدود الكل ابعاد متزنة
FoV للتنسيقات 4: 3 ، 16: 9 ، 2: 1
ممتلىء <31 ابعاد متزنة
FoV للتنسيقات 4: 3 ، 16: 9 ، 2: 1
ممتلىء 31 ا & قتصاص
ابعاد متزنة
FoV للتنسيقات 4: 3 ، 16: 9 ، 2: 1
مستوى 3 الكل ا & قتصاص
ابعاد متزنة
FoV للتنسيقات 4: 3 ، 16: 9 ، 2: 1

scene4 / test_multi_camera_alignment.py

تم إعادة هيكلة طريقة undo_zoom() لالتقاط YUV في scene4/test_multi_camera_alignment.py لحساب أكثر دقة للاقتصاص على المستشعرات التي لا تتطابق مع نسبة العرض إلى الارتفاع التي تم التقاطها.

كود Android 11 Python 2

zoom_ratio = min(1.0 * yuv_w / cr_w, 1.0 * yuv_h / cr_h)
circle[i]['x'] = cr['left'] + circle[i]['x'] / zoom_ratio
circle[i]['y'] = cr['top'] + circle[i]['y'] / zoom_ratio
circle[i]['r'] = circle[i]['r'] / zoom_ratio

كود Android 12 Python 3

yuv_aspect = yuv_w / yuv_h
relative_aspect = yuv_aspect / (cr_w/cr_h)
if relative_aspect > 1:
  zoom_ratio = yuv_w / cr_w
  yuv_x = 0
  yuv_y = (cr_h - cr_w / yuv_aspect) / 2
else:
  zoom_ratio = yuv_h / cr_h
  yuv_x = (cr_w - cr_h * yuv_aspect) / 2
  yuv_y = 0
circle['x'] = cr['left'] + yuv_x + circle['x'] / zoom_ratio
circle['y'] = cr['top'] + yuv_y + circle['y'] / zoom_ratio
circle['r'] = circle['r'] / zoom_ratio

sensor_fusion / test_sensor_fusion.py

في Android 12 ، تمت إضافة طريقة لاكتشاف الميزات في الصور لاختبار اندماج المستشعر.

في الإصدارات الأقل من Android 12 ، تُستخدم الصورة بأكملها للعثور على أفضل 240 ميزة والتي يتم إخفاءها بعد ذلك إلى المركز بنسبة 20٪ لتجنب تأثيرات الغالق المتدحرجة مع الحد الأدنى لمتطلبات الميزة وهو 30 ميزة.

إذا كانت الميزات التي تم العثور عليها من خلال هذه الطريقة غير كافية ، فإن Android 12 يخفي منطقة اكتشاف الميزات إلى المركز بنسبة 20٪ أولاً ، ويحد من الميزات القصوى إلى ضعف الحد الأدنى لمتطلبات الميزة.

توضح الصورة التالية الفرق بين اكتشاف ميزات Android 11 و Android 12. يؤدي رفع الحد الأدنى لمتطلبات الميزات إلى اكتشاف ميزات الجودة الرديئة ويؤثر سلبًا على القياسات.

الاختلاف في اكتشاف الميزات بين Android 11 و Android 12 sensor_fusion اكتشاف ميزة

الشكل 2. الاختلاف في اكتشاف الميزات بين Android 11 و Android 12

اختبارات جديدة

scene0 / test_solid_color_test_pattern.py

تم تمكين اختبار جديد ، test_solid_color_test_pattern ، لنظام Android 12. تم تمكين هذا الاختبار لجميع الكاميرات وهو موضح في الجدول التالي.

مشهد اسم الاختبار مستوى API الأول وصف
0 test_solid_color_test_pattern 31 لتأكيد إخراج الصورة ذات الألوان الصلبة وإمكانية برمجة ألوان الصورة.

يجب تمكين أنماط اختبار الألوان الصلبة لدعم وضع خصوصية الكاميرا. يؤكد اختبار test_solid_color_test_pattern إخراج صورة YUV بلون خالص مع اللون المحدد بواسطة النمط المحدد ، ويتغير لون الصورة وفقًا للمواصفات.

حدود

  • cameraPrivacyModeSupport : تحديد ما إذا كانت الكاميرا تدعم وضع الخصوصية.
  • android.sensor.testPatternMode : يضبط وضع نمط الاختبار. يستخدم هذا الاختبار SOLID_COLOR .
  • android.sensor.testPatternData : تعيين قيم نمط اختبار R و Gr و Gb و G لوضع نمط الاختبار.

للحصول على وصف لنموذج اختبار الألوان الصلبة ، راجع SENSOR_TEST_PATTERN_MODE_SOLID_COLOR .

طريقة

يتم التقاط إطارات YUV لمجموعة المعلمات والتحقق من صحة محتوى الصورة. يتم إخراج نمط الاختبار مباشرة من مستشعر الصورة ، لذلك لا يلزم مشهد معين. إذا تم دعم PER_FRAME_CONTROL ، يتم التقاط إطار YUV واحد لكل إعداد تم اختباره. إذا لم يكن PER_FRAME_CONTROL مدعومًا ، فسيتم التقاط أربعة إطارات مع تحليل الإطار الأخير فقط لزيادة تغطية الاختبار إلى أقصى حد في كاميرات LIMITED .

تم ضبط لقطات YUV على أنماط اختبار BLACK WHITE RED GREEN BLUE المشبعة بالكامل. نظرًا لأن تعريف نموذج الاختبار يتم وفقًا لنمط المستشعر Bayer ، يجب تعيين قنوات الألوان لكل لون كما هو موضح في الجدول التالي.

اللون testPatternData (RGGB)
أسود (0, 0, 0, 0)
أبيض (1, 1, 1, 1)
أحمر (1, 0, 0, 0)
لون أخضر (0, 1, 1, 0)
أزرق (0, 0, 0, 1)

جدول التوكيد

يصف الجدول التالي تأكيدات الاختبار لـ test_solid_color_test_pattern.py .

الة تصوير
مستوى API الأول
نوع الكاميرا تم تأكيد الألوان
31 باير أسود ، أبيض ، أحمر ، أخضر ، أزرق
31 كثرة الوحيدات أسود ، أبيض
<31 باير / مونو أسود

اختبارات فئة الأداء

scene2_c / test_camera_launch_perf_class.py

يتحقق من أن بدء تشغيل الكاميرا أقل من 500 مللي ثانية لكل من الكاميرات الأساسية الأمامية والخلفية مع مشهد الوجه scene2_c.

scene2_c / test_jpeg_capture_perf_class.py

يتحقق من أن زمن انتقال التقاط JPEG بدقة 1080 بكسل أقل من ثانية واحدة لكل من الكاميرات الأساسية الأمامية والخلفية مع مشهد وجه المشهد 2_c.