מצלמה ITS

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

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

הגדרה

כדי להריץ בדיקות ITS, יש להגדיר את הפריטים הבאים:

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

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

כדי להגדיר DUT:

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

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

הגדרת המארח

לפי הדרישות של טכנולוגיית ה-IT, המכונה המארחת צריכה להיות מחוברת ל-DUT באמצעות USB, יכולה להשתמש ב-ADB לשליטה במכשירים ולתקשורת, ויש להם והתוכנה הותקנה.

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

כלי פלטפורמת SDK של Android

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

Python

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

Mobly

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

pip install mobly

הגדרת סביבה

כדי להגדיר את סביבת הבדיקה, מריצים את:

cd CameraITS
source build/envsetup.sh

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

הגדרת סצנות

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

כדי לבצע בדיקות ידניות, יש לוודא את הפרטים הבאים:

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

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

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

קובצי תצורה

באמצעות Mobly framework, צריך ליצור קובץ תצורה של 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

קובץ config.yml לחיישן סצנה

בהמשך מופיע קובץ config_yml לדוגמה לבדיקות של sensor_fusion. כדי לבצע בדיקה של sensor_fusion, מילת המפתח SENSOR_FUSION חייבת להיכלל בקבוצת הבדיקה שם. ב-Android מגרסה 13 ואילך יש תמיכה רק ב-Arduino של שילוב החיישן לזיהוי התצוגה המקדימה ובדיקת ייצוב הווידאו. מערכת Android 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 עם sensor fusion Box, מריצים את:

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 לבדיקות ידניות. מאת Android 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, FAIL* או SKIP לכל בדיקת ITS. FAIL* מציין שהבדיקה נכשלה אבל מכיוון שעדיין לא חלה חובה על הבדיקה, הבדיקה תדווח כPASS ל-CtsVerifier. SKIP מציין שהבדיקה עברה כי המכשיר לא פרסם את היכולת הבסיסית שנבדקת. עבור לדוגמה, אם המכשיר לא מפרסם דרך ממשקי המצלמות הוא תומך ב-DNG, המערכת מדלגת על בדיקות שקשורות לתיעוד קובץ DNG וסופרת אותן בתור PASS.

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

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

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

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

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