יש כמה שינויים במצלמה שכלולה בגרסת Android 12. הדף הזה מסכם את השינויים שמחולקים לארבע קטגוריות רחבות:
ארגון מחדש ב-Python 3
עקב ההוצאה משימוש של Python 2.7 בינואר 2020, כל בוצע ארגון מחדש של ה-codebase ל-Python 3. את הגרסאות הבאות של Python וגם ספריות נדרשות ב-Android 12:
- Python 3.7.9 או Python 3.7.10
- OpenCV 3.4.2
- מספרי 1.19.2
- Matplotlib 3.3.2
- Scipy 1.5.2
- pySeries 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 שתומכת במקרי בדיקה שמחייבים שימוש בכמה מכשירים עם הגדרות חומרה. המצלמה ITS משתמשת בתשתית הבדיקה של Mobly כדי להפעיל שליטה טובה יותר ורישום ביומן של הבדיקות.
המצלמה ITS משתמשת בתשתית הבדיקה של Mobly כדי לאפשר שליטה טובה יותר רישום ביומן של הבדיקות. Mobly היא מסגרת בדיקה מבוססת Python שתומכת בבדיקות במקרים שבהם יש צורך במספר מכשירים עם הגדרות חומרה מותאמות אישית. לקבלת מידע נוסף מידע על Mobly, ראו google/mobly.
קובצי config.yml
עם Mobly framework, אפשר להגדיר מכשיר בבדיקה (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
כדי להריץ בדיקות היתוך של חיישנים עם sensor fusion בדיקת היתוך, להשתמש ב:
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, פריטי מידע שנוצרו בתהליך פיתוח (Artifact) של המצלמה הם מאוחסנים בדומה ל-Android מגרסה 11 ומטה, אבל עם השינויים הבאים:
- בספרייה
/tmp
של פריט המידע שנוצר בתהליך הפיתוח (Artifact) מצורףCameraITS_
מחרוזת אקראית באורך 8 תווים לשם הבהרה. - הפלט והשגיאות של הבדיקה נשמרים ב-
test_log.DEBUG
לכל בדיקה במקום זאת שלtest_name_stdout.txt
ו-test_name_stderr.txt
. - סיכומי ה-Logcat של ה-DUT והטאבלטים מכל בדיקה נפרדים מאוחסנים
ספריית
/tmp/CameraITS_########
היא דרך פשוטה יותר ניפוי באגים כי כל המידע שנדרש לניפוי באגים בבעיות 3A נרשם.
בדיקת השינויים
ב-Android 12, סצנות של טאבלט קובצי PNG במקום קובצי PDF. שימוש בקובצי PNG מאפשר לדגמים רבים יותר של טאבלטים תציג את הסצנות בצורה נכונה.
segment0/test_jitter.py
הבדיקה של test_jitter
מתבצעת על
מצלמות נסתרות ב-Android 12.
segment1_1/test_black_white.py
ב-Android 12, ב-test_black_white
יש
הפונקציונליות של test_black_white
וגם
test_channel_saturation
.
הטבלה הבאה מתארת את שתי הבדיקות הנפרדות ב-Android 11.
שם הבדיקה | רמת ה-API הראשונה | תביעות |
---|---|---|
segment1_1/test_black_white.py | הכל | חשיפה קצרה, ערכי RGB עם רווח נמוך ~[0, 0, 0] חשיפה ארוכה, ערכי RGB בעוצמה גבוהה [255, 255, 255] |
segment1_1/test_channel_saturation.py | 29 | ירידה בסובלנות לגבי [255, 255, 255] הבדלים כדי למנוע את גוון הצבע תמונות לבנות. |
הטבלה הבאה מתארת את בדיקת המיזוג, landscape1_1/test_black_white.py, ב-Android 12.
שם הבדיקה | רמת ה-API הראשונה | תביעות |
---|---|---|
segment1_1/test_black_white.py | הכל | חשיפה קצרה, ערכי RGB עם רווח נמוך ~[0, 0, 0] חשיפה ארוכה, ערכי RGB בעוצמה גבוהה [255, 255, 255] והפחתה יותר מדי סובלנות בין ערכים, כדי לבטל את גוון הצבע בתמונות לבנות. |
segment1_1/test_burst_sameness_manual.py
הבדיקה של test_burst_sameness_manual
מתבצעת על
מצלמות נסתרות ב-Android 12.
segment1_2/test_tonemap_sequence.py
הבדיקה של test_tonemap_sequence
פועלת ב-LIMITED מצלמות ב-Android
12.
segment1_2/test_yuv_plus_raw.py
הבדיקה של test_yuv_plus_raw
מתבצעת על
מצלמות נסתרות ב-Android 12.
segment2_a/test_format_combos.py
הבדיקה של test_format_combos
פועלת ב-LIMITED מצלמות ב-Android
12.
segment3/test_flip_mirror.py
הבדיקה של test_flip_mirror
פועלת ב-LIMITED מצלמות ב-Android
12.
segment4/test_aspect_ratio_and_crop.py
איתור מעגלים ב-scene4/test_aspect_ratio_and_crop.py
חודש מחדש ב-
Android 12.
בגרסאות קודמות של Android נעשה שימוש בשיטה שנועדה למצוא קווי מתאר של ילדים (העיגול) בתוך קווי מתאר ההורה (הריבוע) עם מסננים לציון גודל צבע. ב-Android 12 נעשה שימוש בשיטה שכוללת את כל המתארים ולאחר מכן לסנן את התוצאות באמצעות מציאת התכונות EClish. כדי לסנן מעגלים מזיקים במסך, נדרש שטח קווי מינימלי, וקווי המתאר של העיגול חייבים להיות שחורים.
קווי המתאר והקריטריונים לבחירה שלהם מוצגים בתמונה הבאה.
איור 1. שרטוט רעיוני של קווי מתאר וקריטריונים לבחירה
השיטה של Android 12 פשוטה יותר, והיא פותרת את הבעיה את הבעיה בחיתוך של תיבה תוחמת (bounding box) בחלק מהטאבלטים. כל המעגל המועמדים נרשמים ביומן למטרות ניפוי באגים.
בגרסת Android 12, בדיקת החיתוך רצה עבור FULL
ו-LEVEL3
מכשירים. בגרסאות Android 11 ומטה מדלגים על החיתוך
לבדוק טענות נכונות (assertions) ב-FULL
מכשירים.
הטבלה הבאה מפרטת את הטענות נכונות (assertions) עבור
test_aspect_ratio_and_crop.py
שתואמים לרמת מכשיר נתונה וגם
ברמת ה-API הראשונה.
ברמת המכשיר | רמת ה-API הראשונה | תביעות |
---|---|---|
מוגבלת | הכל | יחס גובה-רוחב FoV לפורמטים 4:3, 16:9 ו-2:1 |
FULL | < 31 | יחס גובה-רוחב FoV לפורמטים 4:3, 16:9 ו-2:1 |
FULL | ≥ 31 | חיתוך יחס גובה-רוחב FoV לפורמטים 4:3, 16:9 ו-2:1 |
רמה3 | הכל | חיתוך יחס גובה-רוחב FoV לפורמטים 4:3, 16:9 ו-2:1 |
segment4/test_multi_camera_layment.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
Sen_fusion/test_sensor_fusion.py
ב-Android 12, שיטה לזיהוי תכונות תמונות מתווספות לבדיקת היתוך של החיישן.
בגרסאות שקודמות ל- Android 12, כל משמש למציאת 240 התכונות הטובות ביותר שעברו אנונימיזציה למרכז של 20% כדי להימנע אפקטים של תריס נגלל, עם 30 תכונות לפחות.
אם התכונות שנמצאו באמצעות השיטה הזו לא מספיקות, Android 12 מסתיר את המסוות אזור זיהוי התכונות למרכז ב-20% תחילה, ומגביל את מספר התכונות המקסימלי פי שניים עד פי 2 מהדרישה המינימלית של התכונה.
בתמונה הבאה מוצג ההבדל בין Android 11 וזיהוי תכונות ב-Android 12. העלאת המינימום הסף של דרישת התכונה יוביל לזיהוי של תכונות באיכות נמוכה ומשפיעה לרעה על המדידות.
איור 2. הבדלים בזיהוי התכונות בין Android 11 ו-Android 12
בדיקות חדשות
segment0/test_solid_color_test_pattern.py
בדיקה חדשה, test_solid_color_test_pattern
, מופעלת ב-Android
12. הבדיקה הזו מופעלת בכל המצלמות
שמתוארים בטבלה הבאה.
סצנה | שם הבדיקה | רמת ה-API הראשונה | תיאור |
---|---|---|---|
0 | test_solid_color_test_pattern | 31 | אישור פלט תמונה בצבע אחיד ויכולת תכנות של צבעי תמונה. |
כדי לתמוך במצב הפרטיות של המצלמה, צריך להפעיל תבניות בדיקה בצבע אחיד.
הבדיקה test_solid_color_test_pattern
מאשרת פלט תמונה בצבע אחיד YUV
עם הצבע שהוגדר על ידי התבנית שנבחרה ושינויים בצבע התמונה
בהתאם למפרט.
פרמטרים
cameraPrivacyModeSupport
: קובעת אם המצלמה תומכת במצב פרטיות.android.sensor.testPatternMode
: מגדיר את מצב דפוס הבדיקה. בבדיקה הזו נעשה שימוש ב-SOLID_COLOR
.android.sensor.testPatternData
: הגדרת ערכי דפוס הבדיקה R, G, Gb, G למצב דפוס הבדיקה.
לתיאור דפוס בדיקת הצבע האחיד:
SENSOR_TEST_PATTERN_MODE_SOLID_COLOR
שיטה
הפריימים של YUV מתועדים עבור הפרמטרים שהוגדרו ותוכן התמונה
מאומת. דפוס הבדיקה נוצר ישירות מחיישן התמונה.
כך שלא נדרשת סצנה מסוימת. אם PER_FRAME_CONTROL
הוא
המערכת מתעדת מסגרת אחת של YUV לכל הגדרה שנבדקה. אם המיקום
אין תמיכה ב-PER_FRAME_CONTROL
. ארבעה פריימים מצולמים רק עם
הפריים האחרון נותח כדי למקסם את כיסוי הבדיקה ב-LIMITED
מצלמות.
צילומי YUV מוגדרים לרוויה מלאה של BLACK
, WHITE
, RED
, GREEN
ו-
BLUE
דפוסי בדיקה. כי הגדרת דפוס הבדיקה היא בהתאם לחיישן Bayer
יש להגדיר את ערוצי הצבעים לכל צבע כפי שמוצג
מהטבלה הבאה.
צבע | testTemplateData (RGGB) |
---|---|
שחור |
(0, 0, 0, 0)
|
לבן |
(1, 1, 1, 1)
|
RED |
(1, 0, 0, 0)
|
ירוק |
(0, 1, 1, 0)
|
כחול |
(0, 0, 0, 1)
|
טבלת טענות נכוֹנוּת (assertion)
הטבלה הבאה מתארת את טענות הנכונות (assertions) של הבדיקה עבור
test_solid_color_test_pattern.py
מצלמה רמת ה-API הראשונה |
סוג המצלמה | צבעים מוצהרים |
---|---|---|
31 | באייר | שחור, WHITE, אדום, ירוק, כחול |
31 | מונו | שחור, לבן |
< 31 | באייר/MONO | שחור |
בדיקות של שיעורי ביצועים
segment2_c/test_camera_launch_perf_class.py
מאמתת הפעלה של המצלמה תוך פחות מ-500 אלפיות השנייה עבור המצלמה הראשית הקדמית וגם האחורית עם סצנת הפנים2_c.
segment2_c/test_jpeg_capture_perf_class.py
מאמתת שזמן האחזור לצילום בפורמט JPEG ב-1080p הוא פחות משנייה אחת בשני הכיוונים והמצלמות הראשיות האחוריות עם סצנת הפנים2_c.