Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Catatan Rilis Paket Uji Gambar Kamera 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 basis kode Camera ITS difaktorkan ulang ke Python 3. Versi dan pustaka Python berikut diperlukan di Android 12:

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

Semua tes individu difaktorkan ulang dan menggunakan kelas pengaturan tes baru yang ditentukan dalam tests/its_base_test.py . Sebagian besar nama dan fungsi pengujian tetap sama. Di Android 12, semua pengujian individual sekarang memuat adegan mereka. Sementara pemuatan adegan untuk setiap pengujian meningkatkan waktu pengujian secara keseluruhan, ini memungkinkan debugging pengujian individu.

Untuk informasi selengkapnya tentang perubahan pengujian individual, lihat Perubahan pengujian .

Modul Python berikut di-refactored 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 kerangka uji seluler

Mobly adalah kerangka pengujian berbasis Python yang mendukung kasus pengujian yang memerlukan banyak perangkat dengan pengaturan perangkat keras khusus. Camera ITS menggunakan infrastruktur pengujian Mobly untuk memungkinkan kontrol dan pencatatan pengujian yang lebih baik.

Camera 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 Mobile, lihat google/mobly .

file config.yml

Dengan kerangka Mobly, Anda dapat menyiapkan perangkat yang sedang diuji (DUT) dan tablet bagan 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 dengan runner pengujian. 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 testbed. Selama inisialisasi, pelari pengujian Mobly menginisialisasi TestParams dan meneruskannya ke pengujian individu.

Berikut ini 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 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.

Sebagai 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 fusi sensor

Untuk pengujian sensor fusion , 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 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 tes 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 testbeds

Beberapa testbeds dapat dimasukkan dalam file konfigurasi. Kombinasi yang paling umum adalah memiliki testbed tablet dan testbed sensor fusion.

Berikut ini adalah contoh file config.yml dengan tablet dan sensor fusion testbeds.

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 seperti itu 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

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 seri tablet harus valid meskipun tablet tidak digunakan karena pengaturan kelas pengujian menetapkan nilai ID seri untuk tablet.

Menjalankan tes individu

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 dalam file config.yml untuk pengujian individual yang bersangkutan. Selain itu, jika ada lebih dari satu testbed dalam file konfigurasi, Anda harus menentukan testbed dengan flag --test_bed . Sebagai contoh:

python tests/scene1_1/test_black_white.py --config config.yml --test_bed TEST_BED_TABLET_SCENES

Artefak uji

Di Android 12, artefak pengujian untuk Camera ITS disimpan mirip dengan Android 11 atau lebih rendah tetapi dengan perubahan berikut:

  • Direktori artefak pengujian /tmp memiliki CameraITS_ yang ditambahkan ke string acak 8 karakter untuk kejelasan.
  • Hasil pengujian dan kesalahan 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 individu disimpan dalam /tmp/CameraITS_######## menyederhanakan debugging karena semua informasi yang diperlukan untuk men-debug masalah 3A dicatat.

Uji perubahan

Di Android 12 adegan tablet adalah file PNG daripada file PDF. Penggunaan file PNG memungkinkan lebih banyak model tablet untuk menampilkan adegan dengan benar.

scene0/test_jitter.py

Tes test_jitter berjalan pada 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 tes Tingkat API pertama Pernyataan
scene1_1/test_black_white.py SEMUA Eksposur pendek, nilai RGB gain rendah ~[0, 0, 0]
Eksposur lama, nilai RGB gain tinggi ~[255, 255, 255]
scene1_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
scene1_1/test_black_white.py SEMUA Eksposur pendek, nilai RGB gain rendah ~[0, 0, 0]
Eksposur lama, nilai RGB gain tinggi ~[255, 255, 255] dan toleransi yang berkurang antar nilai untuk menghilangkan rona warna pada gambar putih.

scene1_1/test_burst_sameness_manual.py

Tes test_burst_sameness_manual berjalan pada kamera tersembunyi fisik di Android 12.

scene1_2/test_tonemap_sequence.py

Tes test_tonemap_sequence berjalan pada kamera TERBATAS di Android 12.

scene1_2/test_yuv_plus_raw.py

Tes test_yuv_plus_raw berjalan pada kamera tersembunyi fisik di Android 12.

scene2_a/test_format_combos.py

Pengujian test_format_combos berjalan pada LIMITED kamera di Android 12.

scene3/test_flip_mirror.py

Tes test_flip_mirror berjalan pada 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 pencarian kontur anak (lingkaran) di dalam kontur induk (persegi) dengan filter untuk ukuran dan warna. Android 12 menggunakan metode yang melibatkan pencarian semua kontur dan kemudian memfilter dengan menemukan fitur yang paling melingkar . Untuk menyaring lingkaran palsu di layar, ada area kontur minimum yang diperlukan, dan kontur lingkaran harus hitam.

Kontur dan kriteria pemilihannya ditunjukkan pada gambar berikut.

Gambar konseptual kontur dan kriteria seleksi

Gambar 1. Gambar konseptual kontur dan kriteria seleksi

Metode Android 12 lebih sederhana dan berfungsi untuk menyelesaikan masalah dengan kliping kotak pembatas di beberapa tablet layar. Semua kandidat lingkaran dicatat untuk tujuan debugging.

Di Android 12, uji pangkas dijalankan untuk perangkat FULL dan LEVEL3 . Android 11 atau versi yang lebih rendah melewati pernyataan uji pangkas 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 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

scene4/test_multi_camera_alignment.py

Metode undo_zoom() untuk tangkapan YUV di scene4/test_multi_camera_alignment.py telah difaktorkan ulang untuk memperhitungkan lebih akurat untuk pemotongan pada sensor yang tidak cocok dengan rasio aspek tangkapan.

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 uji fusi sensor.

Dalam versi yang lebih rendah dari Android 12, seluruh gambar digunakan untuk menemukan 240 fitur terbaik yang kemudian ditutup ke tengah 20% untuk menghindari efek rana bergulir dengan persyaratan fitur minimum adalah 30 fitur.

Jika fitur yang ditemukan dengan metode ini tidak mencukupi, Android 12 menutupi area deteksi fitur ke tengah 20% terlebih dahulu, dan membatasi fitur maksimum hingga dua kali lipat dari persyaratan fitur minimum.

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

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

Gambar 2. Perbedaan deteksi fitur antara Android 11 dan Android 12

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

Tempat kejadian Nama tes Tingkat API pertama Keterangan
0 test_solid_color_test_pattern 31 Mengonfirmasi keluaran gambar berwarna solid dan kemampuan program warna gambar.

Pola uji warna solid harus diaktifkan untuk mendukung mode privasi kamera. Tes test_solid_color_test_pattern mengkonfirmasi keluaran gambar YUV warna 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 menggunakan SOLID_COLOR .
  • android.sensor.testPatternData : Menyetel 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

Bingkai YUV diambil untuk parameter yang ditetapkan dan konten gambar divalidasi. Pola pengujian dikeluarkan langsung dari sensor gambar, jadi tidak diperlukan adegan tertentu. Jika PER_FRAME_CONTROL didukung, satu bingkai YUV diambil untuk setiap setelan yang diuji. Jika PER_FRAME_CONTROL tidak didukung, empat bingkai diambil dengan hanya bingkai terakhir yang dianalisis untuk memaksimalkan cakupan pengujian di kamera LIMITED .

Tangkapan YUV diatur ke pola uji BLACK , WHITE , RED , GREEN , dan BLUE yang sepenuhnya jenuh. Karena definisi pola pengujian sesuai dengan pola Bayer sensor, saluran warna harus diatur untuk setiap warna seperti yang ditunjukkan pada tabel berikut.

Warna testPatternData (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

scene2_c/test_camera_launch_perf_class.py

Memverifikasi startup kamera kurang dari 500 ms untuk kamera utama depan dan belakang dengan scene2_c face scene.

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