נתוני הגרסה של חבילת Android 12 לבדיקת תמונות במצלמה

יש כמה שינויים במצלמה שכלולה בגרסת Android 12. הדף הזה מסכם את השינויים שמחולקים לארבע קטגוריות רחבות:

ארגון מחדש ב-Python 3

עקב ההוצאה משימוש של Python 2.7 בינואר 2020, כל בוצע ארגון מחדש של ה-codebase ל-Python 3. את הגרסאות הבאות של Python וגם ספריות נדרשות ב-Android 12:

מרכז האפליקציות הראשי לבדיקה, tools/run_all_tests.py, נשאר זהה לגרסאות Android מגרסה 11 ומטה, שעבר ארגון מחדש בהתאם ל-Python 3.

כל הבדיקות הנפרדות מסודרות מחדש ונעזרות בסוג ההגדרה החדש של הבדיקה, כפי שהוגדר ב- tests/its_base_test.py רוב השמות והפונקציות של הבדיקות נשארים ללא שינוי. ב-Android 12, כל הבדיקות הנפרדות טוענות עכשיו את סצנות. בזמן הטעינה של הסצנה בכל בדיקה היא מאפשרת להאריך את זמן הבדיקה הכולל ולאפשר ניפוי באגים בבדיקות ספציפיות.

למידע נוסף על שינויים ספציפיים בבדיקה, ראו בדיקת שינויים.

המודולים הבאים של Python עוברים ארגון מחדש עם שינוי שם:

  • pymodules/its/caps.pyutils/camera_properties_utils.py
  • pymodules/its/cv2image.pyutils/opencv_processing_utils.py
  • pymodules/its/device.pyutils/its_session_utils.py
  • pymodules/its/error.pyutils/error_util.py
  • pymodules/its/image.pyutils/image_processing_utils.py
  • pymodules/its/objects.pyutils/capture_request_utils.py
  • pymodules/its/target.pyutils/target_exposure_utils.py
  • tools/hw.pyutils/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. העלאת המינימום הסף של דרישת התכונה יוביל לזיהוי של תכונות באיכות נמוכה ומשפיעה לרעה על המדידות.

הבדל בזיהוי התכונות בין Android 11
ו-Android 12
זיהוי תכונת Sen_fusion

איור 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.