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

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

ITS อยู่ในชุดทดสอบ CTS Verifier ใน cts/apps/CameraITS อุปกรณ์ต้องผ่านการทดสอบ ITS ที่สอดคล้องกับฟีเจอร์ที่รองรับ ซึ่งเฟรมเวิร์กกล้องโฆษณาสำหรับแอปของบุคคลที่สามเป็นส่วนย่อยของ CTS

ตั้งค่า

หากต้องการเรียกใช้การทดสอบ ITS คุณต้องตั้งค่าสิ่งต่อไปนี้

  • อุปกรณ์ภายใต้การทดสอบ (DUT)
  • เครื่องโฮสต์ (เช่น เดสก์ท็อปหรือแล็ปท็อป Linux)
  • ฉากที่กล้องถ่ายภาพ

การตั้งค่าอุปกรณ์ภายใต้การทดสอบ (DUT)

หากต้องการตั้งค่า DUT ให้ทำตามขั้นตอนต่อไปนี้

  1. เชื่อมต่อ DUT กับเครื่องโฮสต์ผ่าน USB
  2. กำหนดค่าตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์ใน DUT ดังนี้
    • เปิดเปิดหน้าจอค้างไว้และการแก้ไขข้อบกพร่อง USB
    • ปิดการอัปเดตระบบอัตโนมัติและยืนยันแอปผ่าน USB
  3. ให้สิทธิ์โฮสต์ในการเข้าถึง DUT ผ่าน ADB
  4. ติดตั้งแอป 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
  5. เปิดแอปกล้องเริ่มต้นใน DUT แล้วปิดหน้าต่างทั้งหมดที่ ปรากฏขึ้นเมื่อเปิดแอปเพื่อหลีกเลี่ยงการรบกวนระหว่างการทดสอบ

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

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

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

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

ต้องติดตั้งเครื่องมือแพลตฟอร์ม Android SDK และ adb ต้องอยู่ในเส้นทางที่ปฏิบัติการได้ของ Shell หรือเทอร์มินัลที่ทำงานในเครื่องโฮสต์ สำหรับเครื่องมือแพลตฟอร์ม 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 แล้ว

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

หากต้องการตั้งค่าฉาก เราขอแนะนำให้ใช้การตั้งค่า 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 ต้องอยู่ในชื่อ Testbed ในระหว่างการเริ่มต้น ตัวเรียกใช้การทดสอบ 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

หากต้องการเรียกใช้ Test Bed ให้เรียกใช้ 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

ต้องมีการปรับฝั่งทดสอบเพื่อเปิดใช้ความสามารถในการปรับขนาดแผนภูมิ 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)

ไฟล์ sensor_fusion scene config.yml

ต่อไปนี้เป็นตัวอย่างconfig_ymlไฟล์สำหรับsensor_fusionการทดสอบ สําหรับsensor_fusionการทดสอบSENSOR_FUSION คีย์เวิร์ดต้องอยู่ในชื่อ Testbed 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 ของ Testbed หลายรายการ

ต่อไปนี้คือตัวอย่างไฟล์ config.yml ที่มีแพลตฟอร์มทดสอบหลายรายการ ได้แก่ แพลตฟอร์มทดสอบแท็บเล็ตและแพลตฟอร์มทดสอบ sensor_fusion ระบบจะกำหนด Testbed ที่ถูกต้อง ตามฉากที่ทดสอบ

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 ต้องอยู่ในชื่อ Testbed นอกจากนี้ ส่วนAndroidDeviceต้องไม่มีส่วนหมายเลขซีเรียลหรือป้ายกำกับสำหรับแท็บเล็ต

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

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

ไฟล์ Gen2 rig testing config.yml

ต่อไปนี้เป็นตัวอย่างconfig.ymlไฟล์ของTEST_BED_GEN2เทสต์เบด ใช้ชุดทดสอบนี้สำหรับscene_ipการทดสอบ ซึ่งใช้ แท่นทดสอบ Gen2](/docs/compatibility/cts/camera-its-box-gen2) ตัวอย่างต่อไปนี้แสดงพารามิเตอร์ของ Testbed เมื่ออุปกรณ์ 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

ตัวอย่างต่อไปนี้แสดงพารามิเตอร์ของ Testbed เมื่ออุปกรณ์ 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 ในเมนูการทดสอบ ให้เลือกการทดสอบ ITS ของกล้อง สำหรับ Android 17 ขึ้นไป การทดสอบ sensor_fusion และ feature_combination จะอยู่ในกิจกรรมเพิ่มเติมชื่อ Camera ITS Sensor Fusion Rig Test

  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 ในอุปกรณ์หนึ่งและกล้อง 1 ในอุปกรณ์อีกเครื่องได้พร้อมกัน สำหรับ Android 17 ขึ้นไป เนื่องจากมีการแยกการทดสอบ 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"

หากต้องการเรียกใช้ Testbed แบบขนาน ให้ใช้คำสั่งต่อไปนี้

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 หลายฉบับ (จากการทดสอบหรืออุปกรณ์ต่างๆ) ไว้ในการส่งที่รวมเป็นหนึ่งเดียว

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

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

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

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

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

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

      result-aggregation-image-1

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

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

      result-aggregation-image-2

      รูปที่ 2 ฉากที่จัดหมวดหมู่เป็น Aggregated Pass

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

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

โมเดลสัญญาณรบกวน DNG

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

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

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

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

  2. หากต้องการใช้โมเดลเสียงรบกวนสำหรับอุปกรณ์ ให้ตัดและวางข้อมูลโค้ด C ลงใน 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 ซึ่งจะนำไปสู่ผลิตภัณฑ์ที่มีคุณภาพสูงและเสถียร