Camera Image Test Suite (ITS) هو إطار عمل لإجراء اختبارات على الصور التي تنتجها كاميرا Android. الهدف العام من كل اختبار في ITS هو ضبط الكاميرا بطريقة معيّنة، والتقاط صورة واحدة أو أكثر، وفحص الصور لمعرفة ما إذا كانت تحتوي على بيانات الصورة المتوقّعة. تتطلّب العديد من الاختبارات توجيه الكاميرا إلى لوحة أهداف معيّنة أو إضاءتها بكثافة معيّنة.
يقع ITS في أداة اختبار CTS Verifier ضمن
cts/apps/CameraITS.
يجب أن تجتاز الأجهزة اختبارات ITS التي تتوافق مع الميزات المتوافقة التي يعلن عنها إطار عمل الكاميرا للتطبيقات التابعة لجهات خارجية كمجموعة فرعية من CTS.
الإعداد
لإجراء اختبارات ITS، يجب إعداد ما يلي:
- جهاز قيد الاختبار (DUT)
- جهاز مضيف (مثل كمبيوتر مكتبي أو كمبيوتر محمول يعمل بنظام التشغيل Linux)
- مشهد تصوّره الكاميرا
إعداد الجهاز قيد الاختبار (DUT)
لإعداد جهاز قيد الاختبار، اتّبِع الخطوات التالية:
- وصِّل الجهاز قيد الاختبار بجهاز مضيف عبر USB.
- امنح الجهاز المضيف أذونات للوصول إلى الجهاز قيد الاختبار عبر ADB.
ثبِّت تطبيق CTS Verifier (
CtsVerifier.apk) على الجهاز. لمزيد من المعلومات، يُرجى الاطّلاع على مقالة استخدام CTS Verifier.extract root/out/host/linux-x86/cts-verfier/android-cts-verifier.zipcd android-cts-verifieradb install -r -g CtsVerifier.apkعلى الجهاز قيد الاختبار، شغِّل تطبيق الكاميرا التلقائي وأغلِق جميع النوافذ التي تظهر عند التشغيل لتجنُّب حدوث تداخل أثناء الاختبار.
إعداد الجهاز المضيف
يتطلّب ITS أن يكون الجهاز المضيف متصلاً بالجهاز قيد الاختبار عبر USB، وأن يكون قادرًا على استخدام ADB للتحكّم في الجهاز والتواصل معه، وأن يكون مثبَّتًا عليه البرنامج المطلوب.
لإعداد جهازك المضيف، تأكَّد من تثبيت البرنامج التالي.
أدوات منصة Android SDK
يجب تثبيت أدوات منصة Android SDK ويجب أن يكون ADB في مسار الملفات القابلة للتنفيذ للصدفة أو الوحدة الطرفية التي يتم تشغيلها على الجهاز المضيف. للاطّلاع على الإصدار العلني من أدوات منصة Android SDK، يُرجى مراجعة ملاحظات إصدار أدوات منصة SDK.
Python
يجب تثبيت Python على الجهاز المضيف. ننصحك باستخدام توزيعة Python مجمّعة لضمان التوافق مع الإصدارات المتوافقة. للاطّلاع على تفاصيل حول إصدارات Python والحِزم التي يجب تثبيتها لإصدار معيّن، يُرجى مراجعة ملاحظات إصدار Camera ITS للإصدار المقابل.
Mobly
بالنسبة إلى Android 12 والإصدارات الأحدث، ثبِّت إطار عمل اختبار Mobly. يتيح لك Mobly إعداد جهاز قيد الاختبار وجهاز لوحي لعرض اللوحات في فئة its_base_test. لتثبيت إطار عمل اختبار Mobly، شغِّل ما يلي:
pip install moblyإعداد البيئة
لإعداد بيئة الاختبار، شغِّل ما يلي:
cd CameraITSsource 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 طلبًا يطلب من المستخدم تغيير إعداد المشهد قبل بدء الاختبارات في مشهد جديد.
يجب ضبط اتجاه الهاتف بحيث تلتقط الكاميرا صورًا بدون تدوير. أسهل طريقة للتحقّق من ذلك هي استخدام مشاهد الوجه في المشهد 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.pypython tools/run_all_tests.py camera=1python tools/run_all_tests.py scenes=2,1,0python tools/run_all_tests.py camera=0 scenes=scene_telepython tools/run_all_tests.py camera=0.4 scenes=4,scene6_tele
مَعلمة chart_scaling
في Android 17 والإصدارات الأحدث، يتم تضمين المَعلمة chart_scaling في config.yml لـ TEST_BED_TABLET_SCENES. تعالج هذه المَعلمة مشاكل تحجيم الرسوم البيانية لأجهزة الكاميرا المقرّبة التي لها مجال رؤية أوسع، ما يمنع اقتصاص المشهد ويفرض التركيز المناسب للجهاز أثناء الاختبار.
القيم المتوافقة مع chart_scaling هي 1 أو 0.33 أو 0.5 أو 0.67، مع None كقيمة تلقائية. يتيح هذا النهج للأجهزة استخدام عامل تغيير حجم مثالي مصمّم خصيصًا لتلبية متطلباتها المحدّدة، ما يحافظ على الاختبار الوظيفي على جميع الأجهزة.
إذا تم ضبط chart_scaling على None، تحدّد الاختبارات تلقائيًا عامل تغيير الحجم باستخدام chart_scaling_logic. بخلاف ذلك، يتم استخدام القيمة المحدّدة في config.yml، أو يتم وضع علامة على خطأ إذا كان تغيير الحجم غير متاح.
في ما يلي نموذج لملف config.yml يتضمّن المَعلمة chart_scaling
TestBeds:
- Name: TEST_BED_TABLET_SCENES # Need 'tablet' in name for tablet scenes
# Use TEST_BED_MANUAL for manual testing and remove below lines:
# - serial <tablet_id>
# label: tablet
# Test configuration for scenes[0:4, 6]
Controllers:
AndroidDevice:
- serial: <device-id> # quotes needed if serial id entirely numeric
label: dut
- serial: <tablet-id> # quotes needed if serial id entirely numeric
label: tablet
TestParams:
brightness: 192
chart_distance: 22.0
debug_mode: "False" # quotes needed
lighting_cntl: <controller-type> # can be arduino or "None"
lighting_ch: <controller-channel>
camera: <camera-id>
scene: <scene-name> # if <scene-name> runs all scenes
foldable_device: "False" # "True" if testing foldable device
chart_scaling: "None" # use the values available for scene to be tested
resultstore_upload: "False" # "True" if results should be uploaded to ResultStore
مطلوب إجراء تعديلات على جانب الاختبار لتفعيل إمكانات تغيير حجم اللوحات في Camera ITS. إذا كان الاختبار الذي تستخدمه لا يتيح ذلك، يُرجى الإبلاغ عن خطأ.
في ما يلي نموذج لتغيير على جانب الاختبار يتضمّن المَعلمة chart_scaling.
# load chart for scene
its_session_utils.load_scene(
cam, props, self.scene, self.tablet, self.chart_distance,
chart_scaling=self.chart_scaling)
ملف 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_fusionpython tools/run_all_tests.py scenes=sensor_fusion camera=0python tools/run_all_tests.py scenes=scene_flash,feature_combinationpython 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
ملف config.yml لاختبار منصة Gen2
في ما يلي مثال على ملف config.yml لمنصة اختبار TEST_BED_GEN2.
تُستخدَم منصة الاختبار هذه لاختبارات scene_ip، التي تستخدِم منصة Gen2](/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
يوضّح المثال التالي مَعلمات منصة الاختبار عندما لا تكون منصة 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.ymlpython tools/run_all_tests.py camera=<camera-id> scenes=scene_ip
إجراء اختبارات ITS
يوضّح هذا القسم كيفية إجراء اختبارات ITS.
استدعاء الاختبارات
بعد إعداد الجهاز والجهاز المضيف (بما في ذلك البيئة) والمشهد الفعلي، شغِّل اختبارات ITS باستخدام العملية التالية.
افتح تطبيق CTS Verifier. في قائمة الاختبارات، انقر على اختبار Camera ITS. في Android 17 والإصدارات الأحدث، تظهر اختبارات
sensor_fusionوfeature_combinationفي نشاط إضافي باسم اختبار منصة دمج بيانات أجهزة الاستشعار في Camera 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.
اختبار أجهزة قيد الاختبار المتوازية
تتيح الأجهزة التي تعمل بنظام التشغيل Android 14 أو الإصدارات الأحدث اختبار أجهزة قيد الاختبار المتوازية. يتيح لك ذلك اختبار أجهزة قيد الاختبار بالتوازي باستخدام منصات متعددة لتسريع عملية الاختبار بشكل عام. على سبيل المثال، يتيح لك الاختبار المتوازي اختبار الكاميرا 0 في منصة واحدة والكاميرا 1 في منصة أخرى في الوقت نفسه. في Android 17 والإصدارات الأحدث، بما أنّ اختبارات Camera ITS مقسّمة إلى نشاطَين، يمكنك إجراء اختبارات sensor_fusion وfeature_combination على جهاز قيد الاختبار، وإجراء اختبارات أخرى على جهاز قيد اختبار آخر بالتوازي. يتم تجميع جميع الاختبارات لجلسات الاختبار المتوازي على جلسة 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إرسال نتائج الاختبارات المجمّعة
في Android 17 والإصدارات الأحدث، يمكنك إرسال نتائج اختبارات Camera ITS المجمّعة للموافقة على الإصدار. يتيح لك CTS Verifier اختبار مشاهد متعددة بالتزامن على أجهزة متعددة، وتجميع نتائج الاختبارات من تقارير CTS Verifier متعددة (من عمليات اختبار أو أجهزة مختلفة) في عملية إرسال واحدة وموحّدة.
عملية الإرسال
لإرسال نتائج Camera ITS المجمّعة للموافقة على الإصدار، اتّبِع الخطوات التالية:
- إعداد الأجهزة: اجمَع جهازَين أو ثلاثة أجهزة قيد الاختبار (DUT) لها جميعًا ملف مرجعي للإصدار نفسه تمامًا.
- تثبيت CTS Verifier: ثبِّت أحدث ملف APK لتطبيق CTS Verifier، الذي يمكن الحصول عليه من أداة استكشاف الإصدار المتوفّرة.
إجراء الاختبارات بالتوازي:
- ثبِّت أجهزة قيد الاختبار في منصات منفصلة.
- شغِّل مشاهد مختلفة من Camera ITS على كل جهاز بالتزامن.
- جمع التقارير: اسحَب تقرير CTS Verifier بعد كل عملية تشغيل. يشمل ذلك التقارير التي فشلت فيها المشاهد. أعِد إجراء المشاهد الفاشلة فقط في عمليات التشغيل اللاحقة.
إرسال التقارير: حمِّل تقارير CTS Verifier متعددة تم جمعها من جميع الأجهزة.
مراجعة النتائج: بعد تحميل التقارير، راجِع النتائج المجمّعة:
- يعرض قسم تحليل الاختبار قائمة كاملة بجميع المشاهد التي تم تنفيذها.
تظهر المشاهد التي لم يتم تنفيذها أو التي فشلت ضمن قسم فشلت.
الشكل 1: توثيق المشاهد التي لم يتم تنفيذها أو التي فشلت
تظهر المشاهد التي اجتازت ضمن قسم اجتازت مجمّعة.
الشكل 2: المشاهد المصنّفة على أنّها "اجتازت مجمّعة"
حالة الموافقة على الإصدار
تُمنح الموافقة على الإصدار بعد اكتمال جميع المشاهد المطلوبة بنجاح في التقارير المجمّعة.
نموذج الضوضاء بتنسيق DNG
يجب أن توفّر الأجهزة التي تعلن عن إمكانية التقاط صور بتنسيق RAW أو DNG نموذج ضوضاء في بيانات وصفية لنتائج التقاط كل صورة بتنسيق RAW. يجب تضمين نموذج الضوضاء هذا في Camera HAL لكل كاميرا (مثل الكاميرات الأمامية والخلفية) على الجهاز الذي يطلب الدعم.
تنفيذ نموذج الضوضاء
لتنفيذ نموذج ضوضاء، اتّبِع الخطوات التالية لإنشاء نموذج ضوضاء وتضمينه في Camera HAL.
لإنشاء نموذج ضوضاء لكل كاميرا، شغِّل النص البرمجي
dng_noise_model.pyفي الدليلtools. يؤدي ذلك إلى إخراج مقتطف الرمز C. لمزيد من المعلومات حول كيفية إعداد الكاميرا وبيئة الالتقاط، يُرجى الاطّلاع على مستندDngNoiseModel.pdfفي الدليلtools.لتنفيذ نموذج الضوضاء للجهاز، قُص مقتطف رمز C والصقه في Camera HAL.
التحقّق من صحة نموذج الضوضاء
يتحقّق اختبار ITS الآلي tests/scene1_1/test_dng_noise_model.py
من صحة نموذج الضوضاء من خلال التأكّد من أنّ قيم الضوضاء
لمدّة التعرّض للضوء والزيادة في الإضاءة المقدّمة في بيانات الكاميرا صحيحة.
الاختبارات التي اجتازت بشكل هامشي (حالة الاختبار PASS*)
في Android 17 والإصدارات الأحدث، تشير النتيجة "اجتازت بشكل هامشي" (PASS*) إلى أنّ الاختبار قد اجتاز، ولكنّ مقاييس الأداء قريبة جدًا من الحد الأدنى للاجتياز المحدّد مسبقًا. على الرغم من أنّ الاختبار يستوفي من الناحية الفنية معايير الاجتياز، فإنّ قربه من حد الفشل يشير إلى ضرورة إجراء فحص دقيق.
مزايا النتيجة "اجتازت بشكل هامشي"
تقدّم الحالة PASS* عدة مزايا:
نظام الإنذار المبكر: يحدّد الاختبارات التي على وشك الفشل، ما يسمح للفِرق بمعالجة المشاكل قبل أن تؤدي إلى حالات فشل صريحة.
التحسين الاستباقي: يشجّع الفِرق على تحسين الاختبارات والرمز اللذين يحققان أداءً في الحد الأدنى من النطاق المقبول، ما يؤدي إلى تحسين الاستقرار العام.
تحسين الجودة: يساعد في الحفاظ على مستوى أعلى من الجودة من خلال وضع علامة على المناطق التي قد تكون عُرضة لعمليات تراجع مستقبلية مع إجراء تغييرات طفيفة في الرمز.
تقليل وقت تصحيح الأخطاء: من خلال رصد الاختبارات التي تحمل الحالة
PASS*في وقت مبكر، يمكن تقليل الوقت والجهد المطلوبَين لتصحيح الأخطاء الكاملة في المستقبل بشكل كبير.
تفاصيل الحالة PASS*
تشمل الحالة PASS* ما يلي:
تحديد الحدود الدنيا: يتم تحديد حدود دنيا معيّنة للنتيجة "اجتازت بشكل هامشي" لكل اختبار ذي صلة في Camera ITS.
الرصد الآلي: يرصد نظام التشغيل الآلي للاختبارات الاختبارات ويصنّفها على أنّها
PASS*استنادًا إلى الحدود الدنيا المحدّدة.آلية التنبيه: تتلقّى الفِرق تنبيهات تلقائية لأي اختبارات تم وضع علامة عليها على أنّها
PASS*، ما يوجّهها إلى التحقيق في الاختبار المحدّد ومقاييسه.إعداد التقارير: يتم الإشارة بوضوح إلى حالات "اجتازت بشكل هامشي" في تقارير الاختبار ولوحات البيانات من أجل تحسين مستوى الرؤية على أنّها
PASS*في تقريرItsTestSummary، على غرارFail*للاختباراتnot_yet_mandated. يحافظ الاختبار على الحالة الخضراء، لأنّه يواصل الاجتياز ضمن الحدود الدنيا المحدّدة، وذلك لتجنُّب حدوث المزيد من الارتباك. تنطبق الحالةPASS*على فئة اختبار فقط، وليس على المشهد بأكمله. على سبيل المثال، يمكن اعتبار Scene_0 على أنّهPASSحتى إذا كانت test_jitter وtest_metadata تحملان الحالةPASS*.المراقبة: يتم جمع بيانات الأداء للاختبارات التي اجتازت بشكل هامشي على جهاز. يتيح ذلك مراقبة التحسينات المستقبلية للكاميرا التي تجريها الشركات المصنّعة للمعدات الأصلية إذا انتقلت هذه الاختبارات إلى الحالة
PASS.
في ما يلي مثال على نتائج الاختبارات التي تحمل الحالة PASS*:
INFO:root:Reporting camera 1 ITS results to CtsVerifier
INFO:root:ITS results to CtsVerifier: {'scene0': {'result': 'PASS', 'TEST_STATUS': [{'test': 'test_jitter', 'status': 'PASS*'}, {'test': 'test_metadata', **'status': 'PASS*'**}, {'test': 'test_request_capture_match', 'status': 'PASS'}, {'test': 'test_sensor_events', 'status': 'PASS'}, {'test': 'test_solid_color_test_pattern', 'status': 'PASS'}, {'test': 'test_test_patterns', 'status': 'SKIP'}, {'test': 'test_tonemap_curve', 'status': 'SKIP'}, {'test': 'test_unified_timestamps', 'status': 'PASS'}, {'test': 'test_vibration_restriction', 'status': 'PASS'}], 'mpc_metrics': [], 'performance_metrics': [], 'feature_query_proto': [], 'feature_query_proto_path': [], 'summary': '/tmp/CameraITS_zojk4sdr/cam_id_1/scene0/scene_test_summary.txt', 'start': 1754330630345, 'end': 1754330764534}, 'scene1_1': {'result': 'NOT_EXECUTED'}, 'scene1_2': {'result': 'NOT_EXECUTED'}, 'scene1_3': {'result': 'NOT_EXECUTED'}, 'scene2_a': {'result': 'NOT_EXECUTED'}, 'scene2_b': {'result': 'NOT_EXECUTED'}, 'scene2_c': {'result': 'NOT_EXECUTED'}, 'scene2_d': {'result': 'NOT_EXECUTED'}, 'scene2_e': {'result': 'NOT_EXECUTED'}, 'scene2_f': {'result': 'NOT_EXECUTED'}, 'scene2_g': {'result': 'NOT_EXECUTED'}, 'scene3': {'result': 'NOT_EXECUTED'}, 'scene4': {'result': 'NOT_EXECUTED'}, 'scene6': {'result': 'NOT_EXECUTED'}, 'scene7': {'result': 'NOT_EXECUTED'}, 'scene8': {'result': 'NOT_EXECUTED'}, 'scene9': {'result': 'NOT_EXECUTED'}, 'scene_extensions/scene_hdr': {'result': 'NOT_EXECUTED'}, 'scene_extensions/scene_low_light': {'result': 'NOT_EXECUTED'}, 'scene_tele/scene6_tele': {'result': 'NOT_EXECUTED'}, 'scene_tele/scene7_tele': {'result': 'NOT_EXECUTED'}, 'scene_video': {'result': 'NOT_EXECUTED'}, 'scene5': {'result': 'NOT_EXECUTED'}, 'sensor_fusion': {'result': 'NOT_EXECUTED'}, 'feature_combination': {'result': 'NOT_EXECUTED'}, 'scene_flash': {'result': 'NOT_EXECUTED'}, 'scene_ip': {'result': 'NOT_EXECUTED'}}
ننصح الشركاء بما يلي:
- مراقبة تنبيهات
PASS* - التحقيق في السبب الجذري للاختبارات التي تحمل الحالة
PASS* - تحسين الاختبارات والرمز المحدّدين على أنّهما
PASS*بشكل استباقي
تهدف الحالة PASS* إلى تعزيز قوة وموثوقية اختبارات Camera ITS، ما يؤدي إلى منتج مستقر وعالي الجودة.