تم تضمين عدد من التغييرات في Camera ITS في إصدار Android 12. تلخّص هذه الصفحة التغييرات التي تندرج ضمن أربع فئات عامة:
إعادة صياغة الرمز البرمجي إلى Python 3
بسبب إيقاف لغة Python 2.7 نهائيًا في كانون الثاني (يناير) 2020، تمت إعادة صياغة قاعدة بيانات Camera ITS بالكامل لتصبح متوافقة مع لغة Python 3. يجب توفُّر إصدارات بايثون التالية والمكتبات في Android 12:
- Python 3.7.9 أو Python 3.7.10
- OpenCV 3.4.2
- Numpy 1.19.2
- Matplotlib 3.3.2
- Scipy 1.5.2
- الإصدار 3.5 من pySerial
- وسادة 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 عبارة عن إطار اختبار يستند إلى بايثون ويتوافق مع حالات الاختبار التي تتطلب أجهزة متعددة مزودة بإعدادات مخصصة للأجهزة. يستخدم اختبار الكاميرا ITS بنية اختبار Mobly الأساسية للسماح بالتحكّم بشكل أفضل في الاختبارات وتسجيلها.
يستخدم فريق ITS للكاميرا بنية اختبار Mobly الأساسية للسماح بإمكانية التحكّم بشكل أفضل في الاختبارات وتسجيلها. Mobly هو إطار عمل اختباري يستند إلى لغة البايثون ويدعم حالات الاختبار التي تتطلب أجهزة متعددة مزودة بإعدادات مخصصة للأجهزة. لمزيد من المعلومات عن 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. بما أنّه لا يمكن استبدال ملفات
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
عناصر الاختبار
في الإصدار 12 من نظام التشغيل Android، يتم تخزين مواد اختبار تقنية ITS للكاميرا بالطريقة نفسها المتّبعة في الإصدار 11 من نظام التشغيل Android أو الإصدارات الأقدم، ولكن مع إجراء التغييرات التالية:
- تمّ إدراج
CameraITS_
في بداية ملف/tmp
الذي يتضمن العنصر التجريبي، وذلك قبل السلسلة العشوائية المكونة من 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.
اسم الاختبار | المستوى الأول لواجهة برمجة التطبيقات | الادّعاءات |
---|---|---|
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.
مشهد2_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
.
يسرد الجدول التالي التأكيدات المتعلّقة بملف APK لنظام التشغيل test_aspect_ratio_and_crop.py
والتي تتوافق مع مستوى جهاز معيّن و
مستوى واجهة برمجة التطبيقات الأول.
على مستوى الجهاز | المستوى الأول من واجهة برمجة التطبيقات | الادّعاءات |
---|---|---|
محدودة | الكل | نسبة العرض إلى الارتفاع مجال الرؤية بتنسيقات 4:3 و16:9 و2:1 |
كامل | < 31 | نسبة العرض إلى الارتفاع مجال الرؤية بتنسيقات 4:3 و16:9 و2:1 |
كامل | ≥ 31 | الاقتصاص نسبة العرض إلى الارتفاع مجال الرؤية بتنسيقات 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
من أجل مراعاة القص بدقة أكبر على أجهزة الاستشعار التي لا تتطابق مع نسبة العرض إلى الارتفاع لعمليات الالتقاط.
رمز 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
filter_fusion/test_sensor_fusion.py
في Android 12، تمت إضافة طريقة لرصد العناصر في الصور لاختبار دمج البيانات من أجهزة الاستشعار.
في الإصدارات الأقدم من Android 12، يتم استخدام الصورة بأكملها للعثور على أفضل 240 ميزة، ويتم حجبها بعد ذلك في المركز بنسبة% 20 لتجنُّب أثر التقاط الصور المتلاحقة، مع أنّ الحد الأدنى لمتطلبات الميزات هو 30 ميزة.
إذا كانت الميزات التي تم العثور عليها باستخدام هذه الطريقة غير كافية، يحجب نظام التشغيل Android 12 منطقة رصد الميزات في المركز بنسبة% 20 أولاً، ويحدّ من الحد الأقصى لعدد الميزات ليكون ضعف الحد الأدنى لمتطلبات الميزات.
توضِّح الصورة التالية الفرق بين ميزة رصد الميزات في Android 11 وAndroid 12. إنّ رفع الحدّ الأدنى لمتطلّبات الميزات يؤدي إلى رصد الميزات ذات الجودة الرديئة ويؤثر سلبًا في عمليات القياس.
الشكل 2: الفرق في رصد الميزات بين Android 11 وAndroid 12
الاختبارات الجديدة
المشهد0/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 | أحادي اللون | أسود، أبيض |
< 31 | Bayer/MONO | أسود |
اختبارات فئة الأداء
المشهد2_c/test_camera_launch_perf_class.py
التحقّق من أنّ مدة بدء تشغيل الكاميرا أقل من 500 ملي ثانية لكل من الكاميرا الأمامية والخلفية الأساسيتين مع مشهد الوجه scene2_c
scene2_c/test_jpeg_capture_perf_class.py
التحقّق من أنّ وقت استجابة التقاط الصور بتنسيق JPEG بدقة 1080p أقل من ثانية واحدة لكل من الكاميرات الأمامية والخلفية الأساسية باستخدام المشهد "وجه scene2_c"