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

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

إعادة البناء لبيثون 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 .

ملفات التكوين.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.

Scene4/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 الأول التأكيدات
محدود الجميع ابعاد متزنة
مجال الرؤية للتنسيقات 4:3، 16:9، 2:1
ممتلىء < 31 ابعاد متزنة
مجال الرؤية للتنسيقات 4:3، 16:9، 2:1
ممتلىء ≥ 31 اقتصاص
ابعاد متزنة
مجال الرؤية للتنسيقات 4:3، 16:9، 2:1
مستوى 3 الجميع اقتصاص
ابعاد متزنة
مجال الرؤية للتنسيقات 4:3، 16:9، 2:1

Scene4/test_multi_camera_alignment.py

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

كود أندرويد 11 بايثون 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

كود أندرويد 12 بايثون 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

الشكل 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، فيجب ضبط قنوات الألوان لكل لون كما هو موضح في الجدول التالي.

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