กล้องไอที

ชุดทดสอบรูปภาพจากกล้อง (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

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

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

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

  2. จากเครื่องโฮสต์ ให้เรียกใช้การทดสอบ ITS จากไดเรกทอรี CameraITS/ เช่น สําหรับอุปกรณ์ที่มีกล้องหน้าและกล้องหลัง ให้เรียกใช้คําสั่งต่อไปนี้

    python tools/run_all_tests.py

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

    สำหรับการทดสอบด้วยตนเอง ก่อนเริ่มเรียกใช้ชุดการทดสอบ 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 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"

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