ITS ของกล้อง

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

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

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

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

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

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

Python

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

ไฟล์ config.yml ของ Sensor_fusion

ต่อไปนี้เป็นตัวอย่างไฟล์ 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

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

ต่อไปนี้คือตัวอย่างไฟล์ config.yml ที่ระบุ Testbed 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 ต้องมีเสียงรบกวน ในข้อมูลเมตาของผลการจับภาพของแต่ละภาพดิบ โมเดลสัญญาณรบกวนนี้ต้องฝังอยู่ใน HAL ของกล้องสำหรับกล้องแต่ละตัว (เช่น กล้องหน้าและกล้องหลัง) ในอุปกรณ์ที่อ้างว่ารองรับ

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

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

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

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

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

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