Camera Image Test Suite (ITS) เป็นเฟรมเวิร์กสำหรับเรียกใช้การทดสอบกับรูปภาพที่สร้างโดยกล้อง Android เป้าหมายทั่วไปของการทดสอบแต่ละรายการใน ITS คือการกำหนดค่ากล้องในลักษณะที่เฉพาะเจาะจง ถ่ายภาพ 1 ภาพขึ้นไป และตรวจสอบภาพเพื่อดูว่ามีข้อมูลรูปภาพที่คาดไว้หรือไม่ การทดสอบหลายรายการกำหนดให้กล้องต้องชี้ไปที่ชาร์ตเป้าหมายที่เฉพาะเจาะจงหรือส่องสว่างด้วยความเข้มที่เฉพาะเจาะจง
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.zipcd android-cts-verifieradb install -r -g CtsVerifier.apkเปิดแอปกล้องเริ่มต้นใน DUT และปิดหน้าต่างทั้งหมดที่ปรากฏขึ้นเมื่อเปิดแอปเพื่อหลีกเลี่ยงการรบกวนระหว่างการทดสอบ
การตั้งค่าโฮสต์
ITS กำหนดให้เครื่องโฮสต์ต้องเชื่อมต่อกับ DUT ผ่าน USB, สามารถใช้ ADB เพื่อควบคุมและสื่อสารกับอุปกรณ์ และติดตั้งซอฟต์แวร์ที่จำเป็น
หากต้องการตั้งค่าเครื่องโฮสต์ ให้ตรวจสอบว่าได้ติดตั้งซอฟต์แวร์ต่อไปนี้แล้ว
เครื่องมือแพลตฟอร์ม Android SDK
คุณต้องติดตั้งเครื่องมือแพลตฟอร์ม Android SDK และ ADB ต้องอยู่ในเส้นทางที่เรียกใช้งานได้ของเชลล์หรือเทอร์มินัลที่ทำงานในเครื่องโฮสต์ สำหรับเครื่องมือแพลตฟอร์ม Android SDK เวอร์ชันที่เผยแพร่ต่อสาธารณะ โปรดดู หมายเหตุประจำรุ่นของเครื่องมือแพลตฟอร์ม SDK
Python
คุณต้องติดตั้ง Python ในเครื่องโฮสต์ เราขอแนะนำให้ใช้การกระจาย Python แบบรวมชุดเพื่อให้แน่ใจว่ารองรับเวอร์ชันที่เข้ากันได้ ดูรายละเอียดเกี่ยวกับ Python และเวอร์ชันแพ็กเกจที่จะติดตั้งสำหรับการเผยแพร่ที่เฉพาะเจาะจงได้ในหมายเหตุประจำรุ่นของ Camera ITS สำหรับการเผยแพร่ที่เกี่ยวข้อง
Mobly
สำหรับ Android 12 ขึ้นไป ให้ติดตั้งเฟรมเวิร์กการทดสอบ Mobly Mobly ช่วยให้คุณตั้งค่า DUT และแท็บเล็ตชาร์ตในคลาส its_base_test ได้ หากต้องการติดตั้งเฟรมเวิร์กการทดสอบ Mobly ให้เรียกใช้คำสั่งต่อไปนี้
pip install moblyการตั้งค่าสภาพแวดล้อม
หากต้องการตั้งค่าสภาพแวดล้อมการทดสอบ ให้เรียกใช้คำสั่งต่อไปนี้
cd CameraITSsource build/envsetup.sh
คำสั่งนี้จะตรวจสอบการติดตั้ง Python, ตั้งค่าตัวแปรสภาพแวดล้อม PYTHONPATH และเรียกใช้การทดสอบหน่วยในโมดูล utils/*.py หากไม่มีข้อผิดพลาดปรากฏในเทอร์มินัล แสดงว่าสภาพแวดล้อมพร้อมที่จะเรียกใช้การทดสอบ ITS แล้ว
การตั้งค่าฉาก
หากต้องการตั้งค่าฉาก เราขอแนะนำให้ใช้การตั้งค่า Camera 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 ต้องอยู่ในชื่อแท่นทดสอบ ระหว่างการเริ่มต้นใช้งาน ตัวเรียกใช้การทดสอบ 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.pypython tools/run_all_tests.py camera=1python tools/run_all_tests.py scenes=2,1,0python tools/run_all_tests.py camera=0 scenes=scene_telepython tools/run_all_tests.py camera=0.4 scenes=4,scene6_tele
พารามิเตอร์ chart_scaling
ใน Android 17 ขึ้นไป พารามิเตอร์ chart_scaling จะรวมอยู่ใน config.yml สำหรับ TEST_BED_TABLET_SCENES พารามิเตอร์นี้ช่วยแก้ปัญหาการปรับขนาดชาร์ตสำหรับอุปกรณ์กล้องเทเลที่มีมุมมองภาพ (FoV) กว้างขึ้น ป้องกันการครอบตัดฉาก และบังคับใช้การโฟกัสอุปกรณ์ที่เหมาะสมระหว่างการทดสอบ
ค่าที่รองรับสำหรับ chart_scaling คือ 1, 0.33, 0.5 หรือ 0.67 โดยมี None เป็นค่าเริ่มต้น แนวทางนี้ช่วยให้อุปกรณ์ใช้ค่าตัวคูณมาตราส่วนที่เหมาะสมซึ่งปรับให้เหมาะกับข้อกำหนดเฉพาะของอุปกรณ์ โดยคงการทดสอบฟังก์ชันในอุปกรณ์ทั้งหมดไว้
หากตั้งค่า chart_scaling เป็น None การทดสอบจะกำหนดปัจจัยการปรับขนาดโดยอัตโนมัติโดยใช้ chart_scaling_logic ไม่เช่นนั้น ระบบจะใช้ค่าที่ระบุใน config.yml หรือแสดงข้อผิดพลาดหากการปรับขนาดไม่พร้อมใช้งาน
ต่อไปนี้เป็นตัวอย่าง config.yml ที่มีพารามิเตอร์ chart_scaling
TestBeds:
- Name: TEST_BED_TABLET_SCENES # Need 'tablet' in name for tablet scenes
# Use TEST_BED_MANUAL for manual testing and remove below lines:
# - serial <tablet_id>
# label: tablet
# Test configuration for scenes[0:4, 6]
Controllers:
AndroidDevice:
- serial: <device-id> # quotes needed if serial id entirely numeric
label: dut
- serial: <tablet-id> # quotes needed if serial id entirely numeric
label: tablet
TestParams:
brightness: 192
chart_distance: 22.0
debug_mode: "False" # quotes needed
lighting_cntl: <controller-type> # can be arduino or "None"
lighting_ch: <controller-channel>
camera: <camera-id>
scene: <scene-name> # if <scene-name> runs all scenes
foldable_device: "False" # "True" if testing foldable device
chart_scaling: "None" # use the values available for scene to be tested
resultstore_upload: "False" # "True" if results should be uploaded to ResultStore
คุณต้องทำการปรับเปลี่ยนฝั่งการทดสอบเพื่อเปิดใช้ความสามารถในการปรับขนาดชาร์ตของ Camera ITS หากการทดสอบที่คุณใช้อยู่ไม่รองรับฟีเจอร์นี้ โปรดรายงานข้อบกพร่อง
ต่อไปนี้เป็นตัวอย่างการเปลี่ยนแปลงฝั่งการทดสอบที่มีพารามิเตอร์ chart_scaling
# load chart for scene
its_session_utils.load_scene(
cam, props, self.scene, self.tablet, self.chart_distance,
chart_scaling=self.chart_scaling)
ไฟล์ 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_fusionpython tools/run_all_tests.py scenes=sensor_fusion camera=0python tools/run_all_tests.py scenes=scene_flash,feature_combinationpython tools/run_all_tests.py scenes=checkerboard camera=1
ไฟล์ 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
ไฟล์ config.yml ของการทดสอบแท่นทดสอบ Gen2
ต่อไปนี้เป็นตัวอย่างไฟล์ config.yml ของแท่นทดสอบ TEST_BED_GEN2
แท่นทดสอบนี้ใช้สำหรับการทดสอบ scene_ip ซึ่งใช้แท่นทดสอบ Gen2
ตัวอย่างต่อไปนี้แสดงพารามิเตอร์แท่นทดสอบเมื่อแท่นทดสอบ Gen2 พร้อมใช้งานและไม่ได้ข้ามการทดสอบ
scene_ip
Testbeds
- Name: TEST_BED_GEN2
# Test configuration for scene_ip/test_default_jca_ip.py
Controllers:
AndroidDevice:
- serial: <device-id> # quotes needed if serial id entirely numeric
label: dut
TestParams:
debug_mode: "False" # quotes are needed here
chart_distance: 30
rotator_cntl: gen2_rotator # gen2 rig specific. "None" if gen2 rig not available
rotator_ch: 0
camera: <camera-id>
foldable_device: "False" # "True" if testing foldable device
tablet_device: "False" # "True" if testing tablet device
lighting_cntl: gen2_lights # gen2 rig specific. "None" if gen2 rig not available
lighting_ch: 1
scene: scene_ip
ตัวอย่างต่อไปนี้แสดงพารามิเตอร์แท่นทดสอบเมื่อแท่นทดสอบ Gen2 ไม่พร้อมใช้งานและข้ามการทดสอบ scene_ip
Testbeds
- Name: TEST_BED_GEN2
# Test configuration for scene_ip/test_default_jca_ip.py
Controllers:
AndroidDevice:
- serial: <device-id> # quotes needed if serial id entirely numeric
label: dut
TestParams:
debug_mode: "False" # quotes are needed here
chart_distance: 30
rotator_cntl: "None" # gen2 rig specific. "None" if gen2 rig not available
rotator_ch: <controller-channel>
camera: <camera-id>
foldable_device: "False" # "True" if testing foldable device
tablet_device: "False" # "True" if testing tablet device
lighting_cntl: "None" # gen2 rig specific. "None" if gen2 rig not available
lighting_ch: <controller-channel>
scene: scene_ip
หากต้องการเรียกใช้การทดสอบ scene_ip ให้ใช้คำสั่งใดคำสั่งหนึ่งต่อไปนี้
python tests/scene_ip/test_default_jca_ip.py -c config.ymlpython tools/run_all_tests.py camera=<camera-id> scenes=scene_ip
การเรียกใช้การทดสอบ ITS
ส่วนนี้จะอธิบายวิธีเรียกใช้การทดสอบ ITS
การเรียกใช้การทดสอบ
หลังจากตั้งค่าอุปกรณ์ เครื่องโฮสต์ (รวมถึงสภาพแวดล้อม) และฉากจริงแล้ว ให้เรียกใช้การทดสอบ ITS โดยใช้กระบวนการต่อไปนี้
เปิดแอป CTS Verifier แล้วเลือกการทดสอบ Camera ITS ในเมนูการทดสอบ สำหรับ Android 17 ขึ้นไป การทดสอบ
sensor_fusionและfeature_combinationจะอยู่ในกิจกรรมเพิ่มเติมที่ชื่อว่าการทดสอบแท่นทดสอบการรวมเซ็นเซอร์ของ Camera 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หากต้องการยืนยันว่าการทดสอบเป็นไปตามข้อกำหนดการทดสอบ ให้แตะปุ่มเครื่องหมายถูกสีเขียว จากนั้นรายการการทดสอบ Camera ITS ในเมนูการทดสอบ CTS Verifier จะเปลี่ยนเป็นสีเขียวและแสดงว่าโทรศัพท์ผ่านการทดสอบ Camera ITS แล้ว
การทดสอบ DUT แบบขนาน
อุปกรณ์ที่ใช้ Android 14 ขึ้นไปรองรับการทดสอบ DUT แบบขนาน ซึ่งช่วยให้คุณทดสอบ DUT แบบขนานกับแท่นทดสอบหลายแท่นเพื่อเร่งการทดสอบโดยรวม ตัวอย่างเช่น การทดสอบแบบขนานช่วยให้คุณทดสอบกล้อง 0 ในแท่นทดสอบหนึ่งและกล้อง 1 ในแท่นทดสอบอื่นพร้อมกันได้ สำหรับ Android 17 ขึ้นไป เนื่องจากมีการแยกการทดสอบ Camera ITS ออกเป็น 2 กิจกรรม คุณจึงเรียกใช้การทดสอบ sensor_fusion และ feature_combination ใน DUT หนึ่ง และการทดสอบอื่นๆ ใน DUT อีกเครื่องแบบขนานได้ ระบบจะรวบรวมการทดสอบทั้งหมดสำหรับเซสชันการทดสอบแบบขนานไว้ในเซสชัน 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"
หากต้องการเรียกใช้แท่นทดสอบแบบขนาน ให้ใช้คำสั่งต่อไปนี้
for i in 0 1 2; do python3 tools/run_all_tests.py testbed_index=$i num_testbeds=3 & done; waitส่งผลการทดสอบรวม
ใน Android 17 ขึ้นไป คุณสามารถส่งผลการทดสอบ Camera ITS รวมเพื่อขออนุมัติบิลด์ได้ CTS Verifier ช่วยให้คุณทดสอบฉากหลายฉากในอุปกรณ์หลายเครื่องพร้อมกัน และรวบรวมผลการทดสอบจากรายงาน CTS Verifier หลายรายการ (จากการทดสอบหรืออุปกรณ์ต่างๆ) ไว้ในรายการส่งเดียว
กระบวนการส่ง
หากต้องการส่งผลการทดสอบ Camera ITS รวมเพื่อขออนุมัติบิลด์ ให้ทำตามขั้นตอนต่อไปนี้
- เตรียมอุปกรณ์: รวบรวมอุปกรณ์ที่อยู่ระหว่างการทดสอบ (DUT) 2-3 เครื่องซึ่งมีรหัสเฉพาะของบิลด์เหมือนกันทุกประการ
- ติดตั้ง CTS Verifier: ติดตั้ง CTS Verifier APK เวอร์ชันล่าสุด ซึ่งรับได้จากเครื่องมือสำรวจบิลด์ที่ให้ไว้
เรียกใช้การทดสอบแบบขนาน:
- ติดตั้ง DUT ในแท่นทดสอบแยกกัน
- เรียกใช้ฉาก Camera ITS ที่แตกต่างกันในอุปกรณ์แต่ละเครื่องพร้อมกัน
- การรวบรวมรายงาน: ดึงรายงาน CTS Verifier หลังจากเรียกใช้แต่ละครั้ง ซึ่งรวมถึงรายงานที่ฉากล้มเหลว เรียกใช้ฉากที่ล้มเหลวอีกครั้งในการเรียกใช้ครั้งต่อๆ ไปเท่านั้น
ส่งรายงาน: อัปโหลดรายงาน CTS Verifier หลายรายการที่รวบรวมจากอุปกรณ์ทั้งหมด
ตรวจสอบผลลัพธ์: เมื่ออัปโหลดรายงานแล้ว ให้ตรวจสอบผลลัพธ์รวมดังนี้
- ส่วนการวิเคราะห์การทดสอบ จะแสดงรายการฉากทั้งหมดที่เรียกใช้
ฉากที่ไม่ได้เรียกใช้หรือล้มเหลวจะแสดงอยู่ในส่วนล้มเหลว
รูปที่ 1 เอกสารประกอบของฉากที่ไม่ได้เรียกใช้หรือล้มเหลว
ฉากที่ผ่านจะแสดงอยู่ในส่วนผ่านรวม
รูปที่ 2 ฉากที่จัดอยู่ในหมวดหมู่ผ่านรวม
สถานะการอนุมัติบิลด์
ระบบจะอนุมัติบิลด์เมื่อฉากที่จำเป็นทั้งหมดเสร็จสมบูรณ์ในรายงานรวม
โมเดลเสียง DNG
อุปกรณ์ที่โฆษณาความสามารถในการถ่ายภาพ RAW หรือ DNG ต้องระบุโมเดลเสียงในข้อมูลเมตาของผลการถ่ายภาพของภาพ RAW แต่ละภาพ โมเดลเสียงนี้ต้องฝังอยู่ใน Camera HAL สำหรับกล้องแต่ละตัว (เช่น กล้องหน้าและกล้องหลัง) ในอุปกรณ์ที่อ้างว่ารองรับ
การใช้งานโมเดลเสียง
หากต้องการใช้งานโมเดลเสียง ให้ทำตามขั้นตอนต่อไปนี้เพื่อสร้างโมเดลเสียงและฝังโมเดลลงใน Camera HAL
หากต้องการสร้างโมเดลเสียงสำหรับกล้องแต่ละตัว ให้เรียกใช้สคริปต์
dng_noise_model.pyในไดเรกทอรีtoolsซึ่งจะแสดงข้อมูลโค้ด C ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีตั้งค่ากล้องและสภาพแวดล้อมการถ่ายภาพได้ในเอกสารDngNoiseModel.pdfในไดเรกทอรีtoolsหากต้องการใช้งานโมเดลเสียงสำหรับอุปกรณ์ ให้ตัดและวางข้อมูลโค้ด C ลงใน Camera HAL
การตรวจสอบโมเดลเสียง
การทดสอบ ITS อัตโนมัติ tests/scene1_1/test_dng_noise_model.py
จะตรวจสอบโมเดลเสียงโดยยืนยันว่าค่าเสียง
สำหรับการเปิดรับแสงและการเพิ่มค่าของภาพที่ระบุไว้ในข้อมูลกล้องถูกต้อง
การทดสอบที่ผ่านแบบเฉียดฉิว (สถานะการทดสอบ PASS*)
ใน Android 17 ขึ้นไป การทดสอบที่ ผ่านแบบเฉียดฉิว (PASS*) หมายความว่าการทดสอบผ่าน แต่เมตริกประสิทธิภาพอยู่ใกล้กับเกณฑ์การผ่านที่กำหนดไว้ล่วงหน้ามาก แม้ว่าในทางเทคนิคแล้วการทดสอบจะเป็นไปตามเกณฑ์การผ่าน แต่การที่เมตริกอยู่ใกล้กับขอบเขตการล้มเหลวแสดงให้เห็นว่าจำเป็นต้องมีการตรวจสอบอย่างละเอียด
ประโยชน์ของการทดสอบที่ผ่านแบบเฉียดฉิว
สถานะ PASS* มีสิทธิประโยชน์หลายประการดังนี้
ระบบเตือนล่วงหน้า: ระบุการทดสอบที่กำลังจะล้มเหลว ช่วยให้ทีมแก้ปัญหาได้ก่อนที่ปัญหาจะนำไปสู่การล้มเหลวโดยสิ้นเชิง
การเพิ่มประสิทธิภาพเชิงรุก: สนับสนุนให้ทีมเพิ่มประสิทธิภาพการทดสอบและโค้ดที่ทำงานอยู่ในช่วงล่างของช่วงที่ยอมรับได้ ซึ่งจะช่วยปรับปรุงความเสถียรโดยรวม
คุณภาพที่ดีขึ้น: ช่วยรักษาระดับคุณภาพที่สูงขึ้นโดยการแจ้งพื้นที่ที่อาจเกิดการถดถอยในอนาคตเมื่อมีการเปลี่ยนแปลงโค้ดเล็กน้อย
ลดเวลาในการแก้ไขข้อบกพร่อง: การตรวจพบการทดสอบ
PASS*ตั้งแต่เนิ่นๆ จะช่วยลดเวลาและความพยายามที่ต้องใช้ในการแก้ไขข้อบกพร่องที่ล้มเหลวโดยสิ้นเชิงในอนาคตได้อย่างมาก
รายละเอียด PASS*
สถานะ PASS* มีรายละเอียดดังนี้
การกำหนดเกณฑ์: ระบบจะกำหนดเกณฑ์การผ่านแบบเฉียดฉิวที่เฉพาะเจาะจงสำหรับการทดสอบที่เกี่ยวข้องแต่ละรายการใน Camera ITS
การตรวจหาอัตโนมัติ: ระบบการทดสอบอัตโนมัติจะตรวจหาและจัดหมวดหมู่การทดสอบเป็น
PASS*ตามเกณฑ์ที่กำหนดกลไกการแจ้งเตือน: ทีมจะได้รับการแจ้งเตือนอัตโนมัติสำหรับการทดสอบที่ติดป้ายกำกับเป็น
PASS*ซึ่งจะนำทีมไปตรวจสอบการทดสอบที่เฉพาะเจาะจงและเมตริกของการทดสอบนั้นการรายงาน: สถานะการผ่านแบบเฉียดฉิวจะระบุไว้อย่างชัดเจนในรายงานการทดสอบและแดชบอร์ดเพื่อให้มองเห็นได้ชัดเจนขึ้นเป็น
PASS*ในรายงานItsTestSummaryซึ่งคล้ายกับFail*สำหรับการทดสอบnot_yet_mandatedการทดสอบจะยังคงมีสถานะเป็นสีเขียว เนื่องจากยังคงผ่านภายในเกณฑ์ที่กำหนดไว้ เพื่อหลีกเลี่ยงความสับสนเพิ่มเติม สถานะPASS*ใช้ได้กับคลาสการทดสอบเท่านั้น ไม่ใช่ทั้งฉาก เช่น ระบบอาจพิจารณาว่า Scene_0 เป็นPASSแม้ว่า test_jitter และ test_metadata จะเป็นPASS*การตรวจสอบ: ระบบจะเก็บรวบรวมข้อมูลประสิทธิภาพในการทดสอบที่ผ่านแบบเฉียดฉิวในอุปกรณ์ ซึ่งจะช่วยให้ตรวจสอบการปรับปรุงกล้องในอนาคตที่ OEM ทำขึ้นได้หากการทดสอบเหล่านี้เปลี่ยนไปเป็นสถานะ
PASS
ต่อไปนี้เป็นตัวอย่างผลการทดสอบที่มี PASS*
INFO:root:Reporting camera 1 ITS results to CtsVerifier
INFO:root:ITS results to CtsVerifier: {'scene0': {'result': 'PASS', 'TEST_STATUS': [{'test': 'test_jitter', 'status': 'PASS*'}, {'test': 'test_metadata', **'status': 'PASS*'**}, {'test': 'test_request_capture_match', 'status': 'PASS'}, {'test': 'test_sensor_events', 'status': 'PASS'}, {'test': 'test_solid_color_test_pattern', 'status': 'PASS'}, {'test': 'test_test_patterns', 'status': 'SKIP'}, {'test': 'test_tonemap_curve', 'status': 'SKIP'}, {'test': 'test_unified_timestamps', 'status': 'PASS'}, {'test': 'test_vibration_restriction', 'status': 'PASS'}], 'mpc_metrics': [], 'performance_metrics': [], 'feature_query_proto': [], 'feature_query_proto_path': [], 'summary': '/tmp/CameraITS_zojk4sdr/cam_id_1/scene0/scene_test_summary.txt', 'start': 1754330630345, 'end': 1754330764534}, 'scene1_1': {'result': 'NOT_EXECUTED'}, 'scene1_2': {'result': 'NOT_EXECUTED'}, 'scene1_3': {'result': 'NOT_EXECUTED'}, 'scene2_a': {'result': 'NOT_EXECUTED'}, 'scene2_b': {'result': 'NOT_EXECUTED'}, 'scene2_c': {'result': 'NOT_EXECUTED'}, 'scene2_d': {'result': 'NOT_EXECUTED'}, 'scene2_e': {'result': 'NOT_EXECUTED'}, 'scene2_f': {'result': 'NOT_EXECUTED'}, 'scene2_g': {'result': 'NOT_EXECUTED'}, 'scene3': {'result': 'NOT_EXECUTED'}, 'scene4': {'result': 'NOT_EXECUTED'}, 'scene6': {'result': 'NOT_EXECUTED'}, 'scene7': {'result': 'NOT_EXECUTED'}, 'scene8': {'result': 'NOT_EXECUTED'}, 'scene9': {'result': 'NOT_EXECUTED'}, 'scene_extensions/scene_hdr': {'result': 'NOT_EXECUTED'}, 'scene_extensions/scene_low_light': {'result': 'NOT_EXECUTED'}, 'scene_tele/scene6_tele': {'result': 'NOT_EXECUTED'}, 'scene_tele/scene7_tele': {'result': 'NOT_EXECUTED'}, 'scene_video': {'result': 'NOT_EXECUTED'}, 'scene5': {'result': 'NOT_EXECUTED'}, 'sensor_fusion': {'result': 'NOT_EXECUTED'}, 'feature_combination': {'result': 'NOT_EXECUTED'}, 'scene_flash': {'result': 'NOT_EXECUTED'}, 'scene_ip': {'result': 'NOT_EXECUTED'}}
เราขอแนะนำให้พาร์ทเนอร์ดำเนินการต่อไปนี้
- ตรวจสอบการแจ้งเตือน
PASS* - ตรวจสอบสาเหตุหลักของการทดสอบ
PASS* - เพิ่มประสิทธิภาพการทดสอบและโค้ดที่ระบุว่าเป็น
PASS*เชิงรุก
สถานะ PASS* มีเป้าหมายเพื่อเพิ่มความแข็งแกร่งและความน่าเชื่อถือของการทดสอบ Camera ITS ซึ่งจะนำไปสู่ผลิตภัณฑ์ที่มีเสถียรภาพและมีคุณภาพสูง