Sejumlah perubahan Kamera ITS disertakan dalam rilis Android 12. Halaman ini merangkum perubahan yang terbagi dalam empat kategori besar:
Refaktor ke Python 3
Karena penghentian Python 2.7 pada bulan Januari 2020, seluruh basis kode Camera ITS telah difaktorkan ulang menjadi Python 3. Versi dan pustaka Python berikut diperlukan di Android 12:
- Python 3.7.9 atau Python 3.7.10
- OpenCV 3.4.2
- Angka 1.19.2
- Matplotlib 3.3.2
- Sains 1.5.2
- pySerial 3.5
- Bantal 8.1.0
- PyYAML 5.3.1
Peluncur pengujian utama, tools/run_all_tests.py
, tetap sama dengan versi Android 11 atau lebih rendah dan difaktorkan ulang ke Python 3.
Semua pengujian individual difaktorkan ulang dan menggunakan kelas penyiapan pengujian baru yang ditentukan dalam tests/its_base_test.py
. Sebagian besar nama pengujian dan fungsinya tetap sama. Di Android 12, semua pengujian individual kini memuat adegannya. Meskipun pemuatan adegan untuk setiap pengujian meningkatkan waktu pengujian secara keseluruhan, hal ini memungkinkan proses debug pada pengujian individual.
Untuk informasi selengkapnya tentang perubahan pengujian individual, lihat Perubahan pengujian .
Modul Python berikut difaktorkan ulang dengan perubahan nama:
-
pymodules/its/caps.py
→utils/camera_properties_utils.py
-
pymodules/its/cv2image.py
→utils/opencv_processing_utils.py
-
pymodules/its/device.py
→utils/its_session_utils.py
-
pymodules/its/error.py
→utils/error_util.py
-
pymodules/its/image.py
→utils/image_processing_utils.py
-
pymodules/its/objects.py
→utils/capture_request_utils.py
-
pymodules/its/target.py
→utils/target_exposure_utils.py
-
tools/hw.py
→utils/sensor_fusion_utils.py
Adopsi kerangka uji mobly
Mobly adalah kerangka pengujian berbasis Python yang mendukung kasus pengujian yang memerlukan banyak perangkat dengan pengaturan perangkat keras khusus. Kamera ITS menggunakan infrastruktur pengujian Mobly untuk memungkinkan kontrol dan pencatatan pengujian yang lebih baik.
Kamera ITS menggunakan infrastruktur pengujian Mobly untuk memungkinkan kontrol dan pencatatan pengujian yang lebih baik. Mobly adalah kerangka pengujian berbasis Python yang mendukung kasus pengujian yang memerlukan banyak perangkat dengan pengaturan perangkat keras khusus. Untuk informasi lebih lanjut tentang Mobly, lihat google/mobly .
file config.yml
Dengan kerangka Mobly, Anda dapat menyiapkan perangkat yang sedang diuji (DUT) dan tablet grafik di kelas its_base_test
. File config.yml
(YAML) digunakan untuk membuat testbed Mobly. Beberapa testbed dapat dikonfigurasi dalam file konfigurasi ini, misalnya, tablet dan testbed fusi sensor. Dalam setiap bagian pengontrol testbed, Anda dapat menentukan device_ids
untuk mengidentifikasi perangkat Android yang sesuai untuk test runner. Selain ID perangkat, parameter lain seperti brightness
tablet, chart_distance
, debug_mode
, camera_id
, dan scene_id
diteruskan di kelas pengujian. Nilai parameter pengujian yang umum adalah:
brightness: 192 (all tablets except Pixel C)
chart_distance: 31.0 (rev1/rev1a box for FoV < 90° cameras)
chart_distance: 22.0 (rev2 test rig for FoV > 90° cameras)
Pengujian berbasis tablet
Untuk pengujian berbasis tablet, kata kunci TABLET
harus ada dalam nama pengujian. Selama inisialisasi, test runner Mobly menginisialisasi TestParams
dan meneruskannya ke pengujian individual.
Berikut ini adalah contoh file config.yml
untuk pengoperasian berbasis tablet.
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
Testbed dapat dipanggil menggunakan tools/run_all_tests.py
. Jika tidak ada nilai baris perintah, pengujian dijalankan dengan nilai file config.yml
. Selain itu, Anda dapat mengganti nilai file konfigurasi camera
dan scene
di baris perintah menggunakan perintah yang mirip dengan Android 11 atau lebih rendah.
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
Pengujian fusi sensor
Untuk pengujian fusi sensor , nama testbed harus menyertakan kata kunci SENSOR_FUSION
. Testbed yang benar ditentukan oleh adegan yang diuji. Android 12 mendukung pengontrol Arduino dan Canakit untuk fusi sensor .
Berikut ini adalah contoh file config.yml
untuk menjalankan fusi sensor.
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 # cntl can be arduino or canakit
rotator_ch: 1
camera: 0
Untuk menjalankan uji fusi sensor dengan rig uji fusi sensor , gunakan:
python tools/run_all_tests.py scenes=sensor_fusion
python tools/run_all_tests.py scenes=sensor_fusion camera=0
Beberapa tempat pengujian
Beberapa testbed dapat dimasukkan dalam file konfigurasi. Kombinasi yang paling umum adalah memiliki tempat pengujian tablet dan tempat pengujian fusi sensor.
Berikut ini adalah contoh file config.yml
dengan pengujian fusi tablet dan sensor.
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
Pengujian manual tetap didukung di Android 12. Namun, testbed harus mengidentifikasi pengujian dengan kata kunci MANUAL
di nama testbed. Selain itu, testbed tidak dapat menyertakan ID tablet.
Berikut ini adalah contoh file config.yml
untuk pengujian manual.
TestBeds:
- Name: TEST_BED_MANUAL
Controllers:
AndroidDevice:
- serial: 8A9X0NS5Z
label: dut
TestParams:
debug_mode: "False"
chart_distance: 31.0
camera: 0
scene: scene1
Uji adegan tanpa tablet
Pengujian adegan 0 dan adegan 5 dapat dilakukan dengan TEST_BED_TABLET_SCENES
atau dengan TEST_BED_MANUAL
. Namun, jika pengujian dilakukan dengan TEST_BED_TABLET_SCENES
, tablet harus terhubung dan ID serial tablet harus valid meskipun tablet tidak digunakan karena pengaturan kelas pengujian menetapkan nilai ID serial untuk tablet.
Jalankan tes individual
Pengujian individual hanya dapat dijalankan untuk tujuan debug karena hasilnya tidak dilaporkan ke CTS Verifier . Karena file config.yml
tidak dapat ditimpa pada baris perintah untuk camera
dan scene
, parameter ini harus benar di file config.yml
untuk pengujian individual yang dimaksud. Selain itu, jika ada lebih dari satu testbed di file konfigurasi, Anda harus menentukan testbed dengan flag --test_bed
. Misalnya:
python tests/scene1_1/test_black_white.py --config config.yml --test_bed TEST_BED_TABLET_SCENES
Uji artefak
Di Android 12, artefak pengujian untuk Kamera ITS disimpan dengan cara yang mirip dengan Android 11 atau lebih rendah, tetapi dengan perubahan berikut:
- Direktori artefak pengujian
/tmp
memilikiCameraITS_
yang diawali dengan string acak 8 karakter untuk kejelasan. - Output pengujian dan kesalahan disimpan di
test_log.DEBUG
untuk setiap pengujian, bukantest_name_stdout.txt
dantest_name_stderr.txt
. - Logcat DUT dan tablet dari masing-masing pengujian disimpan di direktori
/tmp/CameraITS_########
yang menyederhanakan proses debug karena semua informasi yang diperlukan untuk men-debug masalah 3A dicatat.
Uji perubahan
Di Android 12, adegan tablet adalah file PNG, bukan file PDF. Penggunaan file PNG memungkinkan lebih banyak model tablet menampilkan pemandangan dengan baik.
adegan0/test_jitter.py
Tes test_jitter
dijalankan pada kamera fisik tersembunyi di Android 12.
adegan1_1/test_black_white.py
Untuk Android 12, test_black_white
memiliki fungsi test_black_white
dan test_channel_saturation
.
Tabel berikut menjelaskan dua pengujian individual di Android 11.
Nama tes | tingkat API pertama | Pernyataan |
---|---|---|
adegan1_1/test_black_white.py | SEMUA | Eksposur singkat, nilai RGB gain rendah ~[0, 0, 0] Eksposur panjang, nilai RGB gain tinggi ~[255, 255, 255] |
adegan1_1/test_channel_saturation.py | 29 | Mengurangi toleransi pada perbedaan [255, 255, 255] untuk menghilangkan rona warna pada gambar putih. |
Tabel berikut menjelaskan pengujian gabungan, scene1_1/test_black_white.py, di Android 12.
Nama tes | tingkat API pertama | Pernyataan |
---|---|---|
adegan1_1/test_black_white.py | SEMUA | Eksposur singkat, nilai RGB gain rendah ~[0, 0, 0] Eksposur panjang, nilai RGB gain tinggi ~[255, 255, 255] dan pengurangan toleransi antar nilai untuk menghilangkan rona warna pada gambar putih. |
adegan1_1/test_burst_sameness_manual.py
Pengujian test_burst_sameness_manual
dijalankan pada kamera fisik tersembunyi di Android 12.
adegan1_2/test_tonemap_sequence.py
Tes test_tonemap_sequence
dijalankan pada kamera TERBATAS di Android 12.
adegan1_2/test_yuv_plus_raw.py
Tes test_yuv_plus_raw
dijalankan pada kamera fisik tersembunyi di Android 12.
adegan2_a/test_format_combos.py
Pengujian test_format_combos
dijalankan pada kamera TERBATAS di Android 12.
adegan3/test_flip_mirror.py
Tes test_flip_mirror
dijalankan pada kamera TERBATAS di Android 12.
adegan4/test_aspect_ratio_and_crop.py
Menemukan lingkaran di scene4/test_aspect_ratio_and_crop.py
telah difaktorkan ulang di Android 12.
Versi Android sebelumnya menggunakan metode yang melibatkan pencarian kontur anak (lingkaran) di dalam kontur induk (persegi) dengan filter untuk ukuran dan warna. Android 12 menggunakan metode yang melibatkan pencarian semua kontur lalu memfilter dengan mencari fitur yang paling melingkar . Untuk menyaring lingkaran palsu pada tampilan, diperlukan luas kontur minimum, dan kontur lingkaran harus berwarna hitam.
Kontur dan kriteria pemilihannya ditunjukkan pada gambar berikut.
Gambar 1. Gambar konseptual kontur dan kriteria pemilihan
Metode Android 12 lebih sederhana dan berfungsi untuk menyelesaikan masalah kliping kotak pembatas di beberapa tablet tampilan. Semua kandidat lingkaran dicatat untuk tujuan debugging.
Di Android 12, pengujian pemangkasan dijalankan untuk perangkat FULL
dan LEVEL3
. Android 11 atau versi lebih rendah melewatkan pernyataan pengujian pemotongan untuk perangkat FULL
.
Tabel berikut mencantumkan pernyataan untuk test_aspect_ratio_and_crop.py
yang sesuai dengan tingkat perangkat tertentu dan tingkat API pertama.
Tingkat perangkat | tingkat API pertama | Pernyataan |
---|---|---|
TERBATAS | SEMUA | Rasio aspek FoV untuk format 4:3, 16:9, 2:1 |
PENUH | < 31 | Rasio aspek FoV untuk format 4:3, 16:9, 2:1 |
PENUH | ≥ 31 | Tanaman Rasio aspek FoV untuk format 4:3, 16:9, 2:1 |
TINGKAT 3 | SEMUA | Tanaman Rasio aspek FoV untuk format 4:3, 16:9, 2:1 |
adegan4/test_multi_camera_alignment.py
Metode undo_zoom()
untuk pengambilan YUV di scene4/test_multi_camera_alignment.py
telah difaktorkan ulang agar memperhitungkan pemangkasan yang lebih akurat pada sensor yang tidak cocok dengan rasio aspek pengambilan.
Kode Android 11 Python 2
zoom_ratio = min(1.0 * yuv_w / cr_w, 1.0 * yuv_h / cr_h)
circle[i]['x'] = cr['left'] + circle[i]['x'] / zoom_ratio
circle[i]['y'] = cr['top'] + circle[i]['y'] / zoom_ratio
circle[i]['r'] = circle[i]['r'] / zoom_ratio
Kode Android 12 Python 3
yuv_aspect = yuv_w / yuv_h
relative_aspect = yuv_aspect / (cr_w/cr_h)
if relative_aspect > 1:
zoom_ratio = yuv_w / cr_w
yuv_x = 0
yuv_y = (cr_h - cr_w / yuv_aspect) / 2
else:
zoom_ratio = yuv_h / cr_h
yuv_x = (cr_w - cr_h * yuv_aspect) / 2
yuv_y = 0
circle['x'] = cr['left'] + yuv_x + circle['x'] / zoom_ratio
circle['y'] = cr['top'] + yuv_y + circle['y'] / zoom_ratio
circle['r'] = circle['r'] / zoom_ratio
sensor_fusion/test_sensor_fusion.py
Di Android 12, metode untuk mendeteksi fitur dalam gambar ditambahkan untuk pengujian fusi sensor.
Pada versi yang lebih rendah dari Android 12, seluruh gambar digunakan untuk menemukan 240 fitur terbaik yang kemudian di-mask ke tengah 20% untuk menghindari efek rolling shutter dengan persyaratan fitur minimum adalah 30 fitur.
Jika fitur yang ditemukan dengan metode ini tidak mencukupi, Android 12 akan menyamarkan area deteksi fitur ke tengah sebesar 20% terlebih dahulu, dan membatasi fitur maksimum hingga dua kali persyaratan fitur minimum.
Gambar berikut menunjukkan perbedaan antara deteksi fitur Android 11 dan Android 12. Menaikkan ambang batas persyaratan fitur minimum akan mengakibatkan deteksi fitur berkualitas buruk dan berdampak negatif pada pengukuran.
Gambar 2. Perbedaan deteksi fitur antara Android 11 dan Android 12
Tes baru
adegan0/test_solid_color_test_pattern.py
Pengujian baru, test_solid_color_test_pattern
, diaktifkan untuk Android 12. Pengujian ini diaktifkan untuk semua kamera dan dijelaskan dalam tabel berikut.
Pemandangan | Nama tes | tingkat API pertama | Keterangan |
---|---|---|---|
0 | uji_solid_warna_tes_pola | 31 | Mengonfirmasi keluaran gambar berwarna solid dan kemampuan program warna gambar. |
Pola pengujian warna solid harus diaktifkan untuk mendukung mode privasi kamera. Pengujian test_solid_color_test_pattern
mengonfirmasi keluaran gambar YUV berwarna solid dengan warna yang ditentukan oleh pola yang dipilih, dan warna gambar berubah sesuai spesifikasi.
Parameter
-
cameraPrivacyModeSupport
: Menentukan apakah kamera mendukung mode privasi. -
android.sensor.testPatternMode
: Menyetel mode pola pengujian. Tes ini menggunakanSOLID_COLOR
. -
android.sensor.testPatternData
: Menyetel nilai pola pengujian R, Gr, Gb, G untuk mode pola pengujian.
Untuk penjelasan tentang pola pengujian warna solid, lihat SENSOR_TEST_PATTERN_MODE_SOLID_COLOR
.
metode
Bingkai YUV diambil untuk parameter yang ditetapkan dan konten gambar divalidasi. Pola pengujian dikeluarkan langsung dari sensor gambar, sehingga tidak diperlukan pemandangan tertentu. Jika PER_FRAME_CONTROL
didukung, satu frame YUV diambil untuk setiap pengaturan yang diuji. Jika PER_FRAME_CONTROL
tidak didukung, empat bingkai diambil dan hanya bingkai terakhir yang dianalisis untuk memaksimalkan cakupan pengujian pada kamera LIMITED
.
Pengambilan gambar YUV diatur ke pola pengujian BLACK
, WHITE
, RED
, GREEN
, dan BLUE
saturasi penuh. Karena definisi pola pengujian sesuai dengan pola sensor Bayer, saluran warna harus diatur untuk setiap warna seperti yang ditunjukkan pada tabel berikut.
Warna | ujiPatternData (RGGB) |
---|---|
HITAM | (0, 0, 0, 0) |
PUTIH | (1, 1, 1, 1) |
MERAH | (1, 0, 0, 0) |
HIJAU | (0, 1, 1, 0) |
BIRU | (0, 0, 0, 1) |
Tabel pernyataan
Tabel berikut menjelaskan pernyataan pengujian untuk test_solid_color_test_pattern.py
.
Kamera tingkat API pertama | Jenis kamera | Warna menegaskan |
---|---|---|
31 | Bayer | HITAM, PUTIH, MERAH, HIJAU, BIRU |
31 | MONO | PUTIH HITAM |
< 31 | Bayer/MONO | HITAM |
Tes kelas kinerja
adegan2_c/test_camera_launch_perf_class.py
Memverifikasi startup kamera kurang dari 500 ms untuk kamera utama depan dan belakang dengan scene2_c pemandangan wajah.
adegan2_c/test_jpeg_capture_perf_class.py
Memverifikasi latensi pengambilan JPEG 1080p kurang dari 1 detik untuk kamera utama depan dan belakang dengan adegan wajah scene2_c.