ITS ของกล้อง

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

ITS อยู่ในชุดทดสอบเครื่องตรวจสอบ CTS ใน 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 ต้องอยู่ในเส้นทางที่เรียกใช้ได้ของเชลล์หรือเทอร์มินัลที่ทำงานอยู่บนเครื่องโฮสต์ สำหรับเครื่องมือแพลตฟอร์ม SDK ของ Android เวอร์ชันที่เผยแพร่ต่อสาธารณะ โปรดดูบันทึกประจำรุ่นของเครื่องมือแพลตฟอร์ม 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 จะต้องอยู่ในชื่อแท็บเล็ตทดสอบ ในระหว่างการเริ่มต้นใช้งาน Test Runner ของ 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 ของฉาก 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

ไฟล์ config.yml ของ Testbed หลายไฟล์

ต่อไปนี้คือตัวอย่างไฟล์ 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 ในแท่นหนึ่งและกล้อง 1 ในแท่นอื่นพร้อมกันได้ การทดสอบทั้งหมดสำหรับเซสชันการทดสอบแบบคู่ขนานจะรวบรวมไว้ในเซสชันโปรแกรมตรวจสอบ CTS ใน 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

โมเดลสัญญาณรบกวน 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 จะตรวจสอบโมเดลสัญญาณรบกวนโดยยืนยันว่าค่าสัญญาณรบกวนสำหรับการเปิดรับแสงและอัตราขยายของช็อตที่ระบุไว้ในข้อมูลกล้องนั้นถูกต้อง