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

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

שינוי מבנה הקוד ל-Python 3

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

משגר הבדיקות הראשי, 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 שתומכת בתרחישי בדיקה שדורשים כמה מכשירים עם הגדרות חומרה בהתאמה אישית. מערכת 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. העלאת סף הדרישה המינימלית של התכונה גורמת לזיהוי תכונות באיכות נמוכה ומשפיעה באופן שלילי על המדידות.

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

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