ภาพรวม ITS ของกล้อง

Camera Image Test Suite (ITS) เป็นเฟรมเวิร์กสำหรับเรียกใช้การทดสอบกับรูปภาพที่สร้างโดยกล้อง Android เป้าหมายทั่วไปของการทดสอบแต่ละรายการใน ITS คือการกำหนดค่ากล้องในลักษณะที่เฉพาะเจาะจง ถ่ายภาพ 1 ภาพขึ้นไป และตรวจสอบภาพเพื่อดูว่ามีข้อมูลรูปภาพที่คาดไว้หรือไม่ การทดสอบหลายรายการกำหนดให้กล้องต้องชี้ไปที่ชาร์ตเป้าหมายที่เฉพาะเจาะจงหรือส่องสว่างด้วยความเข้มที่เฉพาะเจาะจง

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 Verifier

    extract root/out/host/linux-x86/cts-verfier/android-cts-verifier.zip
    cd android-cts-verifier
    adb install -r -g CtsVerifier.apk
  4. เปิดแอปกล้องเริ่มต้นใน DUT และปิดหน้าต่างทั้งหมดที่ปรากฏขึ้นเมื่อเปิดแอปเพื่อหลีกเลี่ยงการรบกวนระหว่างการทดสอบ

การตั้งค่าโฮสต์

ITS กำหนดให้เครื่องโฮสต์ต้องเชื่อมต่อกับ DUT ผ่าน USB, สามารถใช้ ADB เพื่อควบคุมและสื่อสารกับอุปกรณ์ และติดตั้งซอฟต์แวร์ที่จำเป็น

หากต้องการตั้งค่าเครื่องโฮสต์ ให้ตรวจสอบว่าได้ติดตั้งซอฟต์แวร์ต่อไปนี้แล้ว

เครื่องมือแพลตฟอร์ม Android SDK

คุณต้องติดตั้งเครื่องมือแพลตฟอร์ม Android SDK และ ADB ต้องอยู่ในเส้นทางที่เรียกใช้งานได้ของเชลล์หรือเทอร์มินัลที่ทำงานในเครื่องโฮสต์ สำหรับเครื่องมือแพลตฟอร์ม Android SDK เวอร์ชันที่เผยแพร่ต่อสาธารณะ โปรดดู หมายเหตุประจำรุ่นของเครื่องมือแพลตฟอร์ม SDK

Python

คุณต้องติดตั้ง Python ในเครื่องโฮสต์ เราขอแนะนำให้ใช้การกระจาย Python แบบรวมชุดเพื่อให้แน่ใจว่ารองรับเวอร์ชันที่เข้ากันได้ ดูรายละเอียดเกี่ยวกับ Python และเวอร์ชันแพ็กเกจที่จะติดตั้งสำหรับการเผยแพร่ที่เฉพาะเจาะจงได้ในหมายเหตุประจำรุ่นของ Camera ITS สำหรับการเผยแพร่ที่เกี่ยวข้อง

Mobly

สำหรับ Android 12 ขึ้นไป ให้ติดตั้งเฟรมเวิร์กการทดสอบ Mobly Mobly ช่วยให้คุณตั้งค่า DUT และแท็บเล็ตชาร์ตในคลาส its_base_test ได้ หากต้องการติดตั้งเฟรมเวิร์กการทดสอบ Mobly ให้เรียกใช้คำสั่งต่อไปนี้

pip install mobly

การตั้งค่าสภาพแวดล้อม

หากต้องการตั้งค่าสภาพแวดล้อมการทดสอบ ให้เรียกใช้คำสั่งต่อไปนี้

cd CameraITS
source build/envsetup.sh

คำสั่งนี้จะตรวจสอบการติดตั้ง Python, ตั้งค่าตัวแปรสภาพแวดล้อม PYTHONPATH และเรียกใช้การทดสอบหน่วยในโมดูล utils/*.py หากไม่มีข้อผิดพลาดปรากฏในเทอร์มินัล แสดงว่าสภาพแวดล้อมพร้อมที่จะเรียกใช้การทดสอบ ITS แล้ว

การตั้งค่าฉาก

หากต้องการตั้งค่าฉาก เราขอแนะนำให้ใช้การตั้งค่า Camera ITS-in-a-box เพื่อ ความสะดวกในการทำงานอัตโนมัติ ความน่าเชื่อถือ และประสิทธิภาพในการทดสอบ แท่นทดสอบ ITS-in-a-box รองรับข้อกำหนดด้านแสง การจัดกึ่งกลาง และการเปลี่ยนชาร์ตทั้งหมดสำหรับ ITS นอกจากนี้ คุณยังต้องใช้ ITS-in-a-box สำหรับ การทดสอบส่วนขยายกล้อง ด้วย

สำหรับการทดสอบด้วยตนเอง ให้ตรวจสอบสิ่งต่อไปนี้

  • DUT อยู่บนขาตั้งกล้อง
  • DUT ชี้ไปที่ฉากที่ถูกต้องสำหรับการทดสอบแต่ละรายการ (สคริปต์การทดสอบ ITS จะแสดงข้อความแจ้งให้เปลี่ยนการตั้งค่าฉากก่อนที่จะเริ่มการทดสอบในฉากใหม่)
  • DUT เชื่อมต่อกับเครื่องโฮสต์ผ่าน USB
  • DUT ไม่เคลื่อนไหวระหว่างการทดสอบ
  • ฉากส่องสว่างด้วยแหล่งกำเนิดแสงที่คงที่และไม่กระพริบ (อย่าใช้หลอดฟลูออเรสเซนต์เพราะจะทำให้เกิดการกระพริบ)

สคริปต์การทดสอบ ITS จะแสดงข้อความแจ้งให้ผู้ใช้เปลี่ยนการตั้งค่าฉากก่อนที่จะเริ่มการทดสอบในฉากใหม่

คุณต้องตั้งค่าการวางแนวโทรศัพท์เพื่อให้กล้องถ่ายภาพโดยไม่มีการหมุน วิธีที่ง่ายที่สุดในการตรวจสอบคือใช้ฉากใบหน้าใน scene2 โทรศัพท์ส่วนใหญ่จะวางแนวแนวนอนโดยหมุนโทรศัพท์ทวนเข็มนาฬิกาสำหรับกล้องหลัง และหมุนตามเข็มนาฬิกาสำหรับกล้องหน้า

ไฟล์การกำหนดค่า

เมื่อใช้เฟรมเวิร์ก 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=0 scenes=scene_tele
python tools/run_all_tests.py camera=0.4 scenes=4,scene6_tele

พารามิเตอร์ chart_scaling

ใน Android 17 ขึ้นไป พารามิเตอร์ chart_scaling จะรวมอยู่ใน config.yml สำหรับ TEST_BED_TABLET_SCENES พารามิเตอร์นี้ช่วยแก้ปัญหาการปรับขนาดชาร์ตสำหรับอุปกรณ์กล้องเทเลที่มีมุมมองภาพ (FoV) กว้างขึ้น ป้องกันการครอบตัดฉาก และบังคับใช้การโฟกัสอุปกรณ์ที่เหมาะสมระหว่างการทดสอบ

ค่าที่รองรับสำหรับ chart_scaling คือ 1, 0.33, 0.5 หรือ 0.67 โดยมี None เป็นค่าเริ่มต้น แนวทางนี้ช่วยให้อุปกรณ์ใช้ค่าตัวคูณมาตราส่วนที่เหมาะสมซึ่งปรับให้เหมาะกับข้อกำหนดเฉพาะของอุปกรณ์ โดยคงการทดสอบฟังก์ชันในอุปกรณ์ทั้งหมดไว้

หากตั้งค่า chart_scaling เป็น None การทดสอบจะกำหนดปัจจัยการปรับขนาดโดยอัตโนมัติโดยใช้ chart_scaling_logic ไม่เช่นนั้น ระบบจะใช้ค่าที่ระบุใน config.yml หรือแสดงข้อผิดพลาดหากการปรับขนาดไม่พร้อมใช้งาน

ต่อไปนี้เป็นตัวอย่าง config.yml ที่มีพารามิเตอร์ chart_scaling

TestBeds:
  -   Name: TEST_BED_TABLET_SCENES  # Need 'tablet' in name for tablet scenes
    # Use TEST_BED_MANUAL for manual testing and remove below lines:
    #     - serial <tablet_id>
    #       label: tablet
    # Test configuration for scenes[0:4, 6]
    Controllers:
        AndroidDevice:
          -   serial: <device-id>  # quotes needed if serial id entirely numeric
            label: dut
          -   serial: <tablet-id>  # quotes needed if serial id entirely numeric
            label: tablet
    TestParams:
      brightness: 192
      chart_distance: 22.0
      debug_mode: "False"  # quotes needed
      lighting_cntl: <controller-type>  # can be arduino or "None"
      lighting_ch: <controller-channel>
      camera: <camera-id>
      scene: <scene-name>  # if <scene-name> runs all scenes
      foldable_device: "False"  # "True" if testing foldable device
      chart_scaling: "None"  # use the values available for scene to be tested
      resultstore_upload: "False"  # "True" if results should be uploaded to ResultStore

คุณต้องทำการปรับเปลี่ยนฝั่งการทดสอบเพื่อเปิดใช้ความสามารถในการปรับขนาดชาร์ตของ Camera ITS หากการทดสอบที่คุณใช้อยู่ไม่รองรับฟีเจอร์นี้ โปรดรายงานข้อบกพร่อง

ต่อไปนี้เป็นตัวอย่างการเปลี่ยนแปลงฝั่งการทดสอบที่มีพารามิเตอร์ chart_scaling

# load chart for scene
      its_session_utils.load_scene(
          cam, props, self.scene, self.tablet, self.chart_distance,
          chart_scaling=self.chart_scaling)

ไฟล์ config.yml ของฉาก sensor_fusion

ต่อไปนี้เป็นตัวอย่างไฟล์ 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 ด้วย กล่องรวมเซ็นเซอร์ ให้เรียกใช้คำสั่งต่อไปนี้

python tools/run_all_tests.py scenes=sensor_fusion
python tools/run_all_tests.py scenes=sensor_fusion camera=0
python tools/run_all_tests.py scenes=scene_flash,feature_combination
python tools/run_all_tests.py scenes=checkerboard camera=1

ไฟล์ 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

ไฟล์ config.yml ของการทดสอบแท่นทดสอบ Gen2

ต่อไปนี้เป็นตัวอย่างไฟล์ config.yml ของแท่นทดสอบ TEST_BED_GEN2 แท่นทดสอบนี้ใช้สำหรับการทดสอบ scene_ip ซึ่งใช้แท่นทดสอบ Gen2 ตัวอย่างต่อไปนี้แสดงพารามิเตอร์แท่นทดสอบเมื่อแท่นทดสอบ Gen2 พร้อมใช้งานและไม่ได้ข้ามการทดสอบ scene_ip

Testbeds
  - Name: TEST_BED_GEN2
    # Test configuration for scene_ip/test_default_jca_ip.py
    Controllers:
        AndroidDevice:
          - serial: <device-id>  # quotes needed if serial id entirely numeric
            label: dut
    TestParams:
      debug_mode: "False"  # quotes are needed here
      chart_distance: 30
      rotator_cntl: gen2_rotator   # gen2 rig specific. "None" if gen2 rig not available
      rotator_ch: 0
      camera: <camera-id>
      foldable_device: "False"  # "True" if testing foldable device
      tablet_device: "False"  # "True" if testing tablet device
      lighting_cntl: gen2_lights  # gen2 rig specific. "None" if gen2 rig not available
      lighting_ch: 1
      scene: scene_ip

ตัวอย่างต่อไปนี้แสดงพารามิเตอร์แท่นทดสอบเมื่อแท่นทดสอบ Gen2 ไม่พร้อมใช้งานและข้ามการทดสอบ scene_ip

Testbeds
  - Name: TEST_BED_GEN2
    # Test configuration for scene_ip/test_default_jca_ip.py
    Controllers:
        AndroidDevice:
          - serial: <device-id>  # quotes needed if serial id entirely numeric
            label: dut
    TestParams:
      debug_mode: "False"  # quotes are needed here
      chart_distance: 30
      rotator_cntl: "None"   # gen2 rig specific. "None" if gen2 rig not available
      rotator_ch: <controller-channel>
      camera: <camera-id>
      foldable_device: "False"  # "True" if testing foldable device
      tablet_device: "False"  # "True" if testing tablet device
      lighting_cntl: "None"  # gen2 rig specific. "None" if gen2 rig not available
      lighting_ch: <controller-channel>
      scene: scene_ip

หากต้องการเรียกใช้การทดสอบ scene_ip ให้ใช้คำสั่งใดคำสั่งหนึ่งต่อไปนี้

python tests/scene_ip/test_default_jca_ip.py -c config.yml
python tools/run_all_tests.py camera=<camera-id> scenes=scene_ip

การเรียกใช้การทดสอบ ITS

ส่วนนี้จะอธิบายวิธีเรียกใช้การทดสอบ ITS

การเรียกใช้การทดสอบ

หลังจากตั้งค่าอุปกรณ์ เครื่องโฮสต์ (รวมถึงสภาพแวดล้อม) และฉากจริงแล้ว ให้เรียกใช้การทดสอบ ITS โดยใช้กระบวนการต่อไปนี้

  1. เปิดแอป CTS Verifier แล้วเลือกการทดสอบ Camera ITS ในเมนูการทดสอบ สำหรับ Android 17 ขึ้นไป การทดสอบ sensor_fusion และ feature_combination จะอยู่ในกิจกรรมเพิ่มเติมที่ชื่อว่าการทดสอบแท่นทดสอบการรวมเซ็นเซอร์ของ Camera 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. หากต้องการยืนยันว่าการทดสอบเป็นไปตามข้อกำหนดการทดสอบ ให้แตะปุ่มเครื่องหมายถูกสีเขียว จากนั้นรายการการทดสอบ Camera ITS ในเมนูการทดสอบ CTS Verifier จะเปลี่ยนเป็นสีเขียวและแสดงว่าโทรศัพท์ผ่านการทดสอบ Camera ITS แล้ว

การทดสอบ DUT แบบขนาน

อุปกรณ์ที่ใช้ Android 14 ขึ้นไปรองรับการทดสอบ DUT แบบขนาน ซึ่งช่วยให้คุณทดสอบ DUT แบบขนานกับแท่นทดสอบหลายแท่นเพื่อเร่งการทดสอบโดยรวม ตัวอย่างเช่น การทดสอบแบบขนานช่วยให้คุณทดสอบกล้อง 0 ในแท่นทดสอบหนึ่งและกล้อง 1 ในแท่นทดสอบอื่นพร้อมกันได้ สำหรับ Android 17 ขึ้นไป เนื่องจากมีการแยกการทดสอบ Camera ITS ออกเป็น 2 กิจกรรม คุณจึงเรียกใช้การทดสอบ sensor_fusion และ feature_combination ใน DUT หนึ่ง และการทดสอบอื่นๆ ใน DUT อีกเครื่องแบบขนานได้ ระบบจะรวบรวมการทดสอบทั้งหมดสำหรับเซสชันการทดสอบแบบขนานไว้ในเซสชัน CTS Verifier ใน DUT อ้างอิง คุณต้องเรียกใช้การทดสอบแบบขนานด้วยการควบคุมแสง Arduino เนื่องจากระบบไม่รองรับการควบคุมแสงด้วยตนเองในการทดสอบแบบขนาน ตรวจสอบว่าช่องอื่นในตัวควบคุม Arduino เดียวกันควบคุมแสงสำหรับแท่นทดสอบแต่ละแท่น

ต่อไปนี้เป็นตัวอย่างไฟล์ config.yml ที่กำหนดแท่นทดสอบ 3 แท่นเพื่อเรียกใช้แบบขนาน

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

ส่งผลการทดสอบรวม

ใน Android 17 ขึ้นไป คุณสามารถส่งผลการทดสอบ Camera ITS รวมเพื่อขออนุมัติบิลด์ได้ CTS Verifier ช่วยให้คุณทดสอบฉากหลายฉากในอุปกรณ์หลายเครื่องพร้อมกัน และรวบรวมผลการทดสอบจากรายงาน CTS Verifier หลายรายการ (จากการทดสอบหรืออุปกรณ์ต่างๆ) ไว้ในรายการส่งเดียว

กระบวนการส่ง

หากต้องการส่งผลการทดสอบ Camera ITS รวมเพื่อขออนุมัติบิลด์ ให้ทำตามขั้นตอนต่อไปนี้

  1. เตรียมอุปกรณ์: รวบรวมอุปกรณ์ที่อยู่ระหว่างการทดสอบ (DUT) 2-3 เครื่องซึ่งมีรหัสเฉพาะของบิลด์เหมือนกันทุกประการ
  2. ติดตั้ง CTS Verifier: ติดตั้ง CTS Verifier APK เวอร์ชันล่าสุด ซึ่งรับได้จากเครื่องมือสำรวจบิลด์ที่ให้ไว้
  3. เรียกใช้การทดสอบแบบขนาน:

    1. ติดตั้ง DUT ในแท่นทดสอบแยกกัน
    2. เรียกใช้ฉาก Camera ITS ที่แตกต่างกันในอุปกรณ์แต่ละเครื่องพร้อมกัน
    3. การรวบรวมรายงาน: ดึงรายงาน CTS Verifier หลังจากเรียกใช้แต่ละครั้ง ซึ่งรวมถึงรายงานที่ฉากล้มเหลว เรียกใช้ฉากที่ล้มเหลวอีกครั้งในการเรียกใช้ครั้งต่อๆ ไปเท่านั้น
  4. ส่งรายงาน: อัปโหลดรายงาน CTS Verifier หลายรายการที่รวบรวมจากอุปกรณ์ทั้งหมด

  5. ตรวจสอบผลลัพธ์: เมื่ออัปโหลดรายงานแล้ว ให้ตรวจสอบผลลัพธ์รวมดังนี้

    • ส่วนการวิเคราะห์การทดสอบ จะแสดงรายการฉากทั้งหมดที่เรียกใช้
    • ฉากที่ไม่ได้เรียกใช้หรือล้มเหลวจะแสดงอยู่ในส่วนล้มเหลว

      result-aggregation-image-1

      รูปที่ 1 เอกสารประกอบของฉากที่ไม่ได้เรียกใช้หรือล้มเหลว

    • ฉากที่ผ่านจะแสดงอยู่ในส่วนผ่านรวม

      result-aggregation-image-2

      รูปที่ 2 ฉากที่จัดอยู่ในหมวดหมู่ผ่านรวม

สถานะการอนุมัติบิลด์

ระบบจะอนุมัติบิลด์เมื่อฉากที่จำเป็นทั้งหมดเสร็จสมบูรณ์ในรายงานรวม

โมเดลเสียง DNG

อุปกรณ์ที่โฆษณาความสามารถในการถ่ายภาพ RAW หรือ DNG ต้องระบุโมเดลเสียงในข้อมูลเมตาของผลการถ่ายภาพของภาพ RAW แต่ละภาพ โมเดลเสียงนี้ต้องฝังอยู่ใน Camera HAL สำหรับกล้องแต่ละตัว (เช่น กล้องหน้าและกล้องหลัง) ในอุปกรณ์ที่อ้างว่ารองรับ

การใช้งานโมเดลเสียง

หากต้องการใช้งานโมเดลเสียง ให้ทำตามขั้นตอนต่อไปนี้เพื่อสร้างโมเดลเสียงและฝังโมเดลลงใน Camera HAL

  1. หากต้องการสร้างโมเดลเสียงสำหรับกล้องแต่ละตัว ให้เรียกใช้สคริปต์ dng_noise_model.py ในไดเรกทอรี tools ซึ่งจะแสดงข้อมูลโค้ด C ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีตั้งค่ากล้องและสภาพแวดล้อมการถ่ายภาพได้ในเอกสาร DngNoiseModel.pdf ในไดเรกทอรี tools

  2. หากต้องการใช้งานโมเดลเสียงสำหรับอุปกรณ์ ให้ตัดและวางข้อมูลโค้ด C ลงใน Camera HAL

การตรวจสอบโมเดลเสียง

การทดสอบ ITS อัตโนมัติ tests/scene1_1/test_dng_noise_model.py จะตรวจสอบโมเดลเสียงโดยยืนยันว่าค่าเสียง สำหรับการเปิดรับแสงและการเพิ่มค่าของภาพที่ระบุไว้ในข้อมูลกล้องถูกต้อง

การทดสอบที่ผ่านแบบเฉียดฉิว (สถานะการทดสอบ PASS*)

ใน Android 17 ขึ้นไป การทดสอบที่ ผ่านแบบเฉียดฉิว (PASS*) หมายความว่าการทดสอบผ่าน แต่เมตริกประสิทธิภาพอยู่ใกล้กับเกณฑ์การผ่านที่กำหนดไว้ล่วงหน้ามาก แม้ว่าในทางเทคนิคแล้วการทดสอบจะเป็นไปตามเกณฑ์การผ่าน แต่การที่เมตริกอยู่ใกล้กับขอบเขตการล้มเหลวแสดงให้เห็นว่าจำเป็นต้องมีการตรวจสอบอย่างละเอียด

ประโยชน์ของการทดสอบที่ผ่านแบบเฉียดฉิว

สถานะ PASS* มีสิทธิประโยชน์หลายประการดังนี้

  • ระบบเตือนล่วงหน้า: ระบุการทดสอบที่กำลังจะล้มเหลว ช่วยให้ทีมแก้ปัญหาได้ก่อนที่ปัญหาจะนำไปสู่การล้มเหลวโดยสิ้นเชิง

  • การเพิ่มประสิทธิภาพเชิงรุก: สนับสนุนให้ทีมเพิ่มประสิทธิภาพการทดสอบและโค้ดที่ทำงานอยู่ในช่วงล่างของช่วงที่ยอมรับได้ ซึ่งจะช่วยปรับปรุงความเสถียรโดยรวม

  • คุณภาพที่ดีขึ้น: ช่วยรักษาระดับคุณภาพที่สูงขึ้นโดยการแจ้งพื้นที่ที่อาจเกิดการถดถอยในอนาคตเมื่อมีการเปลี่ยนแปลงโค้ดเล็กน้อย

  • ลดเวลาในการแก้ไขข้อบกพร่อง: การตรวจพบการทดสอบ PASS* ตั้งแต่เนิ่นๆ จะช่วยลดเวลาและความพยายามที่ต้องใช้ในการแก้ไขข้อบกพร่องที่ล้มเหลวโดยสิ้นเชิงในอนาคตได้อย่างมาก

รายละเอียด PASS*

สถานะ PASS* มีรายละเอียดดังนี้

  • การกำหนดเกณฑ์: ระบบจะกำหนดเกณฑ์การผ่านแบบเฉียดฉิวที่เฉพาะเจาะจงสำหรับการทดสอบที่เกี่ยวข้องแต่ละรายการใน Camera ITS

  • การตรวจหาอัตโนมัติ: ระบบการทดสอบอัตโนมัติจะตรวจหาและจัดหมวดหมู่การทดสอบเป็น PASS* ตามเกณฑ์ที่กำหนด

  • กลไกการแจ้งเตือน: ทีมจะได้รับการแจ้งเตือนอัตโนมัติสำหรับการทดสอบที่ติดป้ายกำกับเป็น PASS* ซึ่งจะนำทีมไปตรวจสอบการทดสอบที่เฉพาะเจาะจงและเมตริกของการทดสอบนั้น

  • การรายงาน: สถานะการผ่านแบบเฉียดฉิวจะระบุไว้อย่างชัดเจนในรายงานการทดสอบและแดชบอร์ดเพื่อให้มองเห็นได้ชัดเจนขึ้นเป็น PASS* ในรายงาน ItsTestSummary ซึ่งคล้ายกับ Fail* สำหรับการทดสอบ not_yet_mandated การทดสอบจะยังคงมีสถานะเป็นสีเขียว เนื่องจากยังคงผ่านภายในเกณฑ์ที่กำหนดไว้ เพื่อหลีกเลี่ยงความสับสนเพิ่มเติม สถานะ PASS* ใช้ได้กับคลาสการทดสอบเท่านั้น ไม่ใช่ทั้งฉาก เช่น ระบบอาจพิจารณาว่า Scene_0 เป็น PASS แม้ว่า test_jitter และ test_metadata จะเป็น PASS*

  • การตรวจสอบ: ระบบจะเก็บรวบรวมข้อมูลประสิทธิภาพในการทดสอบที่ผ่านแบบเฉียดฉิวในอุปกรณ์ ซึ่งจะช่วยให้ตรวจสอบการปรับปรุงกล้องในอนาคตที่ OEM ทำขึ้นได้หากการทดสอบเหล่านี้เปลี่ยนไปเป็นสถานะ PASS

ต่อไปนี้เป็นตัวอย่างผลการทดสอบที่มี PASS*

INFO:root:Reporting camera 1 ITS results to CtsVerifier
INFO:root:ITS results to CtsVerifier: {'scene0': {'result': 'PASS', 'TEST_STATUS': [{'test': 'test_jitter', 'status': 'PASS*'}, {'test': 'test_metadata', **'status': 'PASS*'**}, {'test': 'test_request_capture_match', 'status': 'PASS'}, {'test': 'test_sensor_events', 'status': 'PASS'}, {'test': 'test_solid_color_test_pattern', 'status': 'PASS'}, {'test': 'test_test_patterns', 'status': 'SKIP'}, {'test': 'test_tonemap_curve', 'status': 'SKIP'}, {'test': 'test_unified_timestamps', 'status': 'PASS'}, {'test': 'test_vibration_restriction', 'status': 'PASS'}], 'mpc_metrics': [], 'performance_metrics': [], 'feature_query_proto': [], 'feature_query_proto_path': [], 'summary': '/tmp/CameraITS_zojk4sdr/cam_id_1/scene0/scene_test_summary.txt', 'start': 1754330630345, 'end': 1754330764534}, 'scene1_1': {'result': 'NOT_EXECUTED'}, 'scene1_2': {'result': 'NOT_EXECUTED'}, 'scene1_3': {'result': 'NOT_EXECUTED'}, 'scene2_a': {'result': 'NOT_EXECUTED'}, 'scene2_b': {'result': 'NOT_EXECUTED'}, 'scene2_c': {'result': 'NOT_EXECUTED'}, 'scene2_d': {'result': 'NOT_EXECUTED'}, 'scene2_e': {'result': 'NOT_EXECUTED'}, 'scene2_f': {'result': 'NOT_EXECUTED'}, 'scene2_g': {'result': 'NOT_EXECUTED'}, 'scene3': {'result': 'NOT_EXECUTED'}, 'scene4': {'result': 'NOT_EXECUTED'}, 'scene6': {'result': 'NOT_EXECUTED'}, 'scene7': {'result': 'NOT_EXECUTED'}, 'scene8': {'result': 'NOT_EXECUTED'}, 'scene9': {'result': 'NOT_EXECUTED'}, 'scene_extensions/scene_hdr': {'result': 'NOT_EXECUTED'}, 'scene_extensions/scene_low_light': {'result': 'NOT_EXECUTED'}, 'scene_tele/scene6_tele': {'result': 'NOT_EXECUTED'}, 'scene_tele/scene7_tele': {'result': 'NOT_EXECUTED'}, 'scene_video': {'result': 'NOT_EXECUTED'}, 'scene5': {'result': 'NOT_EXECUTED'}, 'sensor_fusion': {'result': 'NOT_EXECUTED'}, 'feature_combination': {'result': 'NOT_EXECUTED'}, 'scene_flash': {'result': 'NOT_EXECUTED'}, 'scene_ip': {'result': 'NOT_EXECUTED'}}

เราขอแนะนำให้พาร์ทเนอร์ดำเนินการต่อไปนี้

  • ตรวจสอบการแจ้งเตือน PASS*
  • ตรวจสอบสาเหตุหลักของการทดสอบ PASS*
  • เพิ่มประสิทธิภาพการทดสอบและโค้ดที่ระบุว่าเป็น PASS* เชิงรุก

สถานะ PASS* มีเป้าหมายเพื่อเพิ่มความแข็งแกร่งและความน่าเชื่อถือของการทดสอบ Camera ITS ซึ่งจะนำไปสู่ผลิตภัณฑ์ที่มีเสถียรภาพและมีคุณภาพสูง