בגרסת Android 12 נכללים מספר שינויים ב-Camera ITS. בדף הזה מפורטים השינויים, שמחולקים לארבע קטגוריות רחבות:
שינוי מבנה הקוד ל-Python 3
בגלל הוצאת Python 2.7 משימוש בינואר 2020, כל בסיס הקוד של Camera ITS עבר שינוי מבנה ל-Python 3. ב-Android 12 נדרשות גרסאות Python וספריות מהסוגים הבאים:
- Python 3.7.9 או Python 3.7.10
- 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. אפשר להגדיר כמה סביבות בדיקה בקובץ התצורה הזה, למשל, סביבת בדיקה של טאבלט וסביבת בדיקה של מיזוג חיישנים. בקטע controller של כל סביבת בדיקה, אפשר לציין 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 או לגרסאות קודמות, אבל עם השינויים הבאים:
- כדי שהשם יהיה ברור יותר, לתיקייה של ארטיפקט הבדיקה
/tmp
מתווסףCameraITS_
לפני המחרוזת האקראית בת 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.
שם הבדיקה | רמת ה-API הראשונה | טענות |
---|---|---|
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.
שם הבדיקה | רמת ה-API הראשונה | טענות |
---|---|---|
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
פועלת במצלמות מוגבלות ב-Android 12.
scene1_2/test_yuv_plus_raw.py
הבדיקה test_yuv_plus_raw
מופעלת במצלמות פיזיות מוסתרות ב-Android 12.
scene2_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
.
בטבלה הבאה מפורטות הטענות לגבי test_aspect_ratio_and_crop.py
שתואמות לרמת מכשיר ולרמת API ראשונית נתונים.
ברמת המכשיר | רמת ה-API הראשונה | טענות |
---|---|---|
LIMITED | כל המדינות | יחס גובה-רוחב שדה הראייה לפורמטים 4:3, 16:9 ו-2:1 |
FULL | < 31 | יחס גובה-רוחב שדה הראייה לפורמטים 4:3, 16:9 ו-2:1 |
FULL | ≥ 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 התכונות הטובות ביותר, ואז מסתירה את 80% מהתמונה כדי למנוע אפקטים של תריס מתגלגל. הדרישה המינימלית היא 30 תכונות.
אם התכונות שנמצאו בשיטה הזו לא מספיקות, מערכת Android 12 מסתירה את אזור זיהוי התכונות ל-20% המרכזיים קודם, ומגבילה את מספר התכונות המקסימלי לפי שניים מדרישת התכונות המינימלית.
התמונה הבאה מציגה את ההבדל בין זיהוי התכונות ב-Android 11 לבין זיהוי התכונות ב-Android 12. העלאת סף הדרישה המינימלית של התכונה גורמת לזיהוי תכונות באיכות נמוכה ומשפיעה באופן שלילי על המדידות.
איור 2. ההבדל בזיהוי התכונות בין Android 11 לבין Android 12
בדיקות חדשות
scene0/test_solid_color_test_pattern.py
ב-Android 12 מופעלת בדיקה חדשה, test_solid_color_test_pattern
. הבדיקה הזו מופעלת לכל המצלמות והיא מתוארת בטבלה הבאה.
Scene | שם הבדיקה | רמת ה-API הראשונה | תיאור |
---|---|---|---|
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
. ההגדרה של דפוס הבדיקה היא לפי דפוס באייר של החיישן, ולכן צריך להגדיר את ערוצי הצבע לכל צבע כמו שמוצג בטבלה הבאה.
צבע | 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
.
מצלמה רמת ה-API הראשונה |
סוג המצלמה | הצבעים שצוינו |
---|---|---|
31 | Bayer | שחור, לבן, אדום, ירוק, כחול |
31 | מונו | שחור, לבן |
< 31 | Bayer/MONO | שחור |
בדיקות של כיתות ביצועים
scene2_c/test_camera_launch_perf_class.py
בודק שהפעלת המצלמה נמשכת פחות מ-500 ms גם במצלמה הקדמית הראשית וגם במצלמה האחורית הראשית בסצנת הפנים scene2_c.
scene2_c/test_jpeg_capture_perf_class.py
בודק שזמן האחזור של צילום JPEG ברזולוציה 1080p קצר משנייה אחת גם במצלמות הראשיות הקדמית והאחורית, עם סצנת הפנים scene2_c.