يعد Camera Image Test Suite (ITS) إطارًا لإجراء الاختبارات على الصور التي تنتجها كاميرا Android. الهدف العام لكل اختبار في ITS هو تكوين الكاميرا بطريقة معينة، والتقاط لقطة واحدة أو أكثر، وفحص اللقطات لمعرفة ما إذا كانت تحتوي على بيانات الصورة المتوقعة. تتطلب العديد من الاختبارات توجيه الكاميرا إلى مخطط هدف محدد أو إضاءتها بكثافة معينة.
يوجد ITS في أداة اختبار CTS Verifier في cts/apps/CameraITS
. يجب أن تجتاز الأجهزة اختبارات ITS المتوافقة مع الميزات المدعومة المعلن عنها بواسطة إطار عمل الكاميرا لتطبيقات الطرف الثالث باعتبارها مجموعة فرعية من CTS.
يثبت
لتشغيل اختبارات ITS، يجب إعداد ما يلي:
- جهاز تحت الاختبار (DUT)
- جهاز مضيف (على سبيل المثال، كمبيوتر مكتبي أو كمبيوتر محمول بنظام Linux)
- مشهد تلتقطه الكاميرا
إعداد الجهاز قيد الاختبار (DUT).
لإعداد DUT، اتبع الخطوات التالية:
- قم بتوصيل DUT بجهاز مضيف عبر USB.
- منح أذونات للمضيف للوصول إلى DUT عبر ADB.
قم بتثبيت تطبيق CTS Verifier (
CtsVerifier.apk
) على الجهاز. لمزيد من المعلومات، راجع استخدام أداة التحقق من CTS .extract root/out/host/linux-x86/cts-verfier/android-cts-verifier.zip
cd android-cts-verifier
adb install -r -g CtsVerifier.apk
إعداد المضيف
يتطلب ITS أن يكون الجهاز المضيف متصلاً بـ DUT من خلال USB، وأن يكون قادرًا على استخدام ADB للتحكم في الجهاز والاتصال به، وتثبيت البرنامج المطلوب.
لإعداد جهازك المضيف، تأكد من تثبيت البرنامج التالي.
أدوات منصة Android SDK
يجب تثبيت أدوات Android SDK Platform ويجب أن يكون ADB في المسار القابل للتنفيذ لـ Shell أو المحطة الطرفية التي تعمل على الجهاز المضيف. للحصول على الإصدار العام من أدوات Android SDK Platform، راجع ملاحظات إصدار SDK Platform Tools .
بايثون
يجب تثبيت بايثون على الجهاز المضيف. نوصي باستخدام توزيعة Python المجمعة لضمان دعم الإصدارات المتوافقة. للحصول على تفاصيل حول إصدارات Python والحزمة التي سيتم تثبيتها لإصدار معين، راجع ملاحظات إصدار Camera ITS للإصدار المقابل.
موبلي
بالنسبة لنظام التشغيل Android 12 والإصدارات الأحدث، يجب تثبيت إطار عمل اختبار Mobly. يتيح لك Mobly إعداد DUT والكمبيوتر اللوحي للرسم البياني في فئة its_base_test
. لتثبيت إطار اختبار Mobly، قم بتشغيل:
pip install mobly
إعداد البيئة
لإعداد بيئة الاختبار، قم بتشغيل:
cd CameraITS
source build/envsetup.sh
يتحقق هذا الأمر من تثبيت Python، ويقوم بإعداد متغير البيئة PYTHONPATH
، ويقوم بتشغيل اختبارات الوحدة على الوحدات النمطية utils/*.py
. إذا لم تتم طباعة أي أخطاء على الجهاز، فستكون البيئة جاهزة لإجراء اختبارات ITS.
إذا رأيت رسالة الخطأ libtinfo.so.6: no version information available (required by /bin/sh)
في وقت التشغيل، فقم بتشغيل الأمر التالي لإعادة تسمية الملف libtinfo.so.6
.
mv $ENV_DIRECTORY/lib/libtinfo.so.6 $ENV_DIRECTORY/lib/libtinfo.so.6.bak
إعداد المشهد
لإعداد المشاهد، نوصي باستخدام إعداد Camera ITS-in-a-box لسهولة التشغيل الآلي والموثوقية والكفاءة في الاختبار. تدعم منصات اختبار ITS-in-a-box جميع متطلبات الإضاءة والتوسيط وتغيير المخططات الخاصة بـ ITS. كما أن وجود ITS-in-a-box مطلوب أيضًا لاختبار ملحقات الكاميرا .
للاختبار اليدوي، تأكد مما يلي:
- DUT على حامل ثلاثي الأرجل
- يتم توجيه DUT إلى المشهد الصحيح لكل اختبار. (يوفر البرنامج النصي لاختبار ITS مطالبات لتغيير إعداد المشهد قبل بدء الاختبارات في مشهد جديد.)
- يتم توصيل DUT بالجهاز المضيف عبر USB.
- لا يتحرك DUT أثناء التشغيل التجريبي.
- يضاء المشهد بمصدر ضوء ثابت غير متقلب. (لا تستخدم ضوء الفلورسنت لأن ذلك يسبب وميضًا.)
يعرض البرنامج النصي لاختبار ITS مطالبة تطلب من المستخدم تغيير إعداد المشهد قبل بدء الاختبارات في مشهد جديد.
يجب ضبط اتجاه الهاتف بحيث تلتقط الكاميرا الصور بدون دوران. أسهل طريقة للتحقق من ذلك هي مشاهد الوجه في المشهد 2. تحتوي معظم الهواتف على الهاتف في اتجاه أفقي مع تدوير الهاتف عكس اتجاه عقارب الساعة بالنسبة للكاميرا الخلفية وتدويره في اتجاه عقارب الساعة بالنسبة للكاميرا الأمامية.
ملفات التكوين
باستخدام إطار عمل Mobly، يجب عليك إنشاء ملف تكوين config.yml
لتحديد قاعدة اختبار Mobly. فيما يلي أمثلة لحالات الاستخدام المختلفة.
ملف config.yml للمشاهد المعتمدة على الأجهزة اللوحية
فيما يلي مثال لملف config.yml
للمشاهد المستندة إلى الكمبيوتر اللوحي. بالنسبة للاختبار المعتمد على الأجهزة اللوحية، يجب أن تكون الكلمة الأساسية TABLET
موجودة في اسم سرير الاختبار. أثناء التهيئة، يقوم مشغل اختبار Mobly بتهيئة المعلمات الموجودة في الملف وتمريرها إلى الاختبارات الفردية.
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" # "True" or "False"; quotes needed
lighting_cntl: <controller-type> # "arduino" or "None"; quotes needed
lighting_ch: <controller-channel>
camera: 0
foldable_device: "False". # set "True" if testing foldable
scene: <scene-name> # if <scene-name> runs all scenes
لاستدعاء طبقة الاختبار، قم بتشغيل tools/run_all_tests.py
. إذا لم تكن هناك قيم سطر أوامر تحدد الكاميرات أو المشاهد، فسيتم تشغيل الاختبار باستخدام قيم ملف config.yml
. إذا كانت هناك قيم سطر أوامر للكاميرات أو المشاهد، فستتجاوز هذه القيم الموجودة في قسم TestParams
في ملف config.yml
. على سبيل المثال:
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
ملف config.yml للمشهد Sensor_fusion
فيما يلي مثال لملف config_yml
لاختبارات sensor_fusion
. بالنسبة لاختبار sensor_fusion
، يجب أن تكون الكلمة الأساسية SENSOR_FUSION
موجودة في اسم سرير الاختبار. يدعم Android 13 والإصدارات الأحدث وحدة تحكم Arduino لدمج المستشعرات فقط بسبب اختبار المعاينة وتثبيت الفيديو. يدعم Android 12 وحدات التحكم Arduino وCanakit.
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
rotator_ch: 1
camera: 0
لتشغيل اختبارات sensor_fusion
مع صندوق دمج المستشعر ، قم بتشغيل:
python tools/run_all_tests.py scenes=sensor_fusion
python tools/run_all_tests.py scenes=sensor_fusion camera=0
ملف config.yml الخاص بأسرّة الاختبار المتعددة
فيما يلي مثال لملف config.yml
يحتوي على وحدات اختبار متعددة وقاعدة اختبار للكمبيوتر اللوحي وقاعدة اختبار sensor_fusion
. يتم تحديد الاختبار الصحيح من خلال المشاهد التي تم اختبارها.
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
الاختبار اليدوي لملف config.yml
فيما يلي مثال لملف config.yml
للاختبار اليدوي. بدءًا من Android 14، يتم دعم الاختبار اليدوي لجميع الاختبارات باستثناء اختبارات scene_extensions
. بالنسبة للاختبار اليدوي، يجب أن تكون الكلمة الأساسية MANUAL
موجودة في اسم سرير الاختبار. وأيضًا، لا يمكن أن يتضمن قسم AndroidDevice
قسمًا تسلسليًا أو ملصقًا لجهاز لوحي.
TestBeds:
- Name: TEST_BED_MANUAL
Controllers:
AndroidDevice:
- serial: 8A9X0NS5Z
label: dut
TestParams:
debug_mode: "False"
camera: 0
scene: 1
إجراء اختبارات ITS
يصف هذا القسم كيفية تشغيل اختبارات ITS.
استدعاء الاختبارات
بعد إعداد الجهاز والجهاز المضيف (بما في ذلك البيئة) والمشهد الفعلي، قم بتشغيل اختبارات ITS باستخدام العملية التالية.
افتح تطبيق CTS Verifer. في قائمة الاختبارات، حدد Camera ITS Test .
من الجهاز المضيف، قم بتشغيل اختبارات ITS من دليل
CameraITS/
. على سبيل المثال، بالنسبة لجهاز مزود بكاميرات أمامية وخلفية، قم بتشغيل الأمر التالي:python tools/run_all_tests.py
يتكرر البرنامج النصي من خلال الكاميرات ومشاهد الاختبار بناءً على ملف
config.yml
. لتصحيح الأخطاء، نوصي بتشغيل أحد مشاهدscene2
مع اختبار واحد لتحقيق أسرع سرعة في التنفيذ.بالنسبة للاختبار اليدوي، قبل البدء في تشغيل مجموعة اختبارات ITS على كل مشهد، يلتقط البرنامج النصي صورة للمشهد الحالي، ويحفظها بتنسيق JPEG، ويطبع المسار إلى JPEG إلى وحدة التحكم، ويطلب من المستخدم تأكيد ما إذا كان الصورة على ما يرام. يتم تكرار حلقات الالتقاط والتأكيد حتى يؤكد المستخدم أن الصورة على ما يرام. فيما يلي الرسائل في هذا التدفق.
Preparing to run ITS on camera 0 Start running ITS on camera: 0 Press Enter after placing camera 0 to frame the test scene: scene1_1 The scene setup should be: A grey card covering at least the middle 30% of the scene Running vendor 3A on device Capture an image to check the test scene Capturing 1 frame with 1 format [yuv] Please check scene setup in /tmp/tmpwBOA7g/0/scene1_1.jpg Is the image okay for ITS scene1_1? (Y/N)
يقوم كل تشغيل للبرنامج النصي بطباعة سجل يعرض إما النجاح أو الفشل أو التخطي لكل اختبار لـ ITS، حيث يشير تخطي إلى أنه تم اجتياز الاختبار لأن الجهاز لم يعلن عن القدرة الأساسية التي يتم اختبارها. على سبيل المثال، إذا لم يعلن أحد الأجهزة من خلال واجهات الكاميرا أنه يدعم DNG، فسيتم تخطي الاختبارات المتعلقة بالتقاط ملف DNG ويتم احتسابها كنجاحات.
للإقرار بأن الاختبارات قد استوفت متطلبات الاختبار، انقر فوق زر علامة الاختيار الخضراء. يتحول إدخال اختبار Camera ITS في قائمة اختبارات CTS Verifier إلى اللون الأخضر ويشير إلى أن الهاتف قد اجتاز Camera ITS.
اختبار DUT الموازي
تدعم الأجهزة التي تعمل بنظام التشغيل Android 14 أو الإصدارات الأحدث اختبار DUT الموازي. يتيح لك ذلك اختبار DUTs بالتوازي مع منصات متعددة لتسريع الاختبار الشامل. على سبيل المثال، يتيح لك الاختبار المتوازي اختبار الكاميرا 0 في جهاز واحد والكاميرا 1 في جهاز آخر في نفس الوقت. يتم تجميع كافة الاختبارات الخاصة بجلسات الاختبار المتوازية في جلسة CTS Verifier على مرجع DUT. يجب عليك إجراء اختبار متوازي باستخدام التحكم في الإضاءة من Arduino، حيث أن التحكم اليدوي في الإضاءة غير مدعوم بالاختبار المتوازي. تأكد من وجود قناة مختلفة على نفس وحدة تحكم Arduino تتحكم في الإضاءة لكل جهاز.
ما يلي هو نموذج لملف config.yml
يحدد ثلاثة وحدات اختبار للتشغيل بالتوازي.
TestBeds:
- Name: TEST_BED_TABLET_SCENES_INDEX_0
Controllers:
AndroidDevice:
- serial: <device-id-0>
label: dut
- serial: <tablet-id-0>
label: tablet
TestParams:
brightness: 192
chart_distance: 22.0
debug_mode: "False"
lighting_cntl: "arduino"
lighting_ch: <controller-channel-0>
camera: 0
scene: <scene-name> # if <scene-name> left as-is runs all scenes
foldable_device: "False"
- Name: TEST_BED_TABLET_SCENES_INDEX_1
Controllers:
AndroidDevice:
- serial: <device-id-1>
label: dut
- serial: <tablet-id-1>
label: tablet
TestParams:
brightness: 192
chart_distance: 22.0
debug_mode: "False"
lighting_cntl: "arduino"
lighting_ch: <controller-channel-1>
camera: 1
scene: <scene-name> # if <scene-name> left as-is runs all scenes
foldable_device: "False"
# TEST_BED_SENSOR_FUSION represents testbed index 2
# Parallel sensor_fusion is currently unsupported due to Arduino requirements
- Name: TEST_BED_SENSOR_FUSION
# Test configuration for sensor_fusion
Controllers:
AndroidDevice:
- serial: <device-id>
label: dut
TestParams:
fps: 30
img_size: 640,480
test_length: 7
debug_mode: "False"
chart_distance: 25
rotator_cntl: "arduino"
rotator_ch: <controller-channel-2>
camera: <camera-id>
foldable_device: "False"
tablet_device: "False"
lighting_cntl: "None"
lighting_ch: <controller-channel>
scene: "sensor_fusion"
لتشغيل وحدات الاختبار بالتوازي، استخدم الأمر التالي:
for i in 0 1 2; do python3 tools/run_all_tests.py testbed_index=$i num_testbeds=3 & done; wait
نموذج الضوضاء DNG
يجب على الأجهزة التي تعلن عن القدرة على التقاط صور RAW أو DNG أن توفر نموذج ضوضاء في البيانات الوصفية لنتيجة الالتقاط لكل لقطة أولية. يجب أن يتم تضمين نموذج الضوضاء هذا في طبقة HAL الخاصة بالكاميرا لكل كاميرا (على سبيل المثال، الكاميرات الأمامية والخلفية) على الجهاز الذي يطالب بالدعم.
تنفيذ نموذج الضوضاء
لتنفيذ نموذج ضوضاء، اتبع هذه الخطوات لإنشاء نموذج ضوضاء وتضمين النموذج في الكاميرا HAL.
لإنشاء نموذج ضوضاء لكل كاميرا، قم بتشغيل البرنامج النصي
dng_noise_model.py
في دليلtools
. يؤدي هذا إلى إخراج مقتطف كود C. لمزيد من المعلومات حول كيفية إعداد الكاميرا وبيئة الالتقاط، راجع مستندDngNoiseModel.pdf
في دليلtools
.لتنفيذ نموذج الضوضاء للجهاز، قم بقص ولصق مقتطف التعليمات البرمجية C في الكاميرا HAL.
التحقق من صحة نموذج الضوضاء
يتحقق اختبار ITS الآلي من tests/scene1_1/test_dng_noise_model.py
من صحة نموذج الضوضاء عن طريق التحقق من صحة قيم الضوضاء الخاصة بتعريض اللقطة والكسب المقدمة في بيانات الكاميرا.