מצלמה ITS

Camera Image Test Suite (ITS) היא מסגרת להפעלת בדיקות על תמונות המופקות על ידי מצלמת אנדרואיד. המטרה הכללית של כל בדיקה ב-ITS היא להגדיר את המצלמה בצורה ספציפית, לצלם צילום אחד או יותר ולבחון את הצילומים כדי לראות אם הם מכילים את נתוני התמונה הצפויים. רבות מהבדיקות דורשות שהמצלמה תהיה מכוונת לעבר תרשים יעד מסוים או שתהא מוארת בעוצמה מסוימת.

ITS ממוקם ברתמת הבדיקה של CTS Verifier ב- cts/apps/CameraITS . על המכשירים לעבור את מבחני ה-ITS התואמים לתכונות הנתמכות המפורסמות על ידי מסגרת המצלמה עבור אפליקציות צד שלישי כקבוצת משנה של CTS.

להכין

כדי להפעיל מבחני ITS, יש להגדיר את הדברים הבאים:

  • מכשיר בבדיקה (DUT)
  • מכונה מארח (לדוגמה, מחשב שולחני או מחשב נייד של לינוקס)
  • סצנה שהמצלמה מצלמת

הגדרת מכשיר בבדיקה (DUT).

כדי להגדיר DUT, בצע את השלבים הבאים:

  1. חבר את ה-DUT למחשב מארח באמצעות USB.
  2. הענק הרשאות למארח לגשת ל-DUT דרך ADB.
  3. התקן את אפליקציית CTS Verifier ( CtsVerifier.apk ) על המכשיר. למידע נוסף, ראה שימוש ב-CTS Verifier .

    extract root/out/host/linux-x86/cts-verfier/android-cts-verifier.zip
    cd android-cts-verifier
    adb install -r -g CtsVerifier.apk
    

הגדרת מארח

ITS מחייב את המחשב המארח להיות מחובר ל-DUT דרך USB, להיות מסוגל להשתמש ב-ADB עבור שליטה ותקשורת במכשיר, ולהתקין את התוכנה הנדרשת.

כדי להגדיר את המחשב המארח שלך, ודא שהתוכנה הבאה מותקנת.

כלי פלטפורמת SDK של אנדרואיד

יש להתקין את הכלים של Android SDK Platform ו-ADB חייב להיות בנתיב ההפעלה של המעטפת או הטרמינל שפועלים במחשב המארח. לגרסה הפומבית של כלי ה-Android SDK Platform, ראה הערות הגרסה של SDK Platform Tools .

פִּיתוֹן

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

מובלי

עבור אנדרואיד 12 ומעלה, יש להתקין את מסגרת הבדיקה של Mobly. Mobly מאפשרת לך להגדיר טאבלט DUT ותרשים במחלקה its_base_test . כדי להתקין את מסגרת הבדיקה של Mobly, הפעל:

pip install mobly

הגדרת סביבה

כדי להגדיר את סביבת הבדיקה, הפעל:

cd CameraITS
source build/envsetup.sh

פקודה זו בודקת את התקנת Python, מגדירה את משתנה הסביבה PYTHONPATH ומריצה בדיקות יחידה על המודולים utils/*.py . אם לא מודפסות שגיאות למסוף, הסביבה מוכנה להפעיל את בדיקות ה-ITS.

אם אתה רואה את הודעת השגיאה libtinfo.so.6: no version information available (required by /bin/sh) בזמן הריצה, הפעל את הפקודה הבאה כדי לשנות את שם הקובץ libtinfo.so.6 .

mv $ENV_DIRECTORY/lib/libtinfo.so.6 $ENV_DIRECTORY/lib/libtinfo.so.6.bak

הגדרת סצנה

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

לבדיקה ידנית, ודא את הדברים הבאים:

  • ה-DUT נמצא על חצובה
  • ה-DUT מופנה אל הסצנה הנכונה עבור כל מבחן. (תסריט הבדיקה של ITS מספק הנחיות לשנות את הגדרת הסצנה לפני התחלת בדיקות בסצנה חדשה.)
  • ה-DUT מחובר למחשב המארח באמצעות USB.
  • ה-DUT לא זז במהלך ריצת המבחן.
  • הסצנה מוארת במקור אור יציב ולא משתנה. (אל תשתמש באור ניאון כי זה מכניס הבהוב.)

סקריפט הבדיקה של ITS מציג הנחיה המבקשת מהמשתמש לשנות את הגדרת הסצנה לפני תחילת בדיקות בסצנה חדשה.

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

קבצי תצורה

באמצעות המסגרת של Mobly, עליך ליצור קובץ תצורה config.yml כדי להגדיר את ערכת הבדיקה של Mobly. להלן דוגמאות למקרי שימוש שונים.

קובץ config.yml של סצנות מבוססות טאבלט

להלן דוגמה לקובץ config.yml עבור סצנות מבוססות טאבלט. עבור בדיקות מבוססות טאבלט, מילת המפתח TABLET חייבת להיות בשם מיטת הבדיקה. במהלך האתחול, מאתחל המבחן של Mobly את הפרמטרים בקובץ ומעביר אותם לבדיקות הבודדות.

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"  # "True" or "False"; quotes needed
      lighting_cntl: <controller-type>  # "arduino" or "None"; quotes needed
      lighting_ch: <controller-channel>
      camera: 0
      foldable_device: "False". # set "True" if testing foldable
      scene: <scene-name>  # if <scene-name> runs all scenes

כדי להפעיל את מיטת הבדיקה, הפעל את tools/run_all_tests.py . אם אין ערכי שורת פקודה המציינים מצלמות או סצנות, הבדיקה מופעלת עם ערכי הקובץ config.yml . אם יש ערכי שורת פקודה עבור מצלמות או סצנות, אלה עוקפים את הערכים בקטע TestParams של קובץ config.yml . לדוגמה:

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 scene config.yml קובץ

להלן דוגמה לקובץ config_yml לבדיקות sensor_fusion . עבור בדיקת sensor_fusion , מילת המפתח SENSOR_FUSION חייבת להיות בשם ערכת הבדיקה. אנדרואיד 13 ומעלה תומך רק בבקר Arduino עבור היתוך חיישנים בגלל תצוגה מקדימה ובדיקות ייצוב וידאו. אנדרואיד 12 תומך בבקרי Arduino ו-Canakit.

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

להלן דוגמה לקובץ config.yml עם ערכות בדיקה מרובות, מיטת בדיקה של טאבלט ו- sensor_fusion . ערכת הבדיקה הנכונה נקבעת על פי הסצנות הנבדקות.

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

בדיקה ידנית קובץ config.yml

להלן דוגמה לקובץ config.yml לבדיקה ידנית. מאנדרואיד 14, בדיקות ידניות נתמכות עבור כל הבדיקות למעט מבחני scene_extensions . לבדיקה ידנית, מילת המפתח MANUAL חייבת להיות בשם מיטת הבדיקה. כמו כן, קטע AndroidDevice לא יכול לכלול קטע סידורי או תווית לטאבלט.

TestBeds:
  - Name: TEST_BED_MANUAL
    Controllers:
        AndroidDevice:
          - serial: 8A9X0NS5Z
            label: dut

    TestParams:
      debug_mode: "False"
      camera: 0
      scene: 1

הפעלת מבחני ITS

סעיף זה מתאר כיצד להפעיל בדיקות ITS.

הפעלת מבחנים

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

  1. פתח את אפליקציית CTS Verifer. בתפריט הבדיקות, בחר בדיקת מצלמה ITS .

  2. מהמחשב המארח, הפעל את בדיקות ה-ITS מהספרייה CameraITS/ . לדוגמה, עבור מכשיר עם מצלמה קדמית ואחורית, הפעל את הפקודה הבאה:

    python tools/run_all_tests.py
    

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

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

    Preparing to run ITS on camera 0
    Start running ITS on camera:  0
    Press Enter after placing camera 0 to frame the test scene:
    scene1_1
    The scene setup should be: A grey card covering at least the   middle 30% of the scene
    Running vendor 3A on device
    Capture an image to check the test scene
    Capturing 1 frame with 1 format [yuv]
    Please check scene setup in /tmp/tmpwBOA7g/0/scene1_1.jpg
    Is the image okay for ITS scene1_1? (Y/N)
    

    כל הפעלה של הסקריפט מדפיסה יומן המציג PASS, FAIL או SKIP עבור כל מבחן ITS, כאשר SKIP מציין שהבדיקה עברה מכיוון שהמכשיר לא פרסם את היכולת הבסיסית הנבדקת. לדוגמה, אם מכשיר אינו מפרסם דרך ממשקי המצלמה שהוא תומך ב-DNG, בדיקות הקשורות ללכידת קבצי DNG מדלגים ונספרות כמעבר.

  3. כדי לאשר שהבדיקות עמדו בדרישות הבדיקה, הקש על כפתור הסימון הירוק. הערך של בדיקת מצלמה ITS בתפריט בדיקות CTS Verifier הופכת לירוקה ומסמלת שהטלפון עבר את המצלמה ITS.

בדיקת DUT מקבילה

מכשירים עם אנדרואיד 14 ומעלה תומכים בבדיקות DUT מקבילות. זה מאפשר לך לבדוק DUTs במקביל לכמה אסדות כדי להאיץ את הבדיקות הכוללות. לדוגמה, בדיקה מקבילה מאפשרת לך לבדוק מצלמה 0 במתקן אחד ומצלמה 1 במתקן אחר בו זמנית. כל הבדיקות עבור הפעלות בדיקה מקבילות מצטברות בהפעלת CTS Verifier ב-DUT הפניה. עליך להריץ בדיקות מקבילות עם בקרת תאורה Arduino, שכן בקרת תאורה ידנית אינה נתמכת בבדיקות מקבילות. ודא שערוץ אחר באותו בקר Arduino שולט בתאורה עבור כל מתקן.

להלן קובץ config.yml לדוגמה המגדיר שלוש ערכות בדיקה להפעלה במקביל.

TestBeds:
  - Name: TEST_BED_TABLET_SCENES_INDEX_0
    Controllers:
        AndroidDevice:
          - serial: <device-id-0>
            label: dut
          - serial: <tablet-id-0>
            label: tablet
    TestParams:
      brightness: 192
      chart_distance: 22.0
      debug_mode: "False"
      lighting_cntl: "arduino"
      lighting_ch: <controller-channel-0>
      camera: 0
      scene: <scene-name>  # if <scene-name> left as-is runs all scenes
      foldable_device: "False"

  - Name: TEST_BED_TABLET_SCENES_INDEX_1
    Controllers:
        AndroidDevice:
          - serial: <device-id-1>
            label: dut
          - serial: <tablet-id-1>
            label: tablet
    TestParams:
      brightness: 192
      chart_distance: 22.0
      debug_mode: "False"
      lighting_cntl: "arduino"
      lighting_ch: <controller-channel-1>
      camera: 1
      scene: <scene-name>  # if <scene-name> left as-is runs all scenes
      foldable_device: "False"

  # TEST_BED_SENSOR_FUSION represents testbed index 2
  # Parallel sensor_fusion is currently unsupported due to Arduino requirements
  - Name: TEST_BED_SENSOR_FUSION
    # Test configuration for sensor_fusion
    Controllers:
        AndroidDevice:
          - serial: <device-id>
            label: dut
    TestParams:
      fps: 30
      img_size: 640,480
      test_length: 7
      debug_mode: "False"
      chart_distance: 25
      rotator_cntl: "arduino"
      rotator_ch: <controller-channel-2>
      camera: <camera-id>
      foldable_device: "False"
      tablet_device: "False"
      lighting_cntl: "None"
      lighting_ch: <controller-channel>
      scene: "sensor_fusion"

כדי להפעיל את מיטות הבדיקה במקביל, השתמש בפקודה הבאה:

for i in 0 1 2; do python3 tools/run_all_tests.py testbed_index=$i num_testbeds=3 & done; wait

דגם רעש DNG

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

יישום מודל רעש

כדי ליישם מודל רעש, בצע את השלבים הבאים כדי ליצור מודל רעש ולהטמיע את המודל ב-HAL של המצלמה.

  1. כדי ליצור מודל רעש עבור כל מצלמה, הפעל את הסקריפט dng_noise_model.py בספריית tools . זה מוציא קטע קוד C. למידע נוסף על אופן הגדרת המצלמה וסביבת הצילום, עיין במסמך DngNoiseModel.pdf בספריית tools .

  2. כדי ליישם את מודל הרעש עבור המכשיר, גזרו והדביקו את קטע הקוד C ב-HAL של המצלמה.

אימות מודל רעש

מבחן ITS האוטומטי tests/scene1_1/test_dng_noise_model.py מאמת את מודל הרעש על ידי אימות ערכי הרעש עבור החשיפה וההגברה של הצילום שסופקו בנתוני המצלמה נכונים.