בדיקות ITS למצלמה

דף זה מספק רשימה מקיפה של הבדיקות תחת חבילת בדיקת התמונות של המצלמה (ITS), המהווה חלק מאימות ה-Android Compatibility Test Suite (CTS). בדיקות ITS הן בדיקות פונקציונליות, כלומר הן אינן מודדות את איכות התמונה, אלא שכל פונקציות המצלמה המפורסמות פועלות כמצופה. מסמך זה מאפשר למפתחים ולבודקים להבין מה הבדיקות הבודדות עושות וכיצד לנפות באגים בכשלים בבדיקות.

הבדיקות מקובצות לפי סצנה באופן הבא:

  • scene0 : לכידת מטא נתונים, ריצוד, גירוסקופ, רטט
  • סצנה 1 : חשיפה, רגישות, פיצוי EV, YUV לעומת JPEG/RAW
  • סצנה 2 : זיהוי פנים
  • סצנה 3 : שיפור קצה, תנועת עדשה
  • סצנה 4 : יחס גובה-רוחב, חיתוך, שדה ראייה
  • סצנה 5 : הצללת עדשה
  • סצנה6 : זום
  • sensor_fusion : היסט תזמון מצלמה/גירוסקופ

ראה סעיפים בודדים לתיאור של כל סצנה.

סצנה0

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

test_burst_capture

מאמת שכל צינור הלכידה יכול לעמוד בקצב של הלכידה בגודל מלא וזמן המעבד.

ממשקי API שנבדקו:

מעבר: מצלם פרץ של תמונות בגודל מלא והמצלמה מהירה מספיק כדי למנוע פסק זמן.

test_capture_result_dump

בודק שתוצאת לכידה מוחזרת מלכידה ידנית ולאחר מכן זורק אותה.

ממשקי API שנבדקו:

מעבר: משלים את הלכידה ומשליך את תוצאות הלכידה.

test_gyro_bias

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

ממשקי API שנבדקו:

מעבר: הדלתא של קריאת הג'ירו היא פחות מ-0.01 לאורך זמן.

test_gyro_bias_plot.png

test_gyro_bias_plot.png

test_jitter

מודד ריצוד בחותמות זמן של המצלמה.

ממשקי API שנבדקו:

מעבר: יש לפחות דלתא של 30 אלפיות השנייה בין פריימים.

test_jitter_plot.png

test_jitter_plot.png (שים לב לטווח הקטן של ציר ה-y. ריצוד הוא למעשה קטן בחלקה זו.)

test_metadata

בודק את התוקף של ערכי מטא נתונים. מסתכל על תוצאות הצילום ועל מאפייני המצלמה אובייקטים. בדיקה זו משתמשת בערכי החשיפה auto_capture_request מכיוון שתוכן התמונה אינו חשוב.

ממשקי API שנבדקו:

מעבר: רמת החומרה, rollingShutterSkew , תגיות frameDuration , timestampSource , croppingType , blackLevelPattern , pixel_pitch , FOV, מרחק היפרפוקאלי קיימים ויש להם ערכים חוקיים.

test_param_sensitivity_burst

בודק שהפרמטר android.sensor.sensitivity מוחל כהלכה בפרץ. בודק את המטא נתונים של הפלט בלבד.

ממשקי API שנבדקו:

מעבר: לנתוני פלט יש סובלנות שגיאה של פחות מ-0.2%.

test_read_write

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

ממשקי API שנבדקו:

מעבר: ערכי קריאה וכתיבה תואמים בכל הצילומים.

test_sensor_events

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

ממשקי API שנבדקו:

מעבר: מתקבלים אירועים עבור כל חיישן.

test_solid_color_test_pattern

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

אם נתמכות תמונות RAW, הקצאת הצבע נבדקת גם כן. הצבעים שנבדקו הם שחור, לבן, אדום, כחול וירוק. עבור מצלמות שאינן תומכות בתמונות RAW, רק שחור נבדק.

ממשקי API שנבדקו:

מעבר: דפוסי בדיקה מוצקים הנתמכים הם בצבע הנכון ויש שונות נמוכה בתמונה.

test_test_pattern

בודק את הפרמטר android.sensor.testPatternMode כדי ללכוד מסגרות עבור כל תבנית בדיקה חוקית ובודק שהמסגרות נוצרות כהלכה עבור צבעים אחידים ופסי צבע. בדיקה זו כוללת את השלבים הבאים:

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

ממשקי API שנבדקו:

עובר: תבניות בדיקה נתמכות נוצרות כהלכה.

test_test_patterns_2

test_test_patterns_2.jpg

test_tonemap_curve

בודק המרה של דפוס בדיקה מ-RAW ל-YUV עם מפת גוונים ליניארית. בדיקה זו דורשת android.sensor.testPatternMode = 2 (COLOR_BARS) כדי ליצור תבנית תמונה מושלמת להמרת מפת גוונים. מבטיח לצינור יש פלטי צבע נאותים עם מפת גוונים ליניארית וקלט תמונה אידיאלי (מסתמך על test_test_patterns ).

ממשקי API שנבדקו:

מעבר: ה-YUV וה-RAW נראים דומים זה לזה.

test_tonemap_curve_raw_2

test_tonemap_curve_raw_2.jpg

test_tonemap_curve_yuv_2.jpg

test_tonemap_curve_yuv_2.jpg

test_unified_timestamp

בודק אם אירועי תמונה וחיישן תנועה נמצאים באותו תחום זמן.

ממשקי API שנבדקו:

מעבר: חותמות זמן של תנועה נמצאות בין שתי חותמות הזמן של התמונה.

test_restriction_restriction

בודק אם הרטט של המכשיר פועל כמצופה.

ממשקי API שנבדקו:

מעבר: המכשיר אינו רוטט כשהוא מושתק על ידי ממשק API של הגבלת אודיו של המצלמה.

סצנה 1

scene1 הוא תרשים אפור. התרשים האפור חייב לכסות את מרכז 30% משדה הראייה של המצלמה. התרשים האפור צפוי לאתגר את 3A (חשיפה אוטומטית, איזון לבן אוטומטי, פוקוס אוטומטי) באופן מתון מכיוון שלאזור המרכז אין תכונות. עם זאת, בקשת הלכידה מציינת את כל הסצנה הכוללת מספיק תכונות ל-3A להתכנס.

ניתן לבדוק מצלמות RFoV ב-WFoV או במתקן הבדיקה של RFoV. אם מצלמת RFoV נבדקת במתקן הבדיקה של WFoV, התרשים מוגדל ב-⅔ כדי להבטיח כמה גבולות לתרשים האפור ב-FoV כדי לעזור ל-3A להתכנס.

סצנה 1

סצנה1: תרשים בגודל מלא (משמאל). ⅔ תרשים בקנה מידה (מימין).

test_3a

בודק את ההתכנסות של 3A עם יעד מאתגר בינוני.

ממשקי API שנבדקו:

מעבר: 3A מתכנס וערכי 3A המוחזרים תקפים.

test_ae_af

בודק את האלגוריתמים של חשיפה אוטומטית 3A (AE) ומיקוד אוטומטי (AF) בנפרד.

ממשקי API שנבדקו:

מעבר: 3A מתכנס וערכי 3A המוחזרים חוקיים.

test_ae_precapture_trigger

בודק את מכונת המצב AE בעת שימוש בטריגר Precapture. לוכד חמש בקשות ידניות עם AE מושבת. לבקשה האחרונה יש טריגר לכידת AE, שיש להתעלם ממנו מכיוון ש-AE מושבת.

ממשקי API שנבדקו:

מעבר: AE מתכנס.

test_auto_vs_manual

בדיקות שלכדו צילומים אוטומטיים וידניים נראים זהים.

ממשקי API שנבדקו:

מעבר: עלייה ידנית של איזון לבן והתמרה המדווחת בכל תוצאת לכידה תואמת את estimate האיזון הלבן האוטומטי מאלגוריתם 3A של המצלמה.

test_auto_vs_manual_auto

test_auto_vs_manual_auto.jpg

test_auto_vs_manual_wb

test_auto_vs_manual_wb.jpg

test_auto_vs_manual_manual_wb_tm

test_auto_vs_manual_manual_wb_tm.jpg

בדיקה_שחור_לבן

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

ממשקי API שנבדקו:

Pass: מייצר תמונות בשחור לבן. לערוצים רוויים של תמונות לבנות יש ערכי RGB של [255, 255, 255] עם מרווח שגיאה של פחות מ-1% הבדל.

test_שחור_לבן_שחורtest_שחור_לבן_שחור
test_black_white_black.jpg test_black_white_white.jpg

test_black_white_test_means

test_black_white_plot_means.png

test_burst_sameness_manual

מצלם 5 יציאות של 50 תמונות עם הגדרת לכידה ידנית ובודק שכולן זהות. ניתן להשתמש בבדיקה זו כדי לזהות אם יש מסגרות ספורדיות שמעובדות בצורה שונה או שיש להן חפצים.

ממשקי API שנבדקו:

מעבר: התמונות זהות מבחינה ויזואלית ובערכי RGB.

נכשל: מראה עלייה או ירידה בתרשים הממוצע של RGB בתחילת כל פרץ

  • הסובלנות היא 3% עבור first_API_level < 30
  • הסובלנות היא 2% עבור first_API_level >= 30

test_burst_uniform_mean

test_burst_sameness_manual_mean.jpg

test_burst_sameness_manual_plot_means

test_burst_sameness_manual_plot_means.png

test_capture_result

בודקת שנתונים חוקיים חוזרים באובייקטים של CaptureResult . עושה לכידה אוטומטית, ידנית ואוטומטית.

ממשקי API שנבדקו:

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

test_capture_result_plot_lsc_auto_ch0

test_capture_result_plot_lsc_auto_ch0.png

test_crop_region_raw

בודקים שזרמי ה-RAW אינם ניתנים לחיתוך.

ממשקי API שנבדקו:

מעבר: תמונות YUV נחתכות במרכז אך לא תמונות RAW.

test_crop_region_raw_comp_raw_crop

test_crop_region_raw_comp_raw_crop.jpg

test_crop_region_raw_comp_raw_full

test_crop_region_raw_comp_raw_full.jpg

test_crop_region_raw_comp_yuv_crop

test_crop_region_raw_comp_yuv_crop.jpg

test_crop_region_raw_yuv_full

test_crop_region_raw_yuv_full.jpg

test_crop_regions

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

ממשקי API שנבדקו:

מעבר: תמונה של האזור החתוך תואמת לתיקון התואם לתמונת החיתוך.

test_dng_noise_model

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

ממשקי API שנבדקו:

מעבר: הפרמטרים של מודל ה-DNG הגולמי נכונים. ערכי RGB צפויים תואמים לערכי ה-RGB שנמדדו בפועל.

test_dng_noise_model_plog

test_dng_noise_model_plog.png

test_ev_compensation_advanced

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

ממשקי API שנבדקו:

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

test_ev_compensation_advanced_plot_means

test_ev_compensation_advanced_plot_means.png

test_ev_compensation_basic

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

ממשקי API שנבדקו:

מעבר: לוכדת עלייה בלומה עם הגדרת פיצוי EV מוגברת, ולשמונה הפריימים שנלכדו עבור כל הגדרת פיצוי EV יש ערכי לומה יציבים.

test_ev_compensation_basic

test_ev_compensation_basic.png

חשיפה_בדיקה

בודקים שחשיפה קבועה מושגת כאשר ISO וזמן החשיפה משתנים. מצלם סדרה של תמונות עם ISO וזמן חשיפה שנבחרו כדי לאזן זה את זה. לתוצאות צריכות להיות אותה בהירות, אבל במהלך הרצף התמונה צריכה להיות רועשת יותר. מאמת שהערכים הממוצעים של פיקסל לדוגמה קרובים זה לזה. מבטיח שהתמונות אינן מהודקות ל-0 או 1 (מה שיגרום להן להיראות כמו קווים שטוחים). ניתן להריץ את הבדיקה גם עם תמונות RAW על ידי הגדרת דגל debug בקובץ התצורה שלך.

ממשקי API שנבדקו:

מעבר: לתמונות יש אותה בהירות, אבל רועשות יותר עם ISO גבוה יותר. מטוסי RGB שטוחים כאשר הערך של חשיפת ISO* קבוע על פני שטח ההגברה הנבדק.

test_exposure_test_means

test_exposure_plot_means.png

test_exposure_mult=1.00test_exposure_mult=64.00
test_exposure_mult=1.00.jpg test_exposure_mult=64.00.jpg

test_jpeg

בדיקות שהמירו תמונות YUV ותמונות JPEG של המכשיר נראות זהות. הבדיקה לוקחת את מרכז ה-10% מהתמונה ומחשבת את ערך ה-RGB ומוודאת שהם תואמים.

ממשקי API שנבדקו:

מעבר: הפרש ה-RGB הממוצע בין כל תמונה הוא פחות מ-3%.

test_jpeg_fmt=jpg.jpgtest_jpeg=fmt=yuv.jpg
test_jpeg_fmt=jpg.jpg test_jpeg=fmt=yuv.jpg

test_latching

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

ממשקי API שנבדקו:

מעבר: תמונות [2, 3, 6, 8, 10, 12, 13] הגדילו את ה-ISO או החשיפה והן מופיעות עם אמצעי RGB גבוהים יותר ב- test_latching_plot_means.png .

test_latching_i=00.jpgtest_latching_i=01.jpgtest_latching_i=02.jpg
test_latching_i=00.jpg test_latching_i=01.jpg test_latching_i=02.jpg
test_latching_i=03.jpgtest_latching_i=04.jpgtest_latching_i=05.jpg
test_latching_i=03.jpg test_latching_i=04.jpg test_latching_i=05.jpg
test_latching_i=06.jpgtest_latching_i=07.jpgtest_latching_i=08.jpg
test_latching_i=06.jpg test_latching_i=07.jpg test_latching_i=08.jpg
test_latching_i=09.jpgtest_latching_i=10.jpgtest_latching_i=11.jpg
test_latching_i=09.jpg test_latching_i=10.jpg test_latching_i=11.jpg
test_latching_i=12.jpg
test_latching_i=12.jpg

test_latching_plot_means

test_latching_plot_means.png

test_linearity

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

ממשקי API שנבדקו:

מעבר: ערכי R, G, B חייבים לעלות באופן ליניארי עם רגישות מוגברת.

test_linearity_plot_means

test_linearity_plot_means.png

test_locked_burst

בודק נעילת 3A ופרץ YUV (באמצעות הגדרה אוטומטית). בדיקה זו נועדה לעבור גם במכשירים מוגבלים שאין להם MANUAL_SENSOR או PER_FRAME_CONTROLS . הבדיקה בודקת את עקביות תמונת YUV בעוד שבדיקת קצב הפריימים נמצאת ב-CTS.

ממשקי API שנבדקו:

מעבר: הצילומים נראים עקביים.

test_locked_burst_frame0

test_locked_burst_frame0.jpg

test_locked_burst_frame1

test_locked_burst_frame1.jpg

test_locked_burst_frame2

test_locked_burst_frame2.jpg

test_multi_camera_match

בדיקות כדי לראות אם מצלמות מרובות במכשירים נותנות ערכי RGB דומים עבור תיקון אפור.

ממשקי API שנבדקו:

מעבר: מצלמות שונות מייצרות ערכי RGB דומים עבור אותו תיקון אפור.

test_multi_camera+match_yuv_fl=4.38

test_multi_camera+match_yuv_fl=4.38.jpg

test_param_color_correction

בודק שהפרמטרים של android.colorCorrection.* מיושמים כאשר הם מוגדרים. מצלם תמונות עם ערכי טרנספורמציה ורווח שונים, ובודק שהם נראים שונים בהתאם. הטרנספורמציה והרווחים נבחרים כדי להפוך את הפלט ליותר ויותר אדום או כחול. משתמש במפת גוונים ליניארית. מיפוי גוונים הוא טכניקה המשמשת בעיבוד תמונה למיפוי קבוצת צבעים אחת לאחרת כדי להעריך את המראה של תמונות בטווח דינמי גבוה במדיום בעל טווח דינמי מוגבל יותר.

ממשקי API שנבדקו:

מעבר: ערכי R ו-B מגבירים בהתאם לשינוי.

test_param_color_correction_plot_means

test_param_color_correction_plot_means.png

*ציר ה-X הוא בקשות הלכידה: 0 = אחדות, 1= חיזוק אדום, 2= חיזוק כחול

test_param_color_correction_req=0

test_param_color_correction_req=0.jpg

test_param_color_correctness_req=1

test_param_color_correctness_req=1.jpg (חיזוק R)

test_param_color_correction_req=2

test_param_color_correction_req=2.jpg (B boost)

test_param_exposure_time

בודק שהפרמטר android.sensor.exposureTime מוחל.

ממשקי API שנבדקו:

מעבר: כל צילום בהירה יותר מהצילום הקודם.

test_param_exposure_time_frame0

test_param_exposure_time_frame0.jpg

test_param_exposure_time_plot

test_param_exposure_time_plot.png

test_param_flash_mode

בודק שהפרמטר android.flash.mode מוחל. מגדיר ידנית את החשיפה להיות בצד האפל, כך שיהיה ברור אם הפלאש הופעל או לא, ומשתמש במפת גוונים ליניארית. בודק את המרכז עם תמונת האריח כדי לראות אם נוצר שיפוע גדול כדי לוודא אם הפלאש הופעל.

ממשקי API שנבדקו:

מעבר: למרכז תמונת האריח יש שיפוע גדול, כלומר הפלאש הופעל.

test_param_flash_mode_1

test_param_flash_mode_1.jpg

test_param_flash_mode_1_tile

test_param_flash_mode_1_tile.jpg

test_param_flash_mode_2

test_param_flash_mode_2.jpg

test_param_flash_mode_2_tile

test_param_flash_mode_2_tile.jpg

test_param_reduction_reduction

בודק שהפרמטר android.noiseReduction.mode מוחל כהלכה כאשר הוא מוגדר. מצלם תמונות כשהמצלמה מוארת במעומעם. משתמש בהגבר אנלוגי גבוה כדי להבטיח שהתמונה המצולמת רועשת. לוכד שלוש תמונות, עבור NR כבוי, "מהיר" ו"איכות גבוהה". גם לוכד תמונה עם רווח נמוך ו-NR כבוי, ומשתמש בשונות של זה בתור קו הבסיס. ככל ש-SNR (יחס אות לרעש) גבוה יותר, כך איכות התמונה טובה יותר.

ממשקי API שנבדקו:

מעבר: SNR משתנה עם מצבי הפחתת רעש שונים ומתנהג באופן דומה לתרשים למטה.

test_param_noise_reduction_plot_SNRs

test_param_noise_reduction_plot_SNRs.png

0: כבוי, 1: מהיר, 2: HQ, 3: MIN , 4: ZSL

test_param_noise_reduction_high_gain_nr=0

test_param_noise_reduction_high_gain_nr=0.jpg

test_param_noise_reduction_high_gain_nr=1

test_param_noise_reduction_high_gain_nr=1.jpg

test_param_noise_reduction_high_gain_nr=2

test_param_noise_reduction_high_gain_nr=2.jpg

test_param_noise_reduction_high_gain_nr=3

test_param_noise_reduction_high_gain_nr=3.jpg

test_param_reduction_reduction_low_gain

test_param_noise_reduction_low_gain.jpg

test_param_sensitivity

בודק שהפרמטר android.sensor.sensitivity מוחל. הבדיקה מגבירה את הרגישות ב-5 שלבים עם חשיפה קבועה לכל צילום.

ממשקי API שנבדקו:

מעבר: אמצעי RGB של מרכז 10% מתבהרים עם רגישות מוגברת.

test_param_sensitivity_iso=0055

test_param_sensitivity_iso=0055.jpg

test_param_sensitivity_iso=1819

test_param_sensitivity_iso=1819.jpg

test_param_sensitivity_iso=3583

test_param_sensitivity_iso=3583.jpg

test_param_sensitivity_iso=5347

test_param_sensitivity_iso=5347.jpg

test_param_sensitivity_iso=7111

test_param_sensitivity_iso=7111.jpg

test_param_sensitivity_plot

test_param_sensitivity_plot.png

test_param_shading_mode

בודק שהפרמטר android.shading.mode מוחל.

ממשקי API שנבדקו:

מעבר: מצבי הצללה מוחלפים ומפות הצללת העדשה משתנות כצפוי.

test_param_shading_mode_ls_maps_mode_0_loop_0

test_param_shading_mode_ls_maps_mode_0_loop_0.png

test_param_shading_mode_ls_maps_mode_1_loop_0

test_param_shading_mode_ls_maps_mode_1_loop_0.png

test_param_shading_mode_ls_maps_mode_2_loop_0

test_param_shading_mode_ls_maps_mode_2_loop_0.png

test_param_tonemap_mode

בודק שהפרמטר android.tonemap.mode מוחל. מחיל עקומות שונות של מפת גוונים על כל ערוץ R, G, B, ובודק שתמונות הפלט משתנות כצפוי. מבחן זה מורכב משני מבחנים, מבחן1 ומבחן2.

ממשקי API שנבדקו:

לַעֲבוֹר:

  • test1: לשתי התמונות יש מפת גוונים ליניארית, אבל ל-n=1 יש שיפוע תלול יותר. ערוץ G (ירוק) בהיר יותר עבור התמונה n=1.
  • test2: אותה מפת טון, אבל באורך שונה. התמונות זהות.
test_param_tonemap_mode_n=0.jpgtest_param_tonemap_mode_n=1.jpg
test_param_tonemap_mode_n=0.jpg test_param_tonemap_mode_n=1.jpg

test_post_raw_sensitivity_boost

בודק לאחר הגברת רגישות RAW. מצלם קבוצה של תמונות RAW ו-YUV ברגישות שונה, מפרסם שילוב של הגברת רגישות RAW ובודק אם ממוצע פיקסל הפלט תואם את הגדרות הבקשה.

ממשקי API שנבדקו:

מעבר: תמונות RAW הופכות כהות יותר ככל שהחיזוק גדל בעוד שתמונות YUV נשארות קבועות בבהירות

test_post_raw_sensitivity_boost_raw_s=3583_boost=0100

test_post_raw_sensitivity_boost_raw_s=3583_boost=0100.jpg

test_post_raw_sensitivity_boost_raw_s=1792_boost=0200

test_post_raw_sensitivity_boost_raw_s=1792_boost=0200.jpg

test_post_raw_sensitivity_boost_raw_s=0896_boost=0400

test_post_raw_sensitivity_boost_raw_s=0896_boost=0400.jpg

test_post_raw_sensitivity_boost_raw_s=0448_boost=0800

test_post_raw_sensitivity_boost_raw_s=0448_boost=0800.jpg

test_post_raw_sensitivity_boost_raw_s=0224_boost=1600

test_post_raw_sensitivity_boost_raw_s=0224_boost=1600.jpg

test_post_raw_sensitivity_boost_raw_s=0112_boost=3199

test_post_raw_sensitivity_boost_raw_s=0112_boost=3199.jpg

test_post_raw_sensitivity_boost_raw_plot_means

test_post_raw_sensitivity_boost_raw_plot_means.png

test_post_raw_sensitivity_boost_yuv_s=0112_boost=3199

test_post_raw_sensitivity_boost_yuv_s=0112_boost=3199.jpg

test_post_raw_sensitivity_boost_yuv_s=0448_boost=0800

test_post_raw_sensitivity_boost_yuv_s=0448_boost=0800.jpg

test_post_raw_sensitivity_boost_yuv_s=0896_boost=0400

test_post_raw_sensitivity_boost_yuv_s=0896_boost=0400.jpg

test_post_raw_sensitivity_boost_yuv_s=1792_boost=0200

test_post_raw_sensitivity_boost_yuv_s=1792_boost=0200.jpg

test_post_raw_sensitivity_boost_yuv_s=3585_boost=0100

test_post_raw_sensitivity_boost_yuv_s=3585_boost=0100.jpg

test_post_raw_sensitivity_boost_yuv_plot_means

test_post_raw_sensitivity_boost_yuv_plot_means.png

test_raw_burst_sensitivity

לוכד סט של תמונות גולמיות עם רווחים הולכים וגדלים ומודד את הרעש. לוכד גולמי בלבד, בפרץ.

ממשקי API שנבדקו:

מעבר: כל זריקה רועשת יותר מהזריקה הקודמת, מכיוון שהרווח הולך וגדל.

משתמש בשונות של תא הרשת הסטטיסטית המרכזית.

test_raw_burst_sensitivity_variance

test_raw_burst_sensitivity_variance.png

חשיפה_גולמית לבדיקה

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

ממשקי API שנבדקו:

מעבר: הגדלת ה-ISO (רווח) הופכת את הפיקסלים לרגישים יותר לאור, כך שהעלילה נעה לכיוון שמאל.

test_raw_exposure_s=55

test_raw_exposure_s=55.png

(10⁰ זה 1 ms, 10¹ זה 10 ms, 10⁻¹ זה 0.1 ms)

test_raw_exposure_s=132

test_raw_exposure_s=132.png

test_raw_exposure_s=209

test_raw_exposure_s=209.png

test_raw_exposure_s=286

test_raw_exposure_s=286.png

test_raw_exposure_s=363

test_raw_exposure_s=363.png

test_raw_exposure_s=440

test_raw_exposure_s=440.png

test_raw_sensitivity

לוכד סט של תמונות גולמיות עם רגישויות גוברת ומודד את הרעש (השונות) במרכז 10% של התמונה. בודק שכל ירייה רועשת יותר מהקודמת.

ממשקי API שנבדקו:

מעבר: השונות עולה עם כל זריקה.

test_raw_sensitivity_variance

test_raw_sensitivity_variance.png

test_reproces_reduction_reduction

בדיקות ש- android.noiseReduction.mode מיושם לעיבוד מחדש של בקשות. מצלם תמונות מעובדות מחדש כשהמצלמה מוארת עמומה. משתמש בהגבר אנלוגי גבוה כדי להבטיח שתמונת הצילום רועשת. לוכד שלוש תמונות מעובדות מחדש, עבור NR כבוי, "מהיר" ו"איכות גבוהה". לוכד תמונה מעובדת עם רווח נמוך ו-NR כבוי, ומשתמש בשונות של זה בתור קו הבסיס.

ממשקי API שנבדקו:

מעבר: FAST >= כבוי, HQ >= FAST, HQ >> כבוי

עלילה טיפוסית של SNR לעומת NR_MODE

עלילה טיפוסית של SNR לעומת NR_MODE

test_tonemap_sequence

בודק רצף של צילומים עם עקומות שונות של מפת טון. לוכד 3 צילומים ידניים עם מפת גוונים ליניארית. לוכד 3 תמונות ידניות עם מפת טון ברירת המחדל. מחשב את הדלתא בין כל זוג פריים עוקב.

ממשקי API שנבדקו:

מעבר: יש 3 מסגרות זהות ואחריהן סט שונה של 3 מסגרות זהות.

test_tonemap_sequence_i=0

test_tonemap_sequence_i=0.jpg

test_tonemap_sequence_i=1

test_tonemap_sequence_i=1.jpg

test_tonemap_sequence_i=2

test_tonemap_sequence_i=2.jpg

test_tonemap_sequence_i=3

test_tonemap_sequence_i=3.jpg

test_tonemap_sequence_i=4

test_tonemap_sequence_i=4.jpg

test_tonemap_sequence_i=5

test_tonemap_sequence_i=5.jpg

test_yuv_jpeg_all

בדיקות שכל הגדלים והפורמטים דיווחו על עבודת לכידת תמונה. משתמש בבקשה ידנית עם מפת גוונים ליניארית כך שה-YUV וה-JPEG נראים זהים כשהם מומרים על ידי מודול its.image. תמונות אינן נשמרות כברירת מחדל, אך ניתן לשמור אותן על ידי הפעלת debug_mode .

ממשקי API שנבדקו:

מעבר: לכל מרכזי התמונות יש הפרש מקסימלי של RMS (ערך ממוצע-מרובע של אות) בתמונות המומרות RGB עם 3% מתמונת YUV ברזולוציה הגבוהה ביותר.

test_yuv_jpeg_all

test_yuv_jpeg_all.png

test_yuv_plus_dng

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

ממשקי API שנבדקו:

עובר: מבחן מסיים ומחזיר את התמונות המבוקשות.

test_yuv_plus_dng

test_yuv_plus_dng.jpg

test_yuv_plus_jpeg

בודקת לכידת פריים בודד כפלטי YUV ו-JPEG. משתמש בבקשה ידנית עם מפת גוונים ליניארית כך שה-YUV וה-JPEG נראים זהים (כשהם מומרים על ידי מודול its.image ).

ממשקי API שנבדקו:

מעבר: תמונות YUV ו-JPEG דומות ויש להן הבדל של פחות מ-1% RMS (ערך ממוצע-ריבוע של אות).

test_yuv_plus_jpg_jpg.jpgtest_yuv_plus_jpeg_yuv.jpg
test_yuv_plus_jpg_jpg.jpg test_yuv_plus_jpeg_yuv.jpg

test_yuv_plus_raw

בודקת לכידת פריים בודד כפלטי RAW ו-YUV. משתמש בבקשה ידנית עם מפת גוונים ליניארית כך ש-RAW ו-YUV צפויים להיות זהים. משווה בין ערכי RGB של מרכז 10% של תמונות שהומרו ב-RGB. יומני android.shading.mode .

ממשקי API שנבדקו:

מעבר: תמונות YUV ו-JPEG דומות ויש להן הבדל של פחות מ-3.5% RMS (ערך ממוצע-ריבוע של אות).

test_yuv_plus_raw_shading=1_raw.jpgtest_yuv_plus_raw_shading=1_yuv.jpg
test_yuv_plus_raw_shading=1_raw.jpg test_yuv_plus_raw_shading=1_yuv.jpg

test_yuv_plus_raw10

בודקת לכידת פריים בודד כפלטי RAW10 ו-YUV. משתמש בבקשה ידנית עם מפת גוונים ליניארית כך ש-RAW ו-YUV צפויים להיות זהים. משווה בין ערכי RGB של מרכז 10% של תמונות שהומרו ב-RGB. יומני android.shading.mode .

ממשקי API שנבדקו:

מעבר: תמונות RAW10 ו-YUV דומות ובעלות הפרש של פחות מ-3.5% RMS (ערך ממוצע ריבוע של אות).

test_yuv_plus_raw10_shading=1_rawtest_yuv_plus_raw10_shading=1_yuv
test_yuv_plus_raw10_shading=1_raw.jpg test_yuv_plus_raw10_shading=1_yuv.jpg

test_yuv_plus_raw12

בודקת לכידת פריים בודד כפלטי RAW12 ו-YUV. משתמש בבקשה ידנית עם מפת גוונים ליניארית כך ש-RAW ו-YUV צפויים להיות זהים. משווה בין ערכי RGB של מרכז 10% של תמונות שהומרו ב-RGB. יומני android.shading.mode .

ממשקי API שנבדקו:

מעבר: תמונות RAW12 ו-YUV דומות ויש להן הבדל של פחות מ-3.5% RMS (ערך ממוצע ריבוע של אות).

test_yuv_plus_raw12_shading=1_raw.jpgtest_yuv_plus_raw12_shading=1_yuv.jpg
test_yuv_plus_raw12_shading=1_raw.jpg test_yuv_plus_raw12_shading=1_yuv.jpg

סצנה2_א

ל-scene2_a יש שלושה פרצופים עם רקע אפור ולבוש ניטרלי. הפנים נבחרות למגוון רחב של גווני עור.

סצנה2_א

סצנה2_א

test_auto_flash

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

ממשקי API שנבדקו:

מעבר: למרכז תמונת האריח יש שיפוע גדול שמשמעותו שהבזק אוטומטי הופעל.

test_effects

לוכד פריים עבור אפקטי מצלמה נתמכים ובודק אם הם נוצרו כהלכה. הבדיקה בודקת רק אפקטים OFF ו- MONO , אך שומרת תמונות עבור כל האפקטים הנתמכים.

ממשקי API שנבדקו:

מעבר: מצלם את תמונת הסצנה עם אפקטים OFF ותמונה מונוכרום עם אפקטים מוגדרים ל- MONO .

test_effects_MONO

test_effects_MONO.jpg

test_format_combos

בודק שילובים שונים של פורמטי פלט.

ממשקי API שנבדקו:

מעבר: כל השילובים נלכדו בהצלחה.

test_jpeg_quality

בודק את איכות הדחיסה של המצלמה JPEG. שלב איכויות JPEG דרך android.jpeg.quality ומבטיח שטבלאות קוונטיזציה משתנות כהלכה.

ממשקי API שנבדקו:

מעבר: מטריצת הקוונטיזציה יורדת עם עליית האיכות. (מטריקס מייצגת את גורם החלוקה.)

test_jpeg_quality

ממוצעים של מצלמה אחורית של Pixel 4 luma/chroma DQT מטריצת לעומת איכות JPEG

test_jpeg_quality נכשל

דוגמה למבחן נכשל

שימו לב שעבור תמונות באיכות נמוכה מאוד (jpeg.quality < 50), אין עלייה בדחיסה במטריצת הקוונטיזציה.

test_num_faces

בודק זיהוי פנים.

ממשקי API שנבדקו:

מעבר: מוצא שלוש פרצופים.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

סצנה2_ב

test_auto_per_frame_control

בודק מאפיינים של PER_FRAME_CONTROL עבור בקשות לכידה אוטומטית.

ממשקי API שנבדקו:

מעבר: כל המאפיינים של PER_FRAME_CONTROL קיימים.

test_auto_per_frame_control_frame_1

test_auto_per_frame_control_frame_1.jpg

test_auto_per_frame_control_frame_10

test_auto_per_frame_control_frame_10.jpg

test_auto_per_frame_control_frame_29

test_auto_per_frame_control_frame_29.jpg

test_auto_per_frame_control_plot

test_auto_per_frame_control_plot.png

test_num_faces

בודק זיהוי פנים עם גיוון גווני עור מוגבר בסצנות פנים.

ממשקי API שנבדקו:

מעבר: מוצא 3 פרצופים.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

test_yuv_jpg_capture_sameness

לוכד שתי תמונות באמצעות הפורמטים הנפוצים ביותר של YUV ו-JPEG עם יחס רוחב-גובה זהה לפורמט ה-JPEG הגדול ביותר שאינו עולה על רזולוציה של 1920x1440. מגדיר את jpeg.quality ל-100 ולוכד בקשה משטח כפול. ממירה את שתי התמונות למערכים של RGB ומחשבת את ההבדל התלת-ממדי RMS (Root mean square) בין שתי התמונות.

ממשקי API שנבדקו:

מעבר: תמונות YUV ו-JPEG דומות ויש להן הבדל של פחות מ-1% RMS (ערך ממוצע-ריבוע של אות).

סצנה2_ג

test_num_faces

בודק זיהוי פנים עם גיוון גווני עור מוגבר בסצנות פנים.

ממשקי API שנבדקו:

מעבר: מוצא 3 פרצופים.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

test_jpeg_capture_perf_class

בודק את זמן השהיית לכידת JPEG עבור דרגת הביצועים S כמפורט בסעיף 2.2.7.2 מצלמה ב-CDD.

מעבר: חייב להיות בעל זמן צילום JPEG של מצלמה 2 < 1000ms עבור רזולוציית 1080p כפי שנמדדה על ידי בדיקת הביצועים של מצלמת CTS בתנאי תאורה ITS (3000K) עבור שתי המצלמות הראשיות.

test_camera_launch_perf_class

בודק את זמן השקת המצלמה עבור דרגת הביצועים S כפי שצוין בסעיף 2.2.7.2 מצלמה ב-CDD.

מעבר: חייב להיות חביון הפעלה של camera2 (מצלמה פתוחה למסגרת תצוגה מקדימה ראשונה) < 600ms כפי שנמדד על ידי PerformanceTest מצלמת CTS בתנאי תאורה ITS (3000K) עבור שתי המצלמות הראשיות.

סצנה2_ד

test_num_faces

בודק זיהוי פנים עם גיוון גווני עור מוגבר בסצנות פנים.

ממשקי API שנבדקו:

מעבר: מוצא 3 פרצופים.

סצנה2_ה

מבחן_תמונה_רציפה

50 מסגרות ברזולוציית VGA נלכדות עם ההגדרה הראשונה של בקשת הלכידה android.control.afMode = 4 (CONTINUOUS_PICTURE).

ממשקי API שנבדקו:

מעבר: מערכת 3A מתייצבת בתום לכידה של 50 פריימים.

test_num_faces

בודק זיהוי פנים עם גיוון גווני עור מוגבר בסצנות פנים.

ממשקי API שנבדקו:

מעבר: מוצא 3 פרצופים.

סצנה 3

Scene3 משתמש בתרשים ISO12233, ורוב הבדיקות משתמשות בשיטת חילוץ תרשים כדי למצוא את התרשים בסצנה. מסיבה זו, לרוב התמונות השמורות אין גבולות כמו התמונות של סצנות 1, 2 או 4, אלא רק בתרשים.

test_3a_consistency

בדיקות לעקביות 3A.

ממשקי API שנבדקו:

מעבר: 3A מתכנס לחשיפה, רווח, awb (איזון לבן אוטומטי) ו-fd (מרחק מיקוד) שלוש פעמים בתוך סובלנות.

test_edge_enhancement

בודק שהפרמטר android.edge.mode מוחל כהלכה. לוכד תמונות ללא עיבוד מחדש עבור כל מצב קצה ומחזיר את החדות של תמונת הפלט והמטא נתונים של תוצאת הלכידה. מעבד בקשת לכידה עם מצב קצה נתון, רגישות, זמן חשיפה, מרחק מיקוד ופרמטר משטח פלט.

מעבר: מצב מהיר אינו חד יותר ממצב HQ (איכות גבוהה).

ממשקי API שנבדקו:

פרמטרי המצלמה המושפעים:

  • EDGE_MODE

test_edge_enhancement_edge=0

test_edge_enhancement_edge=0.jpg

test_edge_enhancement_edge=1

test_edge_enhancement_edge=1.jpg (מצב מהיר)

test_edge_enhancement_edge=2

test_edge_enhancement_edge=2.jpg (מצב באיכות גבוהה)

test_flip_mirror

בודק אם התמונה מכוונת כראוי לפי סעיף CDD 7.5.2 מצלמה קדמית [C-1-5] .

ניתן לזהות תמונות מראות, מתהפכות או מסובבות לפי תכונת היהלום ליד המרכז.

מעבר: התמונה אינה מתהפכת, שיקוף או מסובבת.

test_flip_mirror_scene_patch

test_flip_mirror_scene_patch.jpg

test_lens_movement_reporting

Tests if the lens movement flag is properly reported. Captures a burst of 24 images with the first 12 frames at the optimum focus distance (as found by 3A) and the last 12 frames at the minimum focus distance. Around frame 12, the lens moves causing the sharpness to drop. The sharpness eventually stabilize as the lens moves to the final position. The lens movement flag should be asserted in all frames where the sharpness is intermediate to sharpness in the first 10 frames with the lens stationary at optimum focal distance, and the final 10 frames where the lens is stationary in the minimum focal distance. The exact frame the lens moves isn't important: what is checked is that the movement flag is asserted when the lens is moving.

APIs tested:

Pass: Lens movement flag is True in the frame with sharpness change.

test_reprocess_edge_enhancement

Tests if supported reprocess methods for edge enhancement work properly. Processes a capture request with a given reprocess edge mode and compares different modes to capture with reprocess edge modes disabled.

APIs tested:

Pass: Sharpness for the different edge modes is correct. HQ (mode 2) is sharper than OFF (mode 0), and improvement between different modes is similar.

test_reprocess_edge_enhancement_plot

test_reprocess_edge_enhancement_plot.png

scene4

Scene4 consists of a black circle on a white background inside a square.

scene4

scene4

test_aspect_ratio_and_crop

Takes pictures of a circle inside of a square over all formats. Verifies that the aspect ratio of the circle doesn't change, the cropped images keep the circle in center, and the circle size doesn't change for a constant format or with different resolution (field of view check).

APIs tested:

Pass: Images aren't stretched, the center of images don't differ by more than 3%, and the maximum possible FOV (field of view) is preserved.

test_multi_camera_alignment

Tests the multi camera system parameters related to camera spacing. Using the multi-camera physical sub-cameras, takes a picture with one of the physical cameras. Finds the circle center. Projects the circle center to the world coordinates for each camera. Compares the difference between the cameras' circle centers in world coordinates. Reprojects the world coordinate back to pixel coordinates and compares against originals as a validity check. Compares the circle sizes checking if the focal lengths of the cameras are different.

APIs tested:

Pass: Focal lengths and circles sizes are consistent.

test_preview_stabilization_fov

Checks the supported preview sizes to ensure the FoV is cropped approriately. The test captures two videos, one with preview stabilization ON , and another with preview stabilization OFF . A representative frame is selected from each video, and analyzed to ensure that the FoV changes in the two videos are within spec.

APIs tested:

Pass: The circle aspect ratio remains about constant, the center location of the circle remains stable, and the size of circle changes no more that 20%. ie the FOV changes at most 20%

test_video_aspect_ratio_and_crop

Takes videos of a circle inside of a square over all video formats. Extracts the key frames, and verifies the aspect ratio of the circle doesn't change, the cropped images keep the circle in center, and the circle size doesn't change for a constant format or with different resolution (field of view check).

APIs tested:

Pass: Video frames aren't stretched, the center of frames don't differ by more than 3%, and the maximum possible FoV (field of view) is preserved.

scene5/diffuser

test_lens_shading_and_color_uniformity

Tests that the lens shading correction is applied appropriately, and color of a monochrome uniform scene is evenly distributed. Performs this test on a YUV frame with auto 3A. Lens shading is evaluated based on the y channel. Measures the average y value for each sample block specified, and determines pass or fail by comparing with the center y value. The color uniformity test is evaluated in r/g and b/g space.

APIs tested:

Pass: At the specified radius of the image, the variance of r/g and b/g value must be less than 20% to pass the test.

scene6

Scene6 is a grid of small circles with a square in one corner to indicate orientation. The small circles are needed to test zoom function over a large range.

scene6

scene6

test_zoom

Tests the camera zoom behavior. Takes captures over the zoom range and checks if the circles get bigger as the camera zooms in.

APIs tested:

Pass: Relative size of captured circle is accurate against requested zoom ratio to ensure camera is zooming correctly.

test_zoom

test_zoom to find the contour of the circle closest to the center.

sensor_fusion

Sensor fusion tests require specific phone movement in front of a checkerboard pattern. The sensor_fusion tests can be automated with the Sensor Fusion Box .

checkerboard

Image of checkerboard

test_multi_camera_frame_sync

Tests that frame timestamps captured by logical camera are within 10 ms by computing angles of squares within the checkerboard to determine the timestamp.

APIs tested:

Pass: Angle between images from each camera doesn't change appreciably as phone is rotated.

test_preview_stabilization

Tests that stabilized preview video rotates less than gyroscope.

APIs tested:

Pass: Max angle rotation over frames is less than 70% of gyroscope rotation.

test_sensor_fusion

Tests the timestamp difference between the camera and the gyroscope for AR and VR applications. Phone is rotated 90 degrees 10 times in front of the checkerboard pattern. Motion is about 2 s round trip. This test is skipped if no gyroscope is included or if the REALTIME parameter is not enabled.

The test_sensor_fusion test generates a number of plots. The two most important plots for debugging are:

  • test_sensor_fusion_gyro_events : Shows the gyroscope events for the phone during the test. Movement in the x and y direction implies the phone isn't securely mounted on the mounting plate, reducing the probability of the test passing. The number of cycles in the plot depends on the write speed for saving frames.

    test_sensor_fusion_gyro_events.png

    test_sensor_fusion_gyro_events

  • test_sensor_fusion_plot_rotations : Shows the alignment of the gyroscope and camera events. This plot must show matching movement between camera and gyroscope to +/-1 ms.

    test_sensor_fusion_plot_rotations.png

    test_sensor_fusion_plot_rotations

APIs tested:

Pass: Camera and gyroscope timestamps' offset is less than 1 ms as per CDD section 7.3.9 High Fidelity Sensors [C-2-14] .

test_video_stabilization

Tests that stabilized video rotates less than gyroscope.

APIs tested:

Pass: Max angle rotation over frames is less than 60% of gyroscope rotation.