ชุดทดสอบรูปภาพจากกล้อง (ITS) เป็นเฟรมเวิร์กสำหรับเรียกใช้การทดสอบในรูปภาพ ที่กล้อง Android สร้างขึ้น เป้าหมายทั่วไปของการทดสอบแต่ละครั้งใน ITS คือการ กำหนดค่ากล้องในลักษณะที่เฉพาะเจาะจง ถ่ายภาพอย่างน้อย 1 ช็อต และ ตรวจสอบช็อตเพื่อดูว่ามีข้อมูลรูปภาพที่คาดไว้หรือไม่ การทดสอบหลายอย่าง ต้องใช้กล้องที่เล็งไปยังชาร์ตเป้าหมายที่เฉพาะเจาะจงหรือ ส่องสว่างที่ความเข้มที่เฉพาะเจาะจง
ITS อยู่ในชุดทดสอบ CTS Verifier ใน
cts/apps/CameraITS
อุปกรณ์ต้องผ่านการทดสอบ ITS ที่สอดคล้องกับฟีเจอร์ที่รองรับ
ซึ่งเฟรมเวิร์กกล้องโฆษณาสำหรับแอปของบุคคลที่สามเป็นส่วนย่อยของ CTS
ตั้งค่า
หากต้องการเรียกใช้การทดสอบ ITS คุณต้องตั้งค่าสิ่งต่อไปนี้
- อุปกรณ์ภายใต้การทดสอบ (DUT)
- เครื่องโฮสต์ (เช่น เดสก์ท็อปหรือแล็ปท็อป Linux)
- ฉากที่กล้องถ่ายภาพ
การตั้งค่าอุปกรณ์ภายใต้การทดสอบ (DUT)
หากต้องการตั้งค่า DUT ให้ทำตามขั้นตอนต่อไปนี้
- เชื่อมต่อ DUT กับเครื่องโฮสต์ผ่าน USB
- กำหนดค่าตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์ใน DUT ดังนี้
- เปิดเปิดหน้าจอค้างไว้และการแก้ไขข้อบกพร่อง USB
- ปิดการอัปเดตระบบอัตโนมัติและยืนยันแอปผ่าน 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 ต้องอยู่ในเส้นทางที่ปฏิบัติการได้ของ Shell หรือเทอร์มินัลที่ทำงานในเครื่องโฮสต์ สำหรับเครื่องมือแพลตฟอร์ม 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 แล้ว
การตั้งค่าฉาก
หากต้องการตั้งค่าฉาก เราขอแนะนำให้ใช้การตั้งค่า 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 ต้องอยู่ในชื่อ Testbed ในระหว่างการเริ่มต้น ตัวเรียกใช้การทดสอบ 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
หากต้องการเรียกใช้ Test Bed ให้เรียกใช้ 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
ต้องมีการปรับฝั่งทดสอบเพื่อเปิดใช้ความสามารถในการปรับขนาดแผนภูมิ 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)
ไฟล์ sensor_fusion scene config.yml
ต่อไปนี้เป็นตัวอย่างconfig_ymlไฟล์สำหรับsensor_fusionการทดสอบ
สําหรับsensor_fusionการทดสอบSENSOR_FUSION คีย์เวิร์ดต้องอยู่ในชื่อ Testbed
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 ของ Testbed หลายรายการ
ต่อไปนี้คือตัวอย่างไฟล์ config.yml ที่มีแพลตฟอร์มทดสอบหลายรายการ ได้แก่ แพลตฟอร์มทดสอบแท็บเล็ตและแพลตฟอร์มทดสอบ 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 ต้องอยู่ในชื่อ Testbed
นอกจากนี้ ส่วนAndroidDeviceต้องไม่มีส่วนหมายเลขซีเรียลหรือป้ายกำกับสำหรับแท็บเล็ต
TestBeds:
- Name: TEST_BED_MANUAL
Controllers:
AndroidDevice:
- serial: 8A9X0NS5Z
label: dut
TestParams:
debug_mode: "False"
camera: 0
scene: 1
ไฟล์ Gen2 rig testing config.yml
ต่อไปนี้เป็นตัวอย่างconfig.ymlไฟล์ของTEST_BED_GEN2เทสต์เบด
ใช้ชุดทดสอบนี้สำหรับscene_ipการทดสอบ ซึ่งใช้
แท่นทดสอบ Gen2](/docs/compatibility/cts/camera-its-box-gen2)
ตัวอย่างต่อไปนี้แสดงพารามิเตอร์ของ Testbed เมื่ออุปกรณ์ 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
ตัวอย่างต่อไปนี้แสดงพารามิเตอร์ของ Testbed เมื่ออุปกรณ์ 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 ในเมนูการทดสอบ ให้เลือกการทดสอบ ITS ของกล้อง สำหรับ Android 17 ขึ้นไป การทดสอบ
sensor_fusionและfeature_combinationจะอยู่ในกิจกรรมเพิ่มเติมชื่อ Camera ITS Sensor Fusion Rig 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,FAIL*หรือSKIPสำหรับการทดสอบ ITS แต่ละรายการFAIL*แสดงว่าการทดสอบล้มเหลว แต่เนื่องจากยังไม่มีการกำหนดให้ทำการทดสอบ การทดสอบจะรายงานเป็นPASSไปยัง CtsVerifierSKIPแสดงว่าการทดสอบผ่านเนื่องจาก อุปกรณ์ไม่ได้โฆษณาความสามารถพื้นฐานที่กำลังทดสอบ ตัวอย่างเช่น หากอุปกรณ์ไม่ได้โฆษณาผ่านอินเทอร์เฟซกล้องว่ารองรับ DNG ระบบจะข้ามการทดสอบที่เกี่ยวข้องกับการจับภาพไฟล์ DNG และนับเป็นการทดสอบที่PASSหากต้องการรับทราบว่าการทดสอบเป็นไปตามข้อกำหนดในการทดสอบ ให้แตะปุ่มเครื่องหมายถูกสีเขียว จากนั้นรายการการทดสอบ ITS ของกล้องในเมนูการทดสอบของ CTS Verifier จะเปลี่ยนเป็นสีเขียว ซึ่งหมายความว่าโทรศัพท์ผ่าน ITS ของกล้องแล้ว
การทดสอบ DUT แบบขนาน
อุปกรณ์ที่ใช้ Android 14 ขึ้นไปรองรับการทดสอบ DUT แบบขนาน
ซึ่งช่วยให้คุณทดสอบ DUT พร้อมกันกับอุปกรณ์หลายเครื่องเพื่อเพิ่มความเร็ว
ในการทดสอบโดยรวม เช่น การทดสอบแบบคู่ขนานช่วยให้คุณทดสอบกล้อง 0 ในอุปกรณ์หนึ่งและกล้อง 1 ในอุปกรณ์อีกเครื่องได้พร้อมกัน สำหรับ Android
17 ขึ้นไป เนื่องจากมีการแยกการทดสอบ 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"
หากต้องการเรียกใช้ Testbed แบบขนาน ให้ใช้คำสั่งต่อไปนี้
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 หลายฉบับ (จากการทดสอบหรืออุปกรณ์ต่างๆ) ไว้ในการส่งที่รวมเป็นหนึ่งเดียว
กระบวนการส่ง
หากต้องการส่งผลการทดสอบ ITS ของกล้องที่รวบรวมไว้เพื่อขออนุมัติบิลด์ ให้ทำตามขั้นตอนต่อไปนี้
- เตรียมอุปกรณ์: รวบรวมอุปกรณ์ภายใต้การทดสอบ (DUT) 2-3 เครื่องซึ่งมีรหัสเฉพาะของบิลด์ที่เหมือนกันทุกประการ
- ติดตั้ง CTS Verifier: ติดตั้ง APK ของ CTS Verifier เวอร์ชันล่าสุด ซึ่งรับได้จาก Build Explorer ที่ระบุ
เรียกใช้การทดสอบแบบขนาน:
- ติดตั้ง DUT ในแท่นแยกกัน
- เรียกใช้ฉาก ITS ของกล้องที่แตกต่างกันในแต่ละอุปกรณ์พร้อมกัน
- การรวบรวมรายงาน: ดึงรายงาน CTS Verifier หลังจากการเรียกใช้แต่ละครั้ง ซึ่งรวมถึงรายงานที่ฉากล้มเหลว เรียกใช้ฉากที่ล้มเหลวอีกครั้งในรันครั้งถัดไปเท่านั้น
ส่งรายงาน: อัปโหลดรายงาน CTS Verifier หลายรายการที่รวบรวมจากอุปกรณ์ทั้งหมด
ตรวจสอบผลลัพธ์: เมื่ออัปโหลดรายงานแล้ว ให้ตรวจสอบผลลัพธ์รวม ดังนี้
- ส่วนการวิเคราะห์การทดสอบจะแสดงรายการฉากทั้งหมดที่ดำเนินการ แล้ว
ฉากที่ไม่ได้ดำเนินการหรือล้มเหลวจะแสดงอยู่ในส่วนล้มเหลว
รูปที่ 1 เอกสารประกอบของฉากที่ ไม่ได้ดำเนินการหรือล้มเหลว
โดยฉากที่ข้ามจะแสดงอยู่ในส่วนการข้ามที่รวบรวม
รูปที่ 2 ฉากที่จัดหมวดหมู่เป็น Aggregated Pass
สถานะการอนุมัติบิลด์
การอนุมัติบิลด์จะได้รับเมื่อฉากที่จำเป็นทั้งหมดเสร็จสมบูรณ์แล้วในรายงานที่รวบรวม
โมเดลสัญญาณรบกวน 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
อัตโนมัติจะตรวจสอบความถูกต้องของโมเดลสัญญาณรบกวนโดยการยืนยันว่าค่าสัญญาณรบกวน
สำหรับการเปิดรับแสงและอัตราขยายของช็อตที่ระบุไว้ในข้อมูลกล้องถูกต้อง
การทดสอบที่ผ่านอย่างหวุดหวิด (สถานะการทดสอบ 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
ซึ่งจะนำไปสู่ผลิตภัณฑ์ที่มีคุณภาพสูงและเสถียร