Camera Image Test Suite (ITS) เป็นเฟรมเวิร์กสำหรับการรันการทดสอบภาพที่ผลิตโดยกล้อง Android เป้าหมายทั่วไปของการทดสอบแต่ละครั้งใน ITS คือการกำหนดค่ากล้องในลักษณะเฉพาะ ถ่ายภาพหนึ่งภาพขึ้นไป และตรวจสอบภาพเพื่อดูว่ามีข้อมูลภาพที่คาดหวังหรือไม่ การทดสอบหลายอย่างกำหนดให้กล้องต้องชี้ไปที่แผนภูมิเป้าหมายเฉพาะหรือให้แสงสว่างที่ความเข้มเฉพาะ
ITS ตั้งอยู่ในชุดทดสอบ CTS Verifier ใน cts/apps/CameraITS
อุปกรณ์จะต้องผ่านการทดสอบ ITS ที่สอดคล้องกับฟีเจอร์ที่รองรับซึ่งโฆษณาโดยเฟรมเวิร์กกล้องสำหรับแอปของบุคคลที่สามโดยเป็นส่วนหนึ่งของ CTS
ติดตั้ง
หากต้องการรันการทดสอบ ITS จะต้องตั้งค่าต่อไปนี้:
- อุปกรณ์ที่อยู่ระหว่างการทดสอบ (DUT)
- เครื่องโฮสต์ (เช่น เดสก์ท็อปหรือแล็ปท็อป Linux)
- ฉากที่กล้องถ่ายภาพ
การตั้งค่าอุปกรณ์ภายใต้การทดสอบ (DUT)
หากต้องการตั้งค่า DUT ให้ทำตามขั้นตอนเหล่านี้:
- เชื่อมต่อ DUT เข้ากับเครื่องโฮสต์ผ่าน USB
- ให้สิทธิ์แก่โฮสต์ในการเข้าถึง DUT ผ่าน ADB
ติดตั้งแอป CTS Verifier (
CtsVerifier.apk
) ลงในอุปกรณ์ สำหรับข้อมูลเพิ่มเติม โปรดดูที่ การใช้ CTS Verifierextract 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 โดยใช้กระบวนการต่อไปนี้
เปิดแอป CTS Verifer ในเมนูการทดสอบ ให้เลือก Camera ITS Test
จากเครื่องโฮสต์ ให้รันการทดสอบ 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 จะถูกข้ามและนับเป็นผ่าน
หากต้องการรับทราบว่าการทดสอบเป็นไปตามข้อกำหนดการทดสอบ ให้แตะปุ่มเครื่องหมายถูกสีเขียว รายการ 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
หากต้องการสร้างโมเดลเสียงรบกวนสำหรับกล้องแต่ละตัว ให้รันสคริปต์
dng_noise_model.py
ในไดเร็กทอรีtools
สิ่งนี้จะแสดงข้อมูลโค้ด C สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีตั้งค่ากล้องและสภาพแวดล้อมในการจับภาพ โปรดดูเอกสารDngNoiseModel.pdf
ในไดเร็กทอรีtools
หากต้องการใช้โมเดลเสียงรบกวนสำหรับอุปกรณ์ ให้ตัดและวางข้อมูลโค้ด C ลงในกล้อง HAL
การตรวจสอบแบบจำลองเสียงรบกวน
การทดสอบ ITS อัตโนมัติ tests/scene1_1/test_dng_noise_model.py
จะตรวจสอบโมเดลเสียงรบกวนโดยการตรวจสอบว่าค่าเสียงรบกวนสำหรับการเปิดรับแสงและเกนที่ให้ไว้ในข้อมูลกล้องนั้นถูกต้อง