ชุดทดสอบรูปภาพจากกล้อง (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
การตั้งค่าโฮสต์
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 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 จะแสดงข้อความแจ้งให้ผู้ใช้เปลี่ยนการตั้งค่าฉากก่อนเริ่มการทดสอบในฉากใหม่
คุณต้องตั้งค่าการวางแนวของโทรศัพท์เพื่อให้กล้องถ่ายภาพโดยไม่มีการหมุน วิธีตรวจสอบที่ง่ายที่สุดคือการดูฉากใบหน้าในฉาก 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 ของ 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 ในเมนูการทดสอบ ให้เลือก camera ITS Test
จากเครื่องโฮสต์ ให้เรียกใช้การทดสอบ ITS จากไดเรกทอรี
CameraITS/
เช่น สําหรับอุปกรณ์ที่มีกล้องหน้าและกล้องหลัง ให้เรียกใช้คําสั่งต่อไปนี้python tools/run_all_tests.py
สคริปต์จะวนผ่านกล้องและฉากทดสอบตามไฟล์
config.yml
สำหรับการตั้งค่าการแก้ไขข้อบกพร่อง เราขอแนะนำให้เรียกใช้โหมดscene2
ด้วยการทดสอบ 1 ครั้งเพื่อให้ตอบสนองเร็วที่สุดสำหรับการทดสอบด้วยตนเอง ก่อนเริ่มเรียกใช้ชุดการทดสอบ 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 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"
หากต้องการเรียกใช้ 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 ต้องมีรูปแบบสัญญาณรบกวนในข้อมูลเมตาของผลการจับภาพของแต่ละช็อต RAW โมเดลสัญญาณรบกวนนี้ต้องฝังอยู่ใน HAL ของกล้องสำหรับกล้องแต่ละตัว (เช่น กล้องหน้าและกล้องหลัง) ในอุปกรณ์ที่อ้างว่ารองรับ
การใช้งานโมเดลเสียงรบกวน
หากต้องการใช้โมเดลสัญญาณรบกวน ให้ทําตามขั้นตอนต่อไปนี้เพื่อสร้างโมเดลสัญญาณรบกวน และฝังโมเดลลงใน HAL ของกล้อง
หากต้องการสร้างโมเดลนอยส์สำหรับกล้องแต่ละตัว ให้เรียกใช้สคริปต์
dng_noise_model.py
ในไดเรกทอรีtools
ซึ่งจะแสดงข้อมูลโค้ด C ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีตั้งค่ากล้องและสภาพแวดล้อมการจับภาพได้จากเอกสารDngNoiseModel.pdf
ในไดเรกทอรีtools
หากต้องการใช้โมเดลสัญญาณรบกวนสำหรับอุปกรณ์ ให้ตัดและวางข้อมูลโค้ด C ลงใน HAL ของกล้อง
การตรวจสอบโมเดลเสียงรบกวน
การทดสอบ ITS แบบอัตโนมัติของ tests/scene1_1/test_dng_noise_model.py
จะตรวจสอบโมเดลสัญญาณรบกวนโดยยืนยันว่าค่าสัญญาณรบกวนสำหรับการเปิดรับแสงและอัตราขยายของช็อตที่ระบุไว้ในข้อมูลกล้องนั้นถูกต้อง