يتضمّن إصدار Android 12 عددًا من التغييرات في مجموعة أدوات اختبار توافق الكاميرا (ITS). تلخّص هذه الصفحة التغييرات التي تندرج ضمن أربع فئات عامة:
إعادة الهيكلة إلى Python 3
بسبب إيقاف الإصدار 2.7 من Python نهائيًا في يناير 2020، تمت إعادة تصميم قاعدة بيانات رمز Camera ITS بالكامل لتتوافق مع الإصدار 3 من Python. يجب توفُّر إصدارات Python والمكتبات التالية في نظام Android 12:
- الإصدار 3.7.9 أو 3.7.10 من Python
- OpenCV 3.4.2
- Numpy 1.19.2
- Matplotlib 3.3.2
- Scipy 1.5.2
- pySerial 3.5
- Pillow 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 أو الإصدارات الأقدم، ولكن مع إجراء التغييرات التالية:
- يتم إضافة
CameraITS_
إلى دليل عنصر الاختبار/tmp
قبل السلسلة العشوائية المكوّنة من 8 أحرف لتوضيحها. - يتم تخزين نتائج الاختبار والأخطاء في
test_log.DEBUG
لكل اختبار بدلاً منtest_name_stdout.txt
وtest_name_stderr.txt
. - يتم تخزين logcat لجهاز الاختبار اللوحي (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.
اسم الاختبار | أول مستوى لواجهة برمجة التطبيقات | التأكيدات |
---|---|---|
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.
اسم الاختبار | أول مستوى لواجهة برمجة التطبيقات | التأكيدات |
---|---|---|
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
على كاميرات LIMITED في Android 12.
scene1_2/test_yuv_plus_raw.py
يتم إجراء اختبار test_yuv_plus_raw
على الكاميرات المخفية
المضمّنة في أجهزة Android 12.
scene2_a/test_format_combos.py
يتم إجراء اختبار test_format_combos
على كاميرات LIMITED في Android 12.
scene3/test_flip_mirror.py
يتم إجراء اختبار test_flip_mirror
على كاميرات LIMITED في 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 اللوحية. يتم تسجيل جميع المرشحين الذين يقعون ضمن دائرة لأغراض تصحيح الأخطاء.
في نظام التشغيل Android 12، يتم إجراء اختبار الاقتصاص للأجهزة التي تعمل بالإصدار FULL
والإصدار LEVEL3
. تتخطى الإصدارات 11 من نظام التشغيل Android أو الإصدارات الأقدم تأكيدات اختبار الاقتصاص لأجهزة FULL
.
يسرد الجدول التالي تأكيدات test_aspect_ratio_and_crop.py
التي تتوافق مع مستوى جهاز معيّن وأول مستوى لواجهة برمجة التطبيقات.
مستوى الجهاز | أول مستوى لواجهة برمجة التطبيقات | التأكيدات |
---|---|---|
LIMITED | الكل | نسبة العرض إلى الارتفاع مجال الرؤية للصور بنسب 4:3 و16:9 و2:1 |
كامل | < 31 | نسبة العرض إلى الارتفاع مجال الرؤية للصور بنسب 4:3 و16:9 و2:1 |
كامل | ≥ 31 | الاقتصاص نسبة العرض إلى الارتفاع مجال الرؤية للصور بنسب العرض إلى الارتفاع 4:3 و16:9 و2:1 |
LEVEL3 | الكل | الاقتصاص نسبة العرض إلى الارتفاع مجال الرؤية للصور بنسب العرض إلى الارتفاع 4:3 و16:9 و2:1 |
scene4/test_multi_camera_alignment.py
تمت إعادة تصميم الطريقة undo_zoom()
لتسجيل بيانات YUV في scene4/test_multi_camera_alignment.py
من أجل احتساب عمليات الاقتصاص بشكل أكثر دقة على أجهزة الاستشعار التي لا تتطابق مع نسبة العرض إلى الارتفاع لعملية التسجيل.
رمز Python 2 في Android 11
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
رمز Python 3 في Android 12
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. يتم تفعيل هذا الاختبار لجميع الكاميرات، وهو موضح في الجدول التالي.
المشهد | اسم الاختبار | أول مستوى لواجهة برمجة التطبيقات | الوصف |
---|---|---|---|
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)
|
التوجيه الأوروبي بشأن المعدات اللاسلكية (RED) |
(1, 0, 0, 0)
|
أخضر |
(0, 1, 1, 0)
|
أزرق |
(0, 0, 0, 1)
|
جدول التأكيدات
يوضّح الجدول التالي تأكيدات الاختبار الخاصة بـ
test_solid_color_test_pattern.py
.
الكاميرا أول مستوى لواجهة برمجة التطبيقات |
نوع الكاميرا | الألوان التي تم تأكيدها |
---|---|---|
31 | Bayer | أسود، أبيض، أحمر، أخضر، أزرق |
31 | MONO | أسود، أبيض |
< 31 | Bayer/MONO | أسود |
اختبارات فئة الأداء
scene2_c/test_camera_launch_perf_class.py
يتم التحقّق من أنّ وقت بدء تشغيل الكاميرا أقل من 500 مللي ثانية لكل من الكاميرتَين الأساسيتَين الأمامية والخلفية مع مشهد الوجه scene2_c.
scene2_c/test_jpeg_capture_perf_class.py
يجب أن يكون وقت استجابة التقاط صور JPEG بدقة 1080p أقل من ثانية واحدة لكل من الكاميرتين الأمامية والخلفية الأساسيتين مع مشهد الوجه scene2_c.