Camera Image Test Suite (ITS) adalah framework untuk menjalankan pengujian pada gambar yang dihasilkan oleh kamera Android. Tujuan umum dari setiap pengujian di ITS adalah untuk mengkonfigurasi kamera dengan cara tertentu, menangkap satu atau lebih gambar, dan memeriksa gambar untuk melihat apakah gambar tersebut berisi data gambar yang diharapkan. Banyak pengujian yang mengharuskan kamera diarahkan ke grafik target tertentu atau diterangi pada intensitas tertentu.
ITS terletak di test harness CTS Verifier di cts/apps/CameraITS
. Perangkat harus lulus pengujian ITS sesuai dengan fitur dukungan yang diiklankan oleh kerangka kamera untuk aplikasi pihak ketiga sebagai bagian dari CTS.
Mempersiapkan
Untuk menjalankan pengujian ITS, hal-hal berikut harus diatur:
- Perangkat yang sedang diuji (DUT)
- Mesin host (misalnya, desktop atau laptop Linux)
- Pemandangan yang dipotret kamera
Penyiapan perangkat dalam pengujian (DUT).
Untuk menyiapkan DUT, ikuti langkah-langkah berikut:
- Hubungkan DUT ke mesin host melalui USB.
- Berikan izin kepada host untuk mengakses DUT melalui ADB.
Instal aplikasi CTS Verifier (
CtsVerifier.apk
) ke perangkat. Untuk informasi lebih lanjut, lihat Menggunakan CTS Verifier .extract root/out/host/linux-x86/cts-verfier/android-cts-verifier.zip
cd android-cts-verifier
adb install -r -g CtsVerifier.apk
Pengaturan tuan rumah
ITS mengharuskan mesin host terhubung ke DUT melalui USB, dapat menggunakan ADB untuk kontrol dan komunikasi perangkat, dan menginstal perangkat lunak yang diperlukan.
Untuk menyiapkan mesin host Anda, pastikan perangkat lunak berikut diinstal.
Alat Platform SDK Android
Alat Platform Android SDK harus diinstal dan ADB harus berada di jalur eksekusi shell atau terminal yang berjalan pada mesin host. Untuk versi alat Platform SDK Android yang dirilis secara publik, lihat catatan rilis Alat Platform SDK .
ular piton
Python harus diinstal pada mesin host. Kami merekomendasikan penggunaan distribusi Python yang dibundel untuk memastikan dukungan untuk versi yang kompatibel. Untuk detail tentang versi Python dan paket mana yang akan diinstal untuk rilis tertentu, lihat catatan rilis Camera ITS untuk rilis terkait.
secara seluler
Untuk Android 12 dan lebih tinggi, kerangka pengujian Mobly harus diinstal. Mobly memungkinkan Anda menyiapkan DUT dan tablet grafik di kelas its_base_test
. Untuk menginstal kerangka pengujian Mobly, jalankan:
pip install mobly
Pengaturan lingkungan
Untuk menyiapkan lingkungan pengujian, jalankan:
cd CameraITS
source build/envsetup.sh
Perintah ini memeriksa instalasi Python, menyiapkan variabel lingkungan PYTHONPATH
, dan menjalankan pengujian unit pada modul utils/*.py
. Jika tidak ada kesalahan yang dicetak ke terminal, lingkungan siap menjalankan pengujian ITS.
Jika Anda melihat pesan kesalahan libtinfo.so.6: no version information available (required by /bin/sh)
saat runtime, jalankan perintah berikut untuk mengganti nama file libtinfo.so.6
.
mv $ENV_DIRECTORY/lib/libtinfo.so.6 $ENV_DIRECTORY/lib/libtinfo.so.6.bak
Pengaturan adegan
Untuk mengatur adegan, kami merekomendasikan penggunaan pengaturan Kamera ITS-in-a-box untuk kemudahan dalam otomatisasi, keandalan, dan efisiensi dalam pengujian. Rig pengujian ITS-in-a-box mendukung semua persyaratan pencahayaan, pemusatan, dan perubahan bagan untuk ITS. Selain itu, ITS-in-a-box diperlukan untuk pengujian ekstensi kamera .
Untuk pengujian manual, pastikan hal berikut:
- DUT ada di tripod
- DUT diarahkan ke adegan yang benar untuk setiap tes. (Skrip pengujian ITS memberikan petunjuk untuk mengubah pengaturan adegan sebelum memulai pengujian di adegan baru.)
- DUT terhubung ke mesin host melalui USB.
- DUT tidak bergerak selama uji coba.
- Pemandangan tersebut diterangi dengan sumber cahaya yang stabil dan tidak berfluktuasi. (Jangan gunakan lampu neon karena dapat menimbulkan kedipan.)
Skrip pengujian ITS menampilkan prompt yang meminta pengguna untuk mengubah pengaturan adegan sebelum memulai pengujian di adegan baru.
Orientasi ponsel harus diatur agar kamera mengambil gambar tanpa rotasi. Cara termudah untuk memeriksanya adalah dengan adegan wajah di adegan2. Kebanyakan ponsel memiliki ponsel dalam orientasi lanskap dengan ponsel diputar berlawanan arah jarum jam untuk kamera belakang dan diputar searah jarum jam untuk kamera depan.
File konfigurasi
Dengan menggunakan kerangka Mobly, Anda harus membuat file konfigurasi config.yml
untuk menentukan testbed Mobly. Berikut ini adalah contoh untuk kasus penggunaan yang berbeda.
File config.yml adegan berbasis tablet
Berikut ini adalah contoh file config.yml
untuk adegan berbasis tablet. Untuk pengujian berbasis tablet, kata kunci TABLET
harus ada dalam nama pengujian. Selama inisialisasi, pelari pengujian Mobly menginisialisasi parameter dalam file dan meneruskannya ke pengujian individual.
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
Untuk menjalankan test bed, jalankan tools/run_all_tests.py
. Jika tidak ada nilai baris perintah yang menentukan kamera atau pemandangan, pengujian dijalankan dengan nilai file config.yml
. Jika ada nilai baris perintah untuk kamera atau pemandangan, nilai tersebut akan menggantikan nilai di bagian TestParams
pada file config.yml
. Misalnya:
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
file config.yml adegan sensor_fusion
Berikut ini adalah contoh file config_yml
untuk pengujian sensor_fusion
. Untuk pengujian sensor_fusion
, kata kunci SENSOR_FUSION
harus ada dalam nama testbed. Android 13 dan lebih tinggi hanya mendukung pengontrol Arduino untuk fusi sensor karena pratinjau dan pengujian stabilisasi video. Android 12 mendukung pengontrol Arduino dan 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
Untuk menjalankan tes sensor_fusion
dengan sensor fusion box , jalankan:
python tools/run_all_tests.py scenes=sensor_fusion
python tools/run_all_tests.py scenes=sensor_fusion camera=0
Beberapa file config.yml testbeds
Berikut ini adalah contoh file config.yml
dengan beberapa testbed, testbed tablet, dan testbed sensor_fusion
. Testbed yang benar ditentukan oleh adegan yang diuji.
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
Pengujian manual file config.yml
Berikut ini adalah contoh file config.yml
untuk pengujian manual. Mulai Android 14, pengujian manual didukung untuk semua pengujian kecuali pengujian scene_extensions
. Untuk pengujian manual, kata kunci MANUAL
harus ada pada nama testbed. Selain itu, bagian AndroidDevice
tidak dapat menyertakan bagian serial atau label untuk tablet.
TestBeds:
- Name: TEST_BED_MANUAL
Controllers:
AndroidDevice:
- serial: 8A9X0NS5Z
label: dut
TestParams:
debug_mode: "False"
camera: 0
scene: 1
Menjalankan tes ITS
Bagian ini menjelaskan cara menjalankan pengujian ITS.
Memanggil tes
Setelah perangkat, mesin host (termasuk lingkungan), dan kondisi fisik disiapkan, jalankan pengujian ITS menggunakan proses berikut.
Buka aplikasi CTS Verifer. Pada menu tes, pilih Kamera ITS Test .
Dari mesin host, jalankan pengujian ITS dari direktori
CameraITS/
. Misalnya, untuk perangkat dengan kamera depan dan belakang, jalankan perintah berikut:python tools/run_all_tests.py
Skrip melakukan iterasi melalui kamera dan adegan pengujian berdasarkan file
config.yml
. Untuk pengaturan debug, sebaiknya jalankan salah satuscene2
dengan satu pengujian untuk penyelesaian tercepat.Untuk pengujian manual, sebelum mulai menjalankan serangkaian pengujian ITS pada setiap adegan, skrip mengambil gambar adegan saat ini, menyimpannya sebagai JPEG, mencetak jalur ke JPEG ke konsol, dan meminta pengguna untuk mengonfirmasi apakah gambarnya oke. Ini menangkap dan mengonfirmasi loop aliran hingga pengguna mengonfirmasi bahwa gambarnya baik-baik saja. Berikut pesan-pesan dalam alur ini.
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)
Setiap eksekusi skrip mencetak log yang menunjukkan PASS, FAIL, atau SKIP untuk setiap pengujian ITS, dengan SKIP menunjukkan bahwa pengujian berhasil karena perangkat tidak mengumumkan kemampuan dasar yang sedang diuji. Misalnya, jika perangkat tidak beriklan melalui antarmuka kamera yang mendukung DNG, pengujian yang terkait dengan pengambilan file DNG akan dilewati dan dihitung sebagai kelulusan.
Untuk menyatakan bahwa tes telah memenuhi persyaratan tes, ketuk tombol tanda centang hijau. Entri Tes Kamera ITS di menu tes CTS Verifier kemudian menjadi hijau dan menandakan ponsel telah lulus Kamera ITS.
Pengujian DUT paralel
Perangkat yang menjalankan Android 14 atau lebih tinggi mendukung pengujian DUT paralel. Hal ini memungkinkan Anda menguji DUT secara paralel dengan beberapa rig untuk mempercepat pengujian secara keseluruhan. Misalnya, pengujian paralel memungkinkan Anda menguji kamera 0 di satu rig dan kamera 1 di rig lain secara bersamaan. Semua pengujian untuk sesi pengujian paralel dikumpulkan pada sesi Pemverifikasi CTS pada referensi DUT. Anda harus menjalankan pengujian paralel dengan kontrol pencahayaan Arduino, karena kontrol pencahayaan manual tidak didukung dengan pengujian paralel. Pastikan saluran berbeda pada pengontrol Arduino yang sama mengontrol pencahayaan untuk setiap rig.
Berikut ini adalah contoh file config.yml
yang mendefinisikan tiga testbed untuk dijalankan secara paralel.
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"
Untuk menjalankan testbeds secara paralel, gunakan perintah berikut:
for i in 0 1 2; do python3 tools/run_all_tests.py testbed_index=$i num_testbeds=3 & done; wait
Model kebisingan DNG
Perangkat yang mengiklankan kemampuan menangkap RAW atau DNG harus menyediakan model noise dalam metadata hasil pengambilan setiap gambar mentah. Model noise ini harus ditanamkan ke dalam HAL kamera untuk setiap kamera (misalnya kamera depan dan belakang) pada perangkat yang diklaim mendukung.
Implementasi model kebisingan
Untuk menerapkan model derau, ikuti langkah-langkah berikut untuk menghasilkan model derau dan menyematkan model tersebut ke HAL kamera.
Untuk menghasilkan model noise untuk setiap kamera, jalankan skrip
dng_noise_model.py
di direktoritools
. Ini menghasilkan cuplikan kode C. Untuk informasi selengkapnya tentang cara menyiapkan kamera dan lingkungan pengambilan gambar, lihat dokumenDngNoiseModel.pdf
di direktoritools
.Untuk menerapkan model kebisingan pada perangkat, potong dan tempel cuplikan kode C ke HAL kamera.
Validasi model kebisingan
tests/scene1_1/test_dng_noise_model.py
pengujian ITS otomatis memvalidasi model kebisingan dengan memverifikasi bahwa nilai kebisingan untuk eksposur bidikan dan penguatan yang diberikan dalam data kamera sudah benar.