กล้องไอที

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

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

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 หากไม่ใช่ พิมพ์ไปยังเครื่องอ่านบัตร สภาพแวดล้อมพร้อมที่จะเรียกใช้ระบบไอที การทดสอบ

หากคุณเห็นข้อความแสดงข้อผิดพลาด ที่ libtinfo.so.6: no version information available (required by /bin/sh) ให้เรียกใช้คำสั่งต่อไปนี้เพื่อเปลี่ยนชื่อไฟล์ libtinfo.so.6

mv $ENV_DIRECTORY/lib/libtinfo.so.6 $ENV_DIRECTORY/lib/libtinfo.so.6.bak

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

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

    การเรียกใช้สคริปต์แต่ละครั้งจะพิมพ์บันทึกที่แสดงสถานะ "ผ่าน" "ไม่ผ่าน" หรือ "ข้าม" การทดสอบ ITS แต่ละครั้ง โดย "ข้าม" แสดงให้เห็นว่าผ่านการทดสอบเนื่องจากอุปกรณ์ ไม่ได้โฆษณาความสามารถพื้นฐานที่กำลังทดสอบ ตัวอย่างเช่น หาก อุปกรณ์ไม่โฆษณาผ่านอินเทอร์เฟซของกล้องที่รองรับ ระบบจะข้ามการทดสอบ DNG ที่เกี่ยวข้องกับการจับภาพไฟล์ DNG และนับเป็นผ่าน

  3. หากต้องการทราบว่าการทดสอบมีคุณสมบัติตรงตามข้อกำหนดการทดสอบ ให้แตะ ปุ่มเครื่องหมายถูกสีเขียว รายการการทดสอบ ITS ของกล้องใน CTS Verifier จากนั้นเมนู "ทดสอบ" จะกลายเป็นสีเขียวและแสดงว่าโทรศัพท์ผ่านการทดสอบ ITS

การทดสอบ DUT พร้อมกัน

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

หากต้องการเรียกใช้ testbeds พร้อมกัน ให้ใช้คำสั่งต่อไปนี้

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