กล้องถ่ายรูป

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

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

โมบาย

สำหรับ Android 12 ขึ้นไป จะต้องติดตั้งเฟรมเวิร์กการทดสอบ Mobly Mobly ให้คุณตั้งค่า DUT และแท็บเล็ตแผนภูมิในคลาส its_base_test หากต้องการติดตั้งกรอบการทดสอบ Mobly ให้รัน:

pip install mobly

การตั้งค่าสภาพแวดล้อม

หากต้องการตั้งค่าสภาพแวดล้อมการทดสอบ ให้รัน:

cd CameraITS
source build/envsetup.sh

คำสั่งนี้จะตรวจสอบการติดตั้ง Python ตั้งค่าตัวแปรสภาพแวดล้อม PYTHONPATH และรันการทดสอบหน่วยบนโมดูล utils/*.py หากไม่มีการพิมพ์ข้อผิดพลาดไปยังเทอร์มินัล สภาพแวดล้อมก็พร้อมที่จะรันการทดสอบ ITS

หากคุณเห็นข้อความแสดงข้อผิดพลาด 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

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

ในการจัดฉาก เราขอแนะนำให้ใช้การตั้งค่า Camera ITS-in-a-box เพื่อความสะดวกในการทำงานอัตโนมัติ ความน่าเชื่อถือ และประสิทธิภาพในการทดสอบ แท่นทดสอบ ITS ในกล่องรองรับข้อกำหนดด้านระบบแสงสว่าง การจัดศูนย์กลาง และการเปลี่ยนแปลงแผนภูมิทั้งหมดสำหรับ ITS นอกจากนี้ ต้องใช้ ITS-in-a-box สำหรับการทดสอบ ส่วนขยายของกล้อง

สำหรับการทดสอบด้วยตนเอง ตรวจสอบสิ่งต่อไปนี้:

  • DUT อยู่บนขาตั้ง
  • DUT จะถูกชี้ไปยังฉากที่ถูกต้องสำหรับการทดสอบแต่ละครั้ง (สคริปต์ทดสอบ ITS แจ้งให้เปลี่ยนการตั้งค่าฉากก่อนเริ่มการทดสอบในฉากใหม่)
  • DUT เชื่อมต่อกับเครื่องโฮสต์ผ่าน USB
  • DUT จะไม่เคลื่อนที่ระหว่างการทดสอบการทำงาน
  • ฉากนี้สว่างไสวด้วยแหล่งกำเนิดแสงที่สม่ำเสมอและไม่ผันผวน (อย่าใช้ไฟฟลูออเรสเซนต์เพราะจะทำให้เกิดการกะพริบ)

สคริปต์ทดสอบ ITS จะแสดงข้อความแจ้งให้ผู้ใช้เปลี่ยนการตั้งค่าฉากก่อนเริ่มการทดสอบในฉากใหม่

ต้องตั้งค่าการวางแนวโทรศัพท์เพื่อให้กล้องถ่ายภาพโดยไม่มีการหมุน วิธีที่ง่ายที่สุดในการตรวจสอบคือฉากใบหน้าในฉากที่ 2 โทรศัพท์ส่วนใหญ่มีโทรศัพท์ในแนวนอน โดยโทรศัพท์จะหมุนทวนเข็มนาฬิกาสำหรับกล้องด้านหลัง และหมุนตามเข็มนาฬิกาสำหรับกล้องหน้า

ไฟล์การกำหนดค่า

เมื่อใช้เฟรมเวิร์ก Mobly คุณต้องสร้างไฟล์คอนฟิกูเรชัน config.yml เพื่อกำหนด Mobly testbed ต่อไปนี้เป็นตัวอย่างสำหรับกรณีการใช้งานที่แตกต่างกัน

ไฟล์ 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

ไฟล์ testbeds config.yml หลายไฟล์

ต่อไปนี้คือไฟล์ config.yml ตัวอย่างที่มีหลาย testbed, tablet testbed และ 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 จะต้องอยู่ในชื่อทดสอบ นอกจากนี้ ส่วน 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 ฉากด้วยการทดสอบเพียงครั้งเดียวเพื่อให้ดำเนินการได้เร็วที่สุด

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

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

การทดสอบ DUT แบบขนาน

อุปกรณ์ที่ใช้ Android 14 ขึ้นไปรองรับการทดสอบ DUT แบบขนาน ซึ่งช่วยให้คุณทดสอบ DUT แบบขนานกับแท่นขุดเจาะหลายเครื่องเพื่อเร่งการทดสอบโดยรวม ตัวอย่างเช่น การทดสอบแบบขนานช่วยให้คุณทดสอบกล้อง 0 ในแท่นขุดเจาะหนึ่งและกล้อง 1 ในแท่นขุดอีกแท่นหนึ่งในเวลาเดียวกัน การทดสอบทั้งหมดสำหรับเซสชันการทดสอบแบบขนานจะรวมอยู่ในเซสชัน CTS Verifier บน DUT อ้างอิง คุณต้องทำการทดสอบแบบขนานกับการควบคุมแสงของ Arduino เนื่องจากการทดสอบแบบขนานไม่รองรับการควบคุมแสงแบบแมนนวล ตรวจสอบให้แน่ใจว่าช่องอื่นบนคอนโทรลเลอร์ Arduino เดียวกันควบคุมแสงสำหรับแต่ละแท่นขุดเจาะ

ต่อไปนี้คือไฟล์ config.yml ตัวอย่างที่กำหนดสาม testbeds เพื่อรันแบบขนาน

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

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