حزمة اختبار صور الكاميرا (ITS) هي إطار عمل لتنفيذ اختبارات على الصور التي تنتجها كاميرا Android. الهدف العام من كل اختبار في مجموعة اختبارات توافق الصور هو ضبط الكاميرا بطريقة معيّنة، والتقاط صورة واحدة أو أكثر، وفحص الصور لمعرفة ما إذا كانت تحتوي على بيانات الصور المتوقّعة. تتطلّب العديد من الاختبارات توجيه الكاميرا نحو مخطط استهداف محدّد أو إضاءته بشدّة معيّنة.
يمكن العثور على ITS في حزمة اختبار CTS Verifier في
cts/apps/CameraITS
.
يجب أن تجتاز الأجهزة اختبارات ITS المتوافقة مع الميزات المتاحة التي يعلن عنها إطار عمل الكاميرا للتطبيقات التابعة لجهات خارجية كمجموعة فرعية من CTS.
ضبط إعدادات الميزة
يجب إعداد ما يلي لتنفيذ اختبارات ITS:
- جهاز قيد الاختبار
- جهاز مضيف (على سبيل المثال، كمبيوتر مكتبي أو كمبيوتر محمول يعمل بنظام التشغيل Linux)
- مشهد تصوّره الكاميرا
إعداد الجهاز الخاضع للاختبار
لإعداد وحدة اختبار الجهاز (DUT)، اتّبِع الخطوات التالية:
- وصِّل الجهاز قيد الاختبار بجهاز مضيف عبر USB.
- امنح المضيف أذونات للوصول إلى الجهاز الخاضع للاختبار عبر ADB.
ثبِّت تطبيق CTS Verifier (
CtsVerifier.apk
) على الجهاز. لمزيد من المعلومات، اطّلِع على استخدام CTS Verifier.extract root/out/host/linux-x86/cts-verfier/android-cts-verifier.zip
cd android-cts-verifier
adb install -r -g CtsVerifier.apk
على الجهاز قيد الاختبار، شغِّل تطبيق الكاميرا التلقائي وأغلِق جميع النوافذ التي تظهر عند التشغيل لتجنُّب حدوث تداخل أثناء الاختبار.
إعداد المضيف
تتطلّب أداة ITS أن يكون الجهاز المضيف متصلاً بالجهاز الخاضع للاختبار من خلال منفذ USB، وأن يكون قادرًا على استخدام أداة تصحيح أخطاء Android (ADB) للتحكّم في الجهاز والتواصل معه، وأن يكون مثبَّتًا عليه البرنامج المطلوب.
لإعداد الجهاز المضيف، تأكَّد من تثبيت البرامج التالية.
أدوات منصة حزمة تطوير البرامج (SDK) لنظام التشغيل Android
يجب تثبيت أدوات منصة Android SDK ويجب أن يكون ADB في مسار التنفيذ الخاص بالصدفة أو الوحدة الطرفية التي تعمل على الجهاز المضيف. للاطّلاع على الإصدار العلني من "أدوات منصة حزمة تطوير البرامج (SDK) لنظام التشغيل Android"، راجِع ملاحظات إصدار "أدوات منصة حزمة تطوير البرامج (SDK)".
Python
يجب تثبيت Python على الجهاز المضيف. ننصحك باستخدام حزمة توزيع Python لضمان توفّر إصدارات متوافقة. للحصول على تفاصيل حول إصدارات Python والحِزم التي يجب تثبيتها لإصدار معيّن، راجِع ملاحظات إصدار Camera ITS للإصدار المعنيّ.
Mobly
في الإصدار 12 من نظام التشغيل Android والإصدارات الأحدث، يجب تثبيت إطار اختبار Mobly. يتيح لك تطبيق Mobly إعداد جهاز DUT وجهاز لوحي لعرض الرسوم البيانية في الصف its_base_test
. لتثبيت إطار عمل اختبار Mobly، شغِّل الأمر التالي:
pip install mobly
إعداد بيئة الاختبار
لإعداد بيئة الاختبار، نفِّذ ما يلي:
cd CameraITS
source build/envsetup.sh
يتحقّق هذا الأمر من تثبيت Python، ويضبط متغيّر البيئة PYTHONPATH
، ويُشغّل اختبارات الوحدات على وحدات utils/*.py
. إذا لم يتم عرض أي أخطاء في الوحدة الطرفية، تكون البيئة جاهزة لتشغيل اختبارات ITS.
إعداد المشهد
لإعداد المشاهد، ننصح باستخدام إعداد Camera ITS-in-a-box لتسهيل عملية التشغيل الآلي والموثوقية والكفاءة في الاختبار. تتوافق منصات اختبار ITS-in-a-box مع جميع متطلبات الإضاءة والتوسيط وتغيير الرسوم البيانية الخاصة بنظام ITS. بالإضافة إلى ذلك، يجب توفّر ITS-in-a-box لإجراء اختبارات إضافات الكاميرا.
بالنسبة إلى الاختبار اليدوي، احرِص على ما يلي:
- الجهاز قيد الاختبار موضوع على حامل ثلاثي القوائم
- يتم توجيه الجهاز قيد الاختبار إلى المشهد الصحيح لكل اختبار. (تقدّم نصوص اختبار ITS مطالبات لتغيير إعداد المشهد قبل بدء الاختبارات في مشهد جديد).
- يجب أن يكون الجهاز قيد الاختبار متصلاً بالجهاز المضيف عبر USB.
- لا يتحرّك الجهاز قيد الاختبار أثناء تشغيل الاختبار.
- يجب أن يكون المشهد مضاءً بمصدر ضوء ثابت وغير متذبذب. (لا تستخدِم مصباحًا فلورسنتًا لأنّ ذلك يؤدي إلى حدوث وميض.)
يعرض نص اختبار ITS طلبًا من المستخدم بتغيير إعداد المشهد قبل بدء الاختبارات في مشهد جديد.
يجب ضبط اتجاه الهاتف بحيث تلتقط الكاميرا الصور بدون تدوير. أسهل طريقة للتحقّق من ذلك هي استخدام مشاهد الوجه في scene2. في معظم الهواتف، يكون الهاتف في الوضع الأفقي مع تدويره عكس اتجاه عقارب الساعة للكاميرا الخلفية، وتدويره في اتجاه عقارب الساعة للكاميرا الأمامية.
ملفات الإعداد
باستخدام إطار عمل 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=0 scenes=scene_tele
python tools/run_all_tests.py camera=0.4 scenes=4,scene6_tele
ملف sensor_fusion scene config.yml
في ما يلي مثال على ملف 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
python tools/run_all_tests.py scenes=scene_flash,feature_combination
python tools/run_all_tests.py scenes=checkerboard camera=1
ملف 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
ملف Gen2 rig testing config.yml
في ما يلي مثال على ملف config.yml
لمنصة اختبار TEST_BED_GEN2
.
يتم استخدام منصة الاختبار هذه لإجراء اختبارات scene_ip
التي تستخدم
منصة اختبار من الجيل الثاني](/docs/compatibility/cts/camera-its-box-gen2).
يعرض المثال التالي مَعلمات منصة الاختبار عندما يكون جهاز Gen2 متاحًا ولم يتم تخطّي اختبارات scene_ip
.
Testbeds
- Name: TEST_BED_GEN2
# Test configuration for scene_ip/test_default_jca_ip.py
Controllers:
AndroidDevice:
- serial: <device-id> # quotes needed if serial id entirely numeric
label: dut
TestParams:
debug_mode: "False" # quotes are needed here
chart_distance: 30
rotator_cntl: gen2_rotator # gen2 rig specific. "None" if gen2 rig not available
rotator_ch: 0
camera: <camera-id>
foldable_device: "False" # "True" if testing foldable device
tablet_device: "False" # "True" if testing tablet device
lighting_cntl: gen2_lights # gen2 rig specific. "None" if gen2 rig not available
lighting_ch: 1
scene: scene_ip
يعرض المثال التالي مَعلمات Testbed عندما لا يتوفّر جهاز Gen2 ويتم تخطّي اختبارات scene_ip
.
Testbeds
- Name: TEST_BED_GEN2
# Test configuration for scene_ip/test_default_jca_ip.py
Controllers:
AndroidDevice:
- serial: <device-id> # quotes needed if serial id entirely numeric
label: dut
TestParams:
debug_mode: "False" # quotes are needed here
chart_distance: 30
rotator_cntl: "None" # gen2 rig specific. "None" if gen2 rig not available
rotator_ch: <controller-channel>
camera: <camera-id>
foldable_device: "False" # "True" if testing foldable device
tablet_device: "False" # "True" if testing tablet device
lighting_cntl: "None" # gen2 rig specific. "None" if gen2 rig not available
lighting_ch: <controller-channel>
scene: scene_ip
لتنفيذ اختبار scene_ip، استخدِم أحد الأوامر التالية:
python tests/scene_ip/test_default_jca_ip.py -c config.yml
python tools/run_all_tests.py camera=<camera-id> scenes=scene_ip
تشغيل اختبارات ITS
يوضّح هذا القسم كيفية إجراء اختبارات ITS.
استدعاء الاختبارات
بعد إعداد الجهاز والجهاز المضيف (بما في ذلك البيئة) والمشهد الفعلي، شغِّل اختبارات ITS باتّباع الخطوات التالية.
افتح تطبيق CTS Verifier. في قائمة الاختبارات، اختَر اختبار ITS للكاميرا.
من الجهاز المضيف، شغِّل اختبارات 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)
يعرض كل تشغيل للبرنامج النصي سجلاً يعرض إما
PASS
أوFAIL
أوFAIL*
أوSKIP
لكل اختبار من اختبارات ITS. يشيرFAIL*
إلى تعذُّر إجراء الاختبار، ولكن بما أنّ الاختبار ليس إلزاميًا بعد، سيتم تسجيله على أنّهPASS
في CtsVerifier. يشيرSKIP
إلى أنّ الاختبار قد اجتاز لأنّ الجهاز لم يعلن عن الإمكانية الأساسية التي تم اختبارها. على سبيل المثال، إذا لم يعلن جهاز من خلال واجهات الكاميرا أنّه يتوافق مع DNG، سيتم تخطّي الاختبارات ذات الصلة بتسجيل ملفات DNG وسيتم احتسابها على أنّهاPASS
.للتأكيد على أنّ الاختبارات استوفت متطلبات الاختبار، انقر على زر علامة الاختيار الخضراء. يصبح إدخال اختبار Camera ITS في قائمة اختبارات CTS Verifier أخضر اللون، ما يشير إلى أنّ الهاتف اجتاز اختبار Camera ITS.
اختبار أجهزة قيد الاختبار بشكلٍ متوازٍ
تتيح الأجهزة التي تعمل بالإصدار 14 من نظام التشغيل Android أو الإصدارات الأحدث إجراء اختبارات متوازية على الأجهزة الخاضعة للاختبار. يتيح لك ذلك اختبار الأجهزة قيد الاختبار بشكل متوازٍ باستخدام منصات اختبار متعددة لتسريع عملية الاختبار بشكل عام. على سبيل المثال، يتيح لك الاختبار المتوازي اختبار الكاميرا 0 في جهاز والكاميرا 1 في جهاز آخر في الوقت نفسه. يتم تجميع جميع الاختبارات لجلسات الاختبار المتزامن في جلسة CTS Verifier على الجهاز المرجعي. يجب إجراء اختبارات متوازية باستخدام أداة التحكّم في الإضاءة من 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 نموذجًا للتشويش في البيانات الوصفية لنتائج التقاط كل صورة بتنسيق RAW. يجب تضمين نموذج التشويش هذا في طبقة تجريد الأجهزة (HAL) الخاصة بالكاميرا لكل كاميرا (على سبيل المثال، الكاميرا الأمامية والخلفية) على الجهاز الذي يتيح هذه الميزة.
تنفيذ نموذج الضوضاء
لتنفيذ نموذج تشويش، اتّبِع الخطوات التالية لإنشاء نموذج تشويش وتضمينه في طبقة تجريد الأجهزة (HAL) الخاصة بالكاميرا.
لإنشاء نموذج ضوضاء لكل كاميرا، شغِّل النص البرمجي
dng_noise_model.py
في الدليلtools
. ينتج عن ذلك مقتطف رمز C. لمزيد من المعلومات حول كيفية إعداد الكاميرا والتقاط البيئة المحيطة، يُرجى الاطّلاع على مستندDngNoiseModel.pdf
في دليلtools
.لتنفيذ نموذج الضوضاء للجهاز، انسخ مقتطف رمز C والصقه في طبقة تجريد الأجهزة (HAL) الخاصة بالكاميرا.
التحقّق من صحة نموذج الضوضاء
يتحقّق اختبار tests/scene1_1/test_dng_noise_model.py
الآلي لنظام النقل الذكي من صحة نموذج الضوضاء من خلال التأكّد من أنّ قيم الضوضاء
لتعرُّض اللقطة والزيادة المقدَّمة في بيانات الكاميرا صحيحة.