تم تضمين عدد من تغييرات Camera ITS في إصدار Android 12. تلخص هذه الصفحة التغييرات التي تقع في أربع فئات عامة:
إعادة الهيكلة إلى Python 3
نظرًا لإيقاف Python 2.7 في يناير 2020 ، تمت إعادة هيكلة قاعدة بيانات Camera ITS بالكامل إلى Python 3. مطلوب إصدارات ومكتبات Python التالية في Android 12:
- Python 3.7.9 أو Python 3.7.10
- OpenCV 3.4.2
- نومبي 1.19.2
- Matplotlib 3.3.2
- Scipy 1.5.2.2 تحديث
- برنامج pySerial 3.5
- وسادة 8.1.0
- PyYAML 5.3.1
يظل قاذفة الاختبار الرئيسية ، tools/run_all_tests.py
، كما هو الحال مع إصدارات Android 11 أو الإصدارات الأقدم ويتم إعادة بنائه إلى Python 3.
يتم إعادة بناء جميع الاختبارات الفردية وتستخدم فئة إعداد الاختبار الجديدة المحددة في tests/its_base_test.py
. تظل معظم أسماء ووظائف الاختبار كما هي. في Android 12 ، تقوم جميع الاختبارات الفردية الآن بتحميل مشاهدها. بينما يزيد تحميل المشهد لكل اختبار من وقت الاختبار الإجمالي ، فإنه يتيح تصحيح أخطاء الاختبارات الفردية.
لمزيد من المعلومات حول تغييرات الاختبار الفردية ، راجع تغييرات الاختبار .
يتم إعادة هيكلة وحدات Python النمطية التالية مع تغيير الاسم:
-
pymodules/its/caps.py
→utils/camera_properties_utils.py
-
pymodules/its/cv2image.py
→utils/opencv_processing_utils.py
-
pymodules/its/device.py
→utils/its_session_utils.py
-
pymodules/its/error.py
→utils/error_util.py
-
pymodules/its/image.py
→utils/image_processing_utils.py
-
pymodules/its/objects.py
→utils/capture_request_utils.py
-
pymodules/its/target.py
→utils/target_exposure_utils.py
-
tools/hw.py
→utils/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. يؤدي رفع الحد الأدنى لمتطلبات الميزات إلى اكتشاف ميزات الجودة الرديئة ويؤثر سلبًا على القياسات.
الشكل 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
يتحقق من أن زمن انتقال التقاط 1080p JPEG أقل من ثانية واحدة لكل من الكاميرات الأساسية الأمامية والخلفية مع مشهد وجه المشهد 2_c.