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

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

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

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

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

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

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