Sejumlah perubahan ITS Kamera disertakan dalam rilis Android 12. Halaman ini merangkum perubahan yang termasuk dalam empat kategori luas:
Refaktor ke Python 3
Karena penghentian penggunaan Python 2.7 pada Januari 2020, seluruh codebase ITS Kamera difaktorkan ulang ke Python 3. Versi dan library Python berikut diperlukan di Android 12:
- Python 3.7.9 atau Python 3.7.10
- OpenCV 3.4.2
- Numpy 1.19.2
- Matplotlib 3.3.2
- Scipy 1.5.2
- pySerial 3.5
- Pillow 8.1.0
- PyYAML 5.3.1
Peluncur pengujian utama, tools/run_all_tests.py
, tetap sama seperti versi Android 11 atau yang lebih lama dan diubah ke Python 3.
Semua pengujian individual difaktorkan ulang dan menggunakan class penyiapan pengujian baru yang ditentukan dalam
tests/its_base_test.py
. Sebagian besar nama dan fungsi pengujian 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 setiap pengujian.
Untuk mengetahui 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
Pengadopsian framework pengujian Mobly
Mobly adalah framework pengujian berbasis Python yang mendukung kasus pengujian yang memerlukan beberapa perangkat dengan penyiapan hardware kustom. ITS Kamera menggunakan infrastruktur pengujian Mobly untuk memungkinkan kontrol dan logging pengujian yang lebih baik.
ITS Kamera menggunakan infrastruktur pengujian Mobly untuk memungkinkan kontrol dan pencatatan log pengujian yang lebih baik. Mobly adalah framework pengujian berbasis Python yang mendukung kasus pengujian yang memerlukan beberapa perangkat dengan penyiapan hardware kustom. Untuk mengetahui informasi selengkapnya tentang Mobly, lihat google/mobly.
file config.yml
Dengan framework Mobly, Anda dapat menyiapkan perangkat yang sedang diuji (DUT) dan tablet
grafik di class its_base_test
. File config.yml
(YAML) digunakan untuk
membuat testbed Mobly. Beberapa platform pengujian dapat dikonfigurasi dalam file
konfigurasi ini, misalnya, platform pengujian tablet dan sensor fusion. Dalam bagian pengontrol setiap platform pengujian, Anda dapat menentukan device_ids
untuk mengidentifikasi perangkat Android yang sesuai dengan pelaksana pengujian. Selain ID perangkat, parameter lain seperti brightness
, chart_distance
,
debug_mode
, camera_id
, dan scene_id
tablet diteruskan dalam class pengujian. Nilai parameter pengujian 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 di nama testbed. Selama inisialisasi, runner pengujian Mobly menginisialisasi TestParams
dan meneruskannya ke setiap pengujian.
Berikut adalah contoh file config.yml
untuk proses 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 command line, pengujian akan dijalankan dengan nilai file config.yml
.
Selain itu, Anda dapat mengganti nilai file konfigurasi camera
dan scene
di
command line menggunakan perintah yang mirip dengan Android 11
atau yang lebih rendah.
Contoh:
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 penggabungan sensor
Untuk pengujian penggabungan 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 penggabungan sensor.
Berikut adalah contoh file config.yml
untuk menjalankan sensor fusion.
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 pengujian penggabungan sensor dengan alat pengujian penggabungan sensor, gunakan:
python tools/run_all_tests.py scenes=sensor_fusion
python tools/run_all_tests.py scenes=sensor_fusion camera=0
Beberapa platform pengujian
Beberapa platform pengujian dapat disertakan dalam file konfigurasi. Kombinasi yang paling umum adalah memiliki platform pengujian tablet dan platform pengujian penggabungan sensor.
Berikut adalah contoh file config.yml
dengan platform pengujian tablet dan 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
Pengujian manual
Pengujian manual terus didukung di Android 12.
Namun, testbed harus mengidentifikasi pengujian sebagai pengujian dengan kata kunci MANUAL
dalam nama testbed. Selain itu, testbed tidak boleh menyertakan ID tablet.
Berikut 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
Menguji adegan tanpa tablet
Pengujian untuk 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 penyiapan class pengujian
menetapkan nilai ID serial untuk tablet.
Menjalankan pengujian individual
Pengujian individual hanya dapat dijalankan untuk tujuan debug karena hasilnya tidak dilaporkan ke CTS Verifier. Karena file
config.yml
tidak dapat ditimpa di command line untuk camera
dan
scene
, parameter ini harus benar dalam file config.yml
untuk
masing-masing pengujian yang dimaksud. Selain itu, jika ada lebih dari satu testbed dalam
file konfigurasi, Anda harus
menentukan testbed dengan tanda --test_bed
. Contoh:
python tests/scene1_1/test_black_white.py --config config.yml --test_bed TEST_BED_TABLET_SCENES
Artefak pengujian
Di Android 12, artefak pengujian untuk ITS Kamera disimpan dengan cara yang sama seperti Android 11 atau yang lebih rendah, tetapi dengan perubahan berikut:
- Direktori artefak pengujian
/tmp
memilikiCameraITS_
yang ditambahkan ke string acak 8 karakter untuk kejelasan. - Output dan error pengujian disimpan di
test_log.DEBUG
untuk setiap pengujian, bukan ditest_name_stdout.txt
dantest_name_stderr.txt
. - Logcat DUT dan tablet dari setiap pengujian individual disimpan di direktori
/tmp/CameraITS_########
, sehingga menyederhanakan proses penelusuran kesalahan karena semua informasi yang diperlukan untuk menelusuri kesalahan masalah 3A dicatat.
Menguji perubahan
Di Android 12, adegan tablet adalah file PNG, bukan file PDF. Penggunaan file PNG memungkinkan lebih banyak model tablet menampilkan adegan dengan benar.
scene0/test_jitter.py
Pengujian test_jitter
berjalan di kamera tersembunyi fisik di Android 12.
scene1_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 pengujian | Level API pertama | Pernyataan |
---|---|---|
scene1_1/test_black_white.py | SEMUA | Nilai RGB eksposur pendek, gain rendah ~[0, 0, 0] Nilai RGB eksposur panjang, gain tinggi ~[255, 255, 255] |
scene1_1/test_channel_saturation.py | 29 | Mengurangi toleransi pada perbedaan [255, 255, 255] untuk menghilangkan warna semu pada gambar putih. |
Tabel berikut menjelaskan pengujian gabungan, scene1_1/test_black_white.py, di Android 12.
Nama pengujian | Level API pertama | Pernyataan |
---|---|---|
scene1_1/test_black_white.py | SEMUA | Eksposur pendek, nilai RGB dengan gain rendah ~[0, 0, 0] Eksposur panjang, nilai RGB dengan gain tinggi ~[255, 255, 255] dan toleransi yang lebih kecil antar-nilai untuk menghilangkan warna semu pada gambar putih. |
scene1_1/test_burst_sameness_manual.py
Pengujian test_burst_sameness_manual
berjalan di kamera tersembunyi fisik di Android 12.
scene1_2/test_tonemap_sequence.py
Pengujian test_tonemap_sequence
berjalan di kamera TERBATAS di Android 12.
scene1_2/test_yuv_plus_raw.py
Pengujian test_yuv_plus_raw
berjalan di kamera tersembunyi fisik di Android 12.
scene2_a/test_format_combos.py
Pengujian test_format_combos
berjalan di kamera TERBATAS di Android 12.
scene3/test_flip_mirror.py
Pengujian test_flip_mirror
berjalan di kamera TERBATAS di Android 12.
scene4/test_aspect_ratio_and_crop.py
Menemukan lingkaran di scene4/test_aspect_ratio_and_crop.py
telah di-refactor di
Android 12.
Versi Android sebelumnya menggunakan metode yang melibatkan penemuan kontur turunan (lingkaran) di dalam kontur induk (persegi) dengan filter untuk ukuran dan warna. Android 12 menggunakan metode yang melibatkan penemuan semua kontur, lalu memfilter dengan menemukan fitur yang paling melingkar. Untuk menyaring lingkaran palsu di layar, diperlukan area kontur minimum, dan kontur lingkaran harus berwarna hitam.
Kontur dan kriteria pemilihannya ditampilkan dalam gambar berikut.
Gambar 1. Gambar konseptual kontur dan kriteria pemilihan
Metode Android 12 lebih sederhana dan berfungsi untuk mengatasi masalah pemangkasan kotak pembatas di beberapa tablet layar. Semua kandidat lingkaran dicatat untuk tujuan proses debug.
Di Android 12, pengujian pangkas dijalankan untuk perangkat FULL
dan LEVEL3
. Android 11 atau versi yang lebih rendah melewati pernyataan pengujian pemangkasan untuk perangkat FULL
.
Tabel berikut mencantumkan pernyataan untuk
test_aspect_ratio_and_crop.py
yang sesuai dengan level perangkat dan
level API pertama tertentu.
Tingkat perangkat | Level 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 | Pangkas Rasio aspek FoV untuk format 4:3, 16:9, 2:1 |
LEVEL3 | SEMUA | Pangkas Rasio aspek FoV untuk format 4:3, 16:9, 2:1 |
scene4/test_multi_camera_alignment.py
Metode undo_zoom()
untuk pengambilan YUV di
scene4/test_multi_camera_alignment.py
telah di-refactor untuk memperhitungkan pemangkasan secara lebih
akurat pada sensor yang tidak sesuai dengan rasio aspek pengambilan.
Kode Python 2 Android 11
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 Python 3 Android 12
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 penggabungan sensor.
Pada versi di bawah Android 12, seluruh gambar digunakan untuk menemukan 240 fitur terbaik yang kemudian ditutupi hingga 20% bagian tengah untuk menghindari efek rolling shutter dengan persyaratan fitur minimum adalah 30 fitur.
Jika fitur yang ditemukan oleh metode ini tidak memadai, Android 12 akan menutupi area deteksi fitur ke 20% tengah 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 nilai minimum persyaratan fitur akan menyebabkan deteksi fitur berkualitas buruk dan berdampak negatif pada pengukuran.
Gambar 2. Perbedaan dalam deteksi fitur antara Android 11 dan Android 12
Pengujian baru
scene0/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.
Scene | Nama pengujian | Level API pertama | Deskripsi |
---|---|---|---|
0 | test_solid_color_test_pattern | 31 | Mengonfirmasi output gambar warna solid dan kemampuan pemrograman warna gambar. |
Pola pengujian warna solid harus diaktifkan untuk mendukung mode privasi kamera.
Uji test_solid_color_test_pattern
mengonfirmasi output gambar YUV warna solid
dengan warna yang ditentukan oleh pola yang dipilih, dan perubahan warna gambar
sesuai dengan spesifikasi.
Parameter
cameraPrivacyModeSupport
: Menentukan apakah kamera mendukung mode privasi.android.sensor.testPatternMode
: Menetapkan mode pola pengujian. Pengujian ini menggunakanSOLID_COLOR
.android.sensor.testPatternData
: Menetapkan nilai pola pengujian R, Gr, Gb, G untuk mode pola pengujian.
Untuk deskripsi pola uji warna solid, lihat
SENSOR_TEST_PATTERN_MODE_SOLID_COLOR
.
Metode
Frame YUV diambil untuk parameter yang ditetapkan dan konten gambar divalidasi. Pola uji ditampilkan langsung dari sensor gambar, sehingga tidak diperlukan adegan tertentu. Jika PER_FRAME_CONTROL
didukung, satu frame YUV akan direkam untuk setiap setelan yang diuji. Jika
PER_FRAME_CONTROL
tidak didukung, empat frame diambil dengan hanya
frame terakhir yang dianalisis untuk memaksimalkan cakupan pengujian di kamera LIMITED
.
Pengambilan YUV ditetapkan ke pola pengujian BLACK
, WHITE
, RED
, GREEN
, dan
BLUE
yang sepenuhnya jenuh. Karena definisi pola pengujian adalah per pola Bayer sensor, saluran warna harus ditetapkan untuk setiap warna seperti yang ditunjukkan dalam tabel berikut.
Warna | testPatternData (RGGB) |
---|---|
HITAM |
(0, 0, 0, 0)
|
PUTIH |
(1, 1, 1, 1)
|
RED |
(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 Level API pertama |
Jenis kamera | Warna yang diklaim |
---|---|---|
31 | Bayer | HITAM, PUTIH, MERAH, HIJAU, BIRU |
31 | MONO | HITAM, PUTIH |
< 31 | Bayer/MONO | HITAM |
Pengujian class performa
scene2_c/test_camera_launch_perf_class.py
Memverifikasi bahwa waktu mulai kamera kurang dari 500 md untuk kamera utama depan dan belakang dengan adegan wajah scene2_c.
scene2_c/test_jpeg_capture_perf_class.py
Memverifikasi latensi pengambilan gambar JPEG 1080p kurang dari 1 detik untuk kamera depan dan belakang utama dengan adegan wajah scene2_c.