בגרסת Android 12 נכללים מספר שינויים ב-Camera ITS. בדף הזה מופיע סיכום של השינויים, שמחולקים לארבע קטגוריות רחבות:
שינוי מבנה הקוד ל-Python 3
בגלל הוצאת Python 2.7 משימוש בינואר 2020, כל בסיס הקוד של Camera ITS עבר רפקטורינג ל-Python 3. ב-Android 12 נדרשות גרסאות Python וספריות 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.pypymodules/its/cv2image.py←utils/opencv_processing_utils.pypymodules/its/device.py→utils/its_session_utils.pypymodules/its/error.py→utils/error_util.pypymodules/its/image.py→utils/image_processing_utils.pypymodules/its/objects.py→utils/capture_request_utils.pypymodules/its/target.py→utils/target_exposure_utils.pytools/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 או לגרסאות קודמות, אבל עם השינויים הבאים:
- כדי שהשם יהיה ברור יותר, הקידומת
CameraITS_מתווספת לספרייה של ארטיפקט הבדיקה/tmpלפני המחרוזת האקראית בת 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 התכונות הטובות ביותר, ואז מסתירה את 20% האמצעיים כדי למנוע אפקטים של תריס מתגלגל. הדרישה המינימלית היא 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)
|
| WHITE |
(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.