Catatan rilis Camera Image Test Suite Android 12

Sejumlah perubahan Camera ITS disertakan dalam rilis Android 12. Halaman ini merangkum perubahan yang termasuk dalam empat kategori besar:

Memfaktorkan ulang ke Python 3

Karena penghentian Python 2.7 pada Januari 2020, seluruh codebase Camera ITS difaktorkan ulang ke Python 3. Versi dan library Python berikut diperlukan di Android 12:

Peluncur pengujian utama, tools/run_all_tests.py, tetap sama dengan versi Android 11 atau yang lebih lama dan difaktorkan ulang ke Python 3.

Semua pengujian individual difaktorkan ulang dan menggunakan class penyiapan pengujian baru yang ditentukan di tests/its_base_test.py. Sebagian besar nama dan fungsi pengujian tetap sama. Di Android 12, semua pengujian individual kini memuat layarnya. Meskipun pemuatan scene untuk setiap pengujian meningkatkan waktu pengujian secara keseluruhan, hal ini memungkinkan proses debug setiap pengujian.

Untuk informasi selengkapnya tentang setiap perubahan pengujian, lihat Menguji perubahan.

Modul Python berikut difaktorkan ulang dengan perubahan nama:

  • pymodules/its/caps.pyutils/camera_properties_utils.py
  • pymodules/its/cv2image.pyutils/opencv_processing_utils.py
  • pymodules/its/device.pyutils/its_session_utils.py
  • pymodules/its/error.pyutils/error_util.py
  • pymodules/its/image.pyutils/image_processing_utils.py
  • pymodules/its/objects.pyutils/capture_request_utils.py
  • pymodules/its/target.pyutils/target_exposure_utils.py
  • tools/hw.pyutils/sensor_fusion_utils.py

Adopsi 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.

Camera ITS menggunakan infrastruktur pengujian Mobly untuk memungkinkan kontrol dan logging pengujian yang lebih baik. Mobly adalah framework pengujian berbasis Python yang mendukung kasus pengujian yang memerlukan beberapa perangkat dengan penyiapan hardware kustom. Untuk informasi selengkapnya tentang Mobly, lihat google/mobly.

File config.yml

Dengan framework Mobly, Anda dapat menyiapkan perangkat yang sedang diuji (DUT) dan tablet diagram di class its_base_test. File config.yml (YAML) digunakan untuk membuat testbed Mobly. Beberapa testbed dapat dikonfigurasi dalam file konfigurasi ini, misalnya, tablet dan testbed penggabungan sensor. Dalam setiap bagian pengontrol testbed, Anda dapat menentukan device_ids untuk mengidentifikasi perangkat Android yang sesuai ke runner pengujian. Selain ID perangkat, parameter lain seperti tablet brightness, chart_distance, debug_mode, camera_id, dan scene_id diteruskan di class pengujian. Parameter value 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 dalam nama testbed. Selama inisialisasi, runner pengujian Mobly melakukan inisialisasi TestParams dan meneruskannya ke setiap pengujian.

Berikut adalah contoh file config.yml untuk operasi 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 berjalan 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 lama.

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. Platform pengujian yang benar ditentukan oleh adegan yang diuji. Android 12 mendukung pengontrol untuk penggabungan sensor Arduino dan Canakit.

Berikut adalah contoh file config.yml untuk pengoperasian penggabungan 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 pengujian penggabungan sensor dengan rig 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 testbed

Beberapa testbed dapat disertakan dalam file konfigurasi. Kombinasi yang paling umum adalah memiliki testbed tablet dan testbed penggabungan sensor.

Berikut adalah contoh file config.yml dengan pengujian fusi tablet dan sensor 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

Pengujian manual terus didukung di Android 12. Namun, testbed harus mengidentifikasi pengujian tersebut dengan kata kunci MANUAL dalam nama testbed. Selain itu, testbed tidak dapat menyertakan ID tablet.

Berikut 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 scene tanpa tablet

Pengujian untuk scene 0 dan scene 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 seri tablet harus valid meskipun tablet tidak digunakan karena penyiapan class pengujian menetapkan nilai ID seri untuk tablet.

Menjalankan pengujian individual

Setiap pengujian 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 setiap pengujian yang dimaksud. Selain itu, jika ada lebih dari satu testbed dalam file konfigurasi, Anda harus menentukan testbed dengan flag --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 mirip dengan Android 11 atau yang lebih lama, tetapi dengan perubahan berikut:

  • Direktori /tmp artefak pengujian memiliki CameraITS_ yang ditambahkan ke string acak 8 karakter agar lebih jelas.
  • Output dan error pengujian disimpan di test_log.DEBUG untuk setiap pengujian, bukan test_name_stdout.txt dan test_name_stderr.txt.
  • Logcat DUT dan tablet dari setiap pengujian disimpan di direktori /tmp/CameraITS_######## yang menyederhanakan proses debug karena semua informasi yang diperlukan untuk men-debug masalah 3A dicatat ke dalam log.

Menguji perubahan

Di Android 12, scene tablet adalah file PNG, bukan file PDF. Penggunaan file PNG memungkinkan lebih banyak model tablet menampilkan scene dengan benar.

scene0/test_jitter.py

Pengujian test_jitter berjalan di kamera tersembunyi fisik di Android 12.

halaman1_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 API level pertama Pernyataan
scene1_1/test_black_white.py SEMUA Eksposur pendek, nilai RGB penguatan rendah ~[0, 0, 0]
Eksposur panjang, nilai RGB penguatan tinggi ~[255, 255, 255]
scene1_1/test_channel_saturation.py 29 Mengurangi toleransi pada perbedaan [255, 255, 255] untuk menghilangkan tint warna pada gambar putih.

Tabel berikut menjelaskan pengujian gabungan, scene1_1/test_black_white.py, di Android 12.

Nama pengujian API level pertama Pernyataan
scene1_1/test_black_white.py SEMUA Eksposur singkat, nilai RGB dengan gain rendah ~[0, 0, 0]
Eksposur panjang, nilai RGB dengan gain tinggi ~[255, 255, 255] dan toleransi yang dikurangi di antara nilai untuk menghilangkan tint warna 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.

halaman1_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 difaktorkan ulang 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 pencarian semua kontur, lalu memfilter dengan menemukan fitur yang paling melingkar. Untuk menyaring lingkaran palsu di layar, ada area kontur minimum yang diperlukan, dan kontur lingkaran harus berwarna hitam.

Kontur dan kriteria pemilihannya ditampilkan dalam gambar berikut.

Gambar konseptual kontur dan kriteria pemilihan

Gambar 1. Gambar konseptual kontur dan kriteria pemilihan

Metode Android 12 lebih sederhana dan berfungsi untuk menyelesaikan masalah dengan pemangkasan kotak pembatas di beberapa tablet layar. Semua kandidat lingkaran dicatat ke dalam log untuk tujuan proses debug.

Di Android 12, pengujian pemangkasan 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 tertentu dan level API pertama.

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
TINGKAT 3 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 difaktorkan ulang untuk memperhitungkan pemangkasan pada sensor yang tidak cocok dengan rasio aspek pengambilan secara lebih akurat.

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 yang lebih rendah dari Android 12, seluruh gambar digunakan untuk menemukan 240 fitur terbaik yang kemudian disamarkan ke tengah 20% untuk menghindari efek rolling shutter dengan persyaratan fitur minimum adalah 30 fitur.

Jika fitur yang ditemukan oleh metode ini tidak memadai, Android 12 akan menyamarkan area deteksi fitur ke tengah 20% terlebih dahulu, dan membatasi fitur maksimum menjadi dua kali persyaratan fitur minimum.

Gambar berikut menunjukkan perbedaan antara deteksi fitur Android 11 dan Android 12. Menaikkan batas persyaratan fitur minimum akan mendeteksi fitur berkualitas buruk dan berdampak negatif pada pengukuran.

perbedaan dalam deteksi fitur antara Android 11
dan deteksi fitur sensor_fusion
Android 12

Gambar 2. Perbedaan 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. Pengujian 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 menggunakan SOLID_COLOR.
  • android.sensor.testPatternData: Menetapkan nilai pola pengujian R, Gr, Gb, G untuk mode pola pengujian.

Untuk deskripsi pola pengujian warna solid, lihat SENSOR_TEST_PATTERN_MODE_SOLID_COLOR.

Metode

Frame YUV diambil untuk parameter yang ditetapkan dan konten gambar divalidasi. Pola pengujian dihasilkan langsung dari sensor gambar, sehingga tidak diperlukan scene tertentu. Jika PER_FRAME_CONTROL didukung, satu frame YUV akan diambil untuk setiap setelan yang diuji. Jika PER_FRAME_CONTROL tidak didukung, empat frame akan diambil dengan hanya frame terakhir yang dianalisis untuk memaksimalkan cakupan pengujian di kamera LIMITED.

Tangkapan YUV ditetapkan ke pola pengujian BLACK, WHITE, RED, GREEN, dan BLUE yang sepenuhnya tersaturasi. Karena definisi pola pengujian sesuai dengan 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
API level pertama
Jenis kamera Warna yang dinyatakan
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 startup kamera kurang dari 500 milidetik untuk kamera utama depan dan belakang dengan scene wajah scene2_c.

scene2_c/test_jpeg_capture_perf_class.py

Memverifikasi latensi pengambilan JPEG 1080p kurang dari 1 detik untuk kamera utama depan dan belakang dengan scene wajah scene2_c.