ชุดทดสอบรูปภาพจากกล้อง (ITS) เป็นเฟรมเวิร์กสำหรับทำการทดสอบรูปภาพ ที่ผลิตโดยกล้อง Android เป้าหมายทั่วไปของการทดสอบในฝ่ายไอทีแต่ละครั้งคือ กำหนดค่ากล้องในลักษณะเฉพาะ จับภาพอย่างน้อย 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.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 เพื่อให้มีการรองรับเวอร์ชันที่เข้ากันได้ สำหรับรายละเอียดเกี่ยวกับ เวอร์ชัน Python และแพ็กเกจที่จะติดตั้งสำหรับรุ่นที่เจาะจง โปรดดูที่ บันทึกประจำรุ่นของ ITS กล้องถ่ายรูปสำหรับรุ่นที่เกี่ยวข้อง
Mobly
สำหรับ Android 12 ขึ้นไป เฟรมเวิร์กการทดสอบของ Mobly
ต้องติดตั้ง Mobly ให้คุณตั้งค่า DUT และติดชาร์ตแท็บเล็ตใน
its_base_test
ชั้นเรียน หากต้องการติดตั้งเฟรมเวิร์กการทดสอบ Mobly ให้เรียกใช้คำสั่งต่อไปนี้
pip install mobly
การตั้งค่าสภาพแวดล้อม
หากต้องการตั้งค่าสภาพแวดล้อมการทดสอบ ให้เรียกใช้คำสั่งต่อไปนี้
cd CameraITS
source build/envsetup.sh
คำสั่งนี้ตรวจสอบการติดตั้ง Python ตั้งค่า PYTHONPATH
ตัวแปรสภาพแวดล้อม และเรียกใช้การทดสอบหน่วยในโมดูล utils/*.py
หากไม่ใช่
พิมพ์ไปยังเครื่องอ่านบัตร สภาพแวดล้อมพร้อมที่จะเรียกใช้ระบบไอที
การทดสอบ
หากคุณเห็นข้อความแสดงข้อผิดพลาด
ที่ 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
การตั้งค่าฉาก
เราขอแนะนำให้ใช้ การตั้งค่าอุปกรณ์ไอทีที่มาพร้อมกับกล้องสำหรับ ความสะดวกในการทดสอบโดยอัตโนมัติ ความเสถียร และประสิทธิภาพ ITS แบบครบวงจร เครื่องมือทดสอบรองรับความต้องการด้านแสง การจัดกึ่งกลาง และการเปลี่ยนแผนภูมิทั้งหมด สำหรับฝ่ายไอที นอกจากนี้ ระบบยังต้องใช้ ITS-in-box สำหรับ ส่วนขยายกล้อง การทดสอบ
สำหรับการทดสอบด้วยตนเอง โปรดตรวจสอบสิ่งต่อไปนี้
- DUT อยู่บนขาตั้งกล้อง
- DUT จะชี้ไปยังฉากที่ถูกต้องสำหรับการทดสอบแต่ละครั้ง (สคริปต์การทดสอบ ITS ให้ข้อความแจ้งให้เปลี่ยนการตั้งค่าฉากก่อนเริ่มการทดสอบใน )
- DUT เชื่อมต่อกับเครื่องโฮสต์ผ่าน USB
- DUT จะไม่เคลื่อนที่ในระหว่างการทดสอบ
- ภายในฉากจะมีแสงส่องสว่างโดยมีแหล่งกำเนิดแสงที่มั่นคงและไม่ผันผวน (ไม่ต้อง ใช้หลอดฟลูออเรสเซนต์เพราะจะทำให้กะพริบ)
สคริปต์ทดสอบ ITS แสดงข้อความแจ้งขอให้ผู้ใช้เปลี่ยนฉาก การตั้งค่าก่อนเริ่มการทดสอบในฉากใหม่
ต้องตั้งค่าการวางแนวของโทรศัพท์เพื่อให้กล้องถ่ายภาพโดยไม่มี การหมุน วิธีที่ง่ายที่สุดในการตรวจสอบคือการดูฉากใบหน้าใน ฉาก 2 โทรศัพท์ส่วนใหญ่วางโทรศัพท์ในแนวนอน โทรศัพท์หมุนทวนเข็มนาฬิกาสำหรับกล้องหลังและหมุนตามเข็มนาฬิกาสำหรับ กล้องหน้า
ไฟล์การกำหนดค่า
หากต้องการใช้เฟรมเวิร์ก 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.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 ของการทดสอบหลายรายการ
ต่อไปนี้คือตัวอย่างไฟล์ 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)
การเรียกใช้สคริปต์แต่ละครั้งจะพิมพ์บันทึกที่แสดงสถานะ "ผ่าน" "ไม่ผ่าน" หรือ "ข้าม" การทดสอบ ITS แต่ละครั้ง โดย "ข้าม" แสดงให้เห็นว่าผ่านการทดสอบเนื่องจากอุปกรณ์ ไม่ได้โฆษณาความสามารถพื้นฐานที่กำลังทดสอบ ตัวอย่างเช่น หาก อุปกรณ์ไม่โฆษณาผ่านอินเทอร์เฟซของกล้องที่รองรับ ระบบจะข้ามการทดสอบ DNG ที่เกี่ยวข้องกับการจับภาพไฟล์ DNG และนับเป็นผ่าน
หากต้องการทราบว่าการทดสอบมีคุณสมบัติตรงตามข้อกำหนดการทดสอบ ให้แตะ ปุ่มเครื่องหมายถูกสีเขียว รายการการทดสอบ ITS ของกล้องใน CTS Verifier จากนั้นเมนู "ทดสอบ" จะกลายเป็นสีเขียวและแสดงว่าโทรศัพท์ผ่านการทดสอบ ITS
การทดสอบ DUT พร้อมกัน
อุปกรณ์ที่ใช้ Android 14 ขึ้นไปจะรองรับการใช้งานพร้อมกัน การทดสอบ DUT ซึ่งจะช่วยให้คุณทดสอบ DUT ควบคู่ไปกับแท่นวางหลายตัวเพื่อเพิ่มความเร็วได้ การทดสอบโดยรวม เช่น การทดสอบพร้อมกันช่วยให้คุณทดสอบกล้อง 0 ใน 1 ได้ และกล้องตัวที่ 1 ในชุดอุปกรณ์อีกเครื่องหนึ่งพร้อมกัน การทดสอบทั้งหมดสําหรับพร้อมกัน เซสชันการทดสอบจะรวมอยู่ในเซสชัน CTS Verifier ในข้อมูลอ้างอิง DUT คุณต้องทำการทดสอบพร้อมกันกับการควบคุมแสง Arduino ในฐานะการจัดแสงด้วยตนเอง การทดสอบพร้อมกันไม่รองรับการควบคุม โปรดตรวจสอบว่า อุปกรณ์ควบคุม Arduino เดียวกันจะควบคุมแสงสำหรับอุปกรณ์แต่ละอัน
ต่อไปนี้คือตัวอย่างไฟล์ config.yml
ที่กำหนด Testbed 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"
หากต้องการเรียกใช้ testbeds พร้อมกัน ให้ใช้คำสั่งต่อไปนี้
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 ของกล้อง
การตรวจสอบโมเดลเสียงรบกวน
tests/scene1_1/test_dng_noise_model.py
การทดสอบ ITS แบบอัตโนมัติจะตรวจสอบโมเดลสัญญาณรบกวนโดยยืนยันว่าค่าของสัญญาณรบกวน
การรับแสงและเกนของการถ่ายภาพที่ให้ไว้ในข้อมูลกล้องถูกต้อง