הערות גרסה של Android 12 Camera Image Test Suite

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

Refactor לפייתון 3

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

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

כל הבדיקות הבודדות משוחזרות ומשתמשות במחלקת הגדרת הבדיקה החדשה שהוגדרה ב- tests/its_base_test.py . רוב שמות הבדיקות והפונקציונליות נשארים זהים. באנדרואיד 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 היא מסגרת בדיקה מבוססת Python התומכת במקרי בדיקה הדורשים התקנים מרובים עם הגדרות חומרה מותאמות אישית. מצלמה ITS משתמשת בתשתית הבדיקה של Mobly כדי לאפשר שליטה ורישום טוב יותר של הבדיקות.

מצלמה ITS משתמשת בתשתית הבדיקה של Mobly כדי לאפשר שליטה ורישום טוב יותר של הבדיקות. Mobly היא מסגרת בדיקה מבוססת Python התומכת במקרי בדיקה הדורשים התקנים מרובים עם הגדרות חומרה מותאמות אישית. למידע נוסף על Mobly, ראה google/mobly .

קבצי config.yml

עם המסגרת של Mobly, אתה יכול להגדיר מכשיר בבדיקה (DUT) וטאבלט תרשים במחלקה its_base_test . קובץ config.yml (YAML) משמש ליצירת ערכת בדיקה של Mobly. ניתן להגדיר ערכות בדיקה מרובות בתוך קובץ התצורה הזה, למשל, טאבלט ומשטח בדיקה של היתוך חיישנים. בתוך מדור הבקר של כל מבחן, אתה יכול לציין device_ids כדי לזהות את מכשירי האנדרואיד המתאימים לרץ המבחן. בנוסף למזהי המכשירים, פרמטרים נוספים כגון 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 בשורת הפקודה באמצעות פקודות דומות לאנדרואיד 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 . ערכת הבדיקה הנכונה נקבעת על פי הסצנות הנבדקות. אנדרואיד 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

בדיקה ידנית

בדיקה ידנית ממשיכה להיות נתמכת באנדרואיד 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

בדיקת חפצים

באנדרואיד 12, חפצי בדיקה עבור מצלמה ITS מאוחסנים בדומה לאנדרואיד 11 ומטה, אך עם השינויים הבאים:

  • ספריית חפץ הבדיקה /tmp כוללת CameraITS_ לפני המחרוזת האקראית בת 8 התווים לצורך הבהירות.
  • פלט בדיקה ושגיאות מאוחסנים ב- test_log.DEBUG עבור כל בדיקה במקום test_name_stdout.txt ו- test_name_stderr.txt .
  • יומני ה-DUT והטאבלט מכל בדיקה בודדת מאוחסנים בספריית /tmp/CameraITS_######## מה שמפשט את איתור הבאגים מכיוון שכל המידע הדרוש לאיתור באגים 3A מתועד.

שינויים בבדיקה

באנדרואיד 12 סצנות הטאבלט הן קבצי PNG ולא קבצי PDF. השימוש בקובצי PNG מאפשר ליותר דגמי טאבלטים להציג את הסצנות כראוי.

scene0/test_jitter.py

מבחן test_jitter פועל על מצלמות נסתרות פיזיות באנדרואיד 12.

scene1_1/test_black_white.py

עבור Android 12, test_black_white יש את הפונקציונליות של test_black_white וגם test_channel_saturation .

הטבלה הבאה מתארת ​​את שני המבחנים האישיים באנדרואיד 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, באנדרואיד 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 פועל על מצלמות נסתרות פיזיות באנדרואיד 12.

scene1_2/test_tonemap_sequence.py

מבחן test_tonemap_sequence פועל על LIMITED מצלמות באנדרואיד 12.

scene1_2/test_yuv_plus_raw.py

מבחן test_yuv_plus_raw פועל על מצלמות נסתרות פיזיות באנדרואיד 12.

scene2_a/test_format_combos.py

מבחן test_format_combos פועל על LIMITED מצלמות באנדרואיד 12.

scene3/test_flip_mirror.py

מבחן test_flip_mirror פועל על מצלמות מוגבלות באנדרואיד 12.

scene4/test_aspect_ratio_and_crop.py

מציאת מעגלים ב- scene4/test_aspect_ratio_and_crop.py שוחזרה באנדרואיד 12.

גרסאות אנדרואיד קודמות השתמשו בשיטה שכללה מציאת קו מתאר ילד (העיגול) בתוך קו המתאר האב (הריבוע) עם מסננים לגודל וצבע. אנדרואיד 12 משתמש בשיטה הכוללת מציאת כל קווי המתאר ולאחר מכן סינון על ידי מציאת תכונות שהן הכי עיגולות . כדי לסנן עיגולים מזויפים על הצג, נדרש שטח קו מתאר מינימלי, וקו המתאר של העיגול חייב להיות שחור.

קווי המתאר וקריטריוני הבחירה שלהם מוצגים בתמונה הבאה.

שרטוט קונספטואלי של קווי מתאר וקריטריונים לבחירה

איור 1. ציור קונספטואלי של קווי מתאר וקריטריונים לבחירה

שיטת אנדרואיד 12 פשוטה יותר ועובדת כדי לפתור את הבעיה עם חיתוך תיבה תוחמת בחלק מהטאבלטים לתצוגה. כל המועמדים למעגל נרשמים למטרות ניפוי באגים.

באנדרואיד 12, בדיקת החיתול מופעלת עבור מכשירי FULL ו- LEVEL3 . גרסאות אנדרואיד 11 ומטה דלג על הצהרות בדיקת החיתוך עבור מכשירים FULL .

הטבלה הבאה מפרטת את ההצהרות עבור test_aspect_ratio_and_crop.py המתאימות לרמת מכשיר נתונה ולרמת API ראשונה.

רמת המכשיר רמת API ראשונה קביעות
מוגבל את כל יחס גובה-רוחב
FoV עבור פורמטים של 4:3, 16:9, 2:1
מלא < 31 יחס גובה-רוחב
FoV עבור פורמטים של 4:3, 16:9, 2:1
מלא ≥ 31 יְבוּל
יחס גובה-רוחב
FoV עבור פורמטים של 4:3, 16:9, 2:1
רמה 3 את כל יְבוּל
יחס גובה-רוחב
FoV עבור פורמטים של 4:3, 16:9, 2:1

scene4/test_multi_camera_alignment.py

השיטה undo_zoom() עבור לכידת YUV ב- scene4/test_multi_camera_alignment.py שוחזרה כדי לתת חשבונות מדויקים יותר עבור חיתוך בחיישנים שאינם תואמים את יחס הגובה-רוחב של הצילום.

קוד אנדרואיד 11 Python 2

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

קוד אנדרואיד 12 Python 3

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

באנדרואיד 12, מתווספת שיטה לזיהוי תכונות בתמונות לבדיקת איחוי החיישן.

בגרסאות נמוכות מאנדרואיד 12, התמונה כולה משמשת כדי למצוא את 240 התכונות הטובות ביותר, אשר לאחר מכן ממוסכות למרכז 20% כדי למנוע אפקטים של תריס מתגלגל כאשר דרישת התכונה המינימלית היא 30 תכונות.

אם התכונות שנמצאו בשיטה זו אינן מספקות, אנדרואיד 12 מסווה תחילה את אזור זיהוי התכונה למרכז ב-20%, ומגביל את התכונות המקסימליות לפי שניים מדרישת התכונה המינימלית.

התמונה הבאה מציגה את ההבדל בין זיהוי תכונות אנדרואיד 11 לאנדרואיד 12. העלאת סף דרישת התכונה המינימלית גורמת לזיהוי של תכונות באיכות ירודה ומשפיעה לרעה על המדידות.

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

איור 2. הבדל בזיהוי תכונות בין אנדרואיד 11 לאנדרואיד 12

מבחנים חדשים

scene0/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, 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)
אָדוֹם (1, 0, 0, 0)
ירוק (0, 1, 1, 0)
כְּחוֹל (0, 0, 0, 1)

טבלת הצהרות

הטבלה הבאה מתארת ​​את הצהרות הבדיקה עבור test_solid_color_test_pattern.py .

מַצלֵמָה
רמת API ראשונה
סוג מצלמה צבעים נאמר
31 באייר שחור, לבן, אדום, ירוק, כחול
31 MONO לבן שחור
< 31 באייר/MONO שָׁחוֹר

מבחני כיתת ביצועים

scene2_c/test_camera_launch_perf_class.py

מאמת את ההפעלה של המצלמה היא פחות מ-500 אלפיות השנייה עבור המצלמה הראשית הקדמית והאחורית עם סצנת הפנים scene2_c.

scene2_c/test_jpeg_capture_perf_class.py

מאמת שהשהיית לכידת JPEG של 1080p היא פחות משנייה אחת עבור המצלמה הראשית הקדמית והאחורית עם סצנת הפנים של scene2_c.