ชุดทดสอบรูปภาพจากกล้อง (ITS) เป็นเฟรมเวิร์กสำหรับการทดสอบรูปภาพที่กล้อง Android สร้างขึ้น เป้าหมายทั่วไปของการทดสอบแต่ละรายการใน ITS คือการกำหนดค่ากล้องในลักษณะที่เฉพาะเจาะจง ถ่ายภาพอย่างน้อย 1 ภาพ และตรวจสอบภาพเพื่อดูว่ามีข้อมูลรูปภาพที่คาดไว้หรือไม่ การทดสอบหลายรายการกำหนดให้ต้องเล็งกล้องไปที่แผนภูมิเป้าหมายที่เฉพาะเจาะจงหรือต้องให้แสงสว่างที่ความเข้มที่เฉพาะเจาะจง
ITS อยู่ในชุดทดสอบเครื่องตรวจสอบ CTS ใน 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
ใน DUT ให้เปิดแอปกล้องเริ่มต้นและล้างหน้าต่างทั้งหมดที่ปรากฏขึ้นเมื่อเปิดเพื่อหลีกเลี่ยงการรบกวนระหว่างการทดสอบ
การตั้งค่าโฮสต์
ITS กำหนดให้เครื่องโฮสต์ต้องเชื่อมต่อกับ DUT ผ่าน USB, ใช้ ADB เพื่อควบคุมและสื่อสารกับอุปกรณ์ได้ รวมถึงติดตั้งซอฟต์แวร์ที่จำเป็น
หากต้องการตั้งค่าเครื่องโฮสต์ ให้ตรวจสอบว่าได้ติดตั้งซอฟต์แวร์ต่อไปนี้แล้ว
เครื่องมือแพลตฟอร์ม Android SDK
คุณต้องติดตั้งเครื่องมือแพลตฟอร์ม Android SDK และ ADB ต้องอยู่ในเส้นทางที่เรียกใช้ได้ของเชลล์หรือเทอร์มินัลที่ทำงานอยู่บนเครื่องโฮสต์ สำหรับเครื่องมือแพลตฟอร์ม SDK ของ Android เวอร์ชันที่เผยแพร่ต่อสาธารณะ โปรดดูบันทึกประจำรุ่นของเครื่องมือแพลตฟอร์ม 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 จะแสดงข้อความแจ้งให้ผู้ใช้เปลี่ยนการตั้งค่าฉากก่อนเริ่มการทดสอบในฉากใหม่
คุณต้องตั้งค่าการวางแนวของโทรศัพท์เพื่อให้กล้องถ่ายภาพโดยไม่มีการหมุน วิธีที่ง่ายที่สุดในการตรวจสอบคือใช้ฉากใบหน้าใน scene2 โทรศัพท์ส่วนใหญ่มีการวางแนวนอนโดยหมุนโทรศัพท์ทวนเข็มนาฬิกาสำหรับกล้องหลังและทําเครื่องหมายไว้สำหรับกล้องหน้า
ไฟล์การกําหนดค่า
เมื่อใช้เฟรมเวิร์ก Mobly คุณต้องสร้างไฟล์การกําหนดค่า config.yml
เพื่อกําหนดแพลตฟอร์มทดสอบของ Mobly ต่อไปนี้เป็นตัวอย่างสำหรับกรณีการใช้งานต่างๆ
ไฟล์ config.yml ของฉากสำหรับแท็บเล็ต
ต่อไปนี้เป็นตัวอย่างไฟล์ config.yml
สำหรับฉากในแท็บเล็ต สําหรับการทดสอบบนแท็บเล็ต คีย์เวิร์ด TABLET
จะต้องอยู่ในชื่อแท็บเล็ตทดสอบ ในระหว่างการเริ่มต้นใช้งาน Test Runner ของ 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 โดยใช้กระบวนการต่อไปนี้
เปิดแอป CTS Verifer ในเมนูการทดสอบ ให้เลือกการทดสอบ ITS ของกล้อง
จากเครื่องโฮสต์ ให้เรียกใช้การทดสอบ 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
ให้กับ CtsVerifierSKIP
บ่งบอกว่าการทดสอบผ่านเนื่องจากอุปกรณ์ไม่ได้โฆษณาความสามารถพื้นฐานที่ทดสอบ เช่น หากอุปกรณ์ไม่ได้โฆษณาผ่านอินเทอร์เฟซกล้องว่ารองรับ DNG ระบบจะข้ามการทดสอบที่เกี่ยวข้องกับการจับภาพไฟล์ DNG และนับเป็นPASS
หากต้องการรับทราบว่าการทดสอบเป็นไปตามข้อกำหนดการทดสอบ ให้แตะปุ่มเครื่องหมายถูกสีเขียว จากนั้นรายการการทดสอบ ITS ของกล้องในเมนูการทดสอบของ CTS Verifier จะเปลี่ยนเป็นสีเขียวและบ่งบอกว่าโทรศัพท์ผ่าน ITS ของกล้อง
การทดสอบ DUT แบบขนาน
อุปกรณ์ที่ใช้ Android 14 ขึ้นไปรองรับการทดสอบ DUT แบบขนาน ซึ่งจะช่วยให้คุณทดสอบ DUT ควบคู่ไปกับอุปกรณ์ทดสอบหลายเครื่องเพื่อเร่งการทดสอบโดยรวมได้ เช่น การทดสอบแบบขนานช่วยให้คุณทดสอบกล้อง 0 ในแท่นหนึ่งและกล้อง 1 ในแท่นอื่นพร้อมกันได้ การทดสอบทั้งหมดสำหรับเซสชันการทดสอบแบบคู่ขนานจะรวบรวมไว้ในเซสชันโปรแกรมตรวจสอบ CTS ใน 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"
หากต้องการเรียกใช้แท่นทดสอบพร้อมกัน ให้ใช้คําสั่งต่อไปนี้
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 ของกล้อง
หากต้องการสร้างโมเดลสัญญาณรบกวนสำหรับกล้องแต่ละตัว ให้เรียกใช้สคริปต์
dng_noise_model.py
ในไดเรกทอรีtools
ซึ่งจะแสดงข้อมูลโค้ด C ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีตั้งค่ากล้องและสภาพแวดล้อมการจับภาพได้ในเอกสารDngNoiseModel.pdf
ในไดเรกทอรีtools
หากต้องการใช้โมเดลสัญญาณรบกวนสำหรับอุปกรณ์ ให้ตัดและวางข้อมูลโค้ด C ลงใน HAL ของกล้อง
การตรวจสอบโมเดลเสียงรบกวน
การทดสอบ ITS แบบอัตโนมัติของ tests/scene1_1/test_dng_noise_model.py
จะตรวจสอบโมเดลสัญญาณรบกวนโดยยืนยันว่าค่าสัญญาณรบกวนสำหรับการเปิดรับแสงและอัตราขยายของช็อตที่ระบุไว้ในข้อมูลกล้องนั้นถูกต้อง