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

Tes kamera ITS

Halaman ini menyediakan daftar lengkap pengujian di bawah Camera Image Test Suite (ITS), yang merupakan bagian dari Android Compatibility Test Suite (CTS) Verifier. Tes ITS adalah tes fungsional, artinya tidak mengukur kualitas gambar, tetapi semua fungsi kamera yang diiklankan berfungsi seperti yang diharapkan. Dokumen ini memungkinkan pengembang dan penguji memahami apa yang dilakukan masing-masing pengujian dan cara men-debug kegagalan pengujian.

Tes dikelompokkan berdasarkan adegan sebagai berikut:

  • scene0 : Tangkap metadata, jitter, giroskop, getaran
  • scene1 : Eksposur, sensitivitas, kompensasi EV, YUV vs JPEG/RAW
  • scene2 : Deteksi wajah, tes yang membutuhkan scene berwarna atau kegelapan total
  • scene3 : Peningkatan tepi, gerakan lensa
  • scene4 : Rasio aspek, pemangkasan, bidang pandang
  • scene5 : Bayangan lensa
  • adegan6 : Zoom
  • sensor_fusion : Offset pengaturan waktu kamera/giroskop

Lihat bagian individu untuk deskripsi setiap adegan.

adegan0

Tes Scene0 tidak memerlukan informasi adegan tertentu. Namun, ponsel harus diam untuk pengujian giroskop dan getaran.

test_burst_capture

Memverifikasi bahwa seluruh saluran pengambilan dapat mengikuti kecepatan pengambilan ukuran penuh dan waktu CPU.

API diuji:

Pass: Menangkap rentetan gambar ukuran penuh dan kamera cukup cepat untuk menghindari waktu habis.

test_capture_result_dump

Tes bahwa hasil tangkapan dikembalikan dari tangkapan manual dan kemudian membuangnya.

API diuji:

Lulus: Menyelesaikan tangkapan dan membuang hasil tangkapan.

test_gyro_bias

Menguji apakah gyro memiliki output yang stabil saat perangkat tidak bergerak. Data diplot sebagai rata-rata 20 titik data.

API diuji:

Pass: Delta pembacaan gyro kurang dari 0,01 dari waktu ke waktu.

test_gyro_bias_plot.png

test_gyro_bias_plot.png

test_jitter

Mengukur jitter dalam stempel waktu kamera.

API diuji:

Lulus: Setidaknya ada delta 30 ms di antara bingkai.

test_jitter_plot.png

test_jitter_plot.png (Perhatikan rentang sumbu y kecil. Jitter sebenarnya kecil di plot ini.)

test_metadata

Menguji validitas entri metadata. Lihat hasil tangkapan dan karakteristik objek kamera. Tes ini menggunakan eksposur auto_capture_request dan mendapatkan nilai karena konten gambar tidak penting.

API diuji:

Lulus: Level perangkat keras, rollingShutterSkew , tag frameDuration , timestampSource , croppingType , blackLevelPattern , pixel_pitch , FOV, hyperfocal distance ada dan memiliki nilai yang valid.

test_param_sensitivity_burst

Menguji apakah parameter android.sensor.sensitivity diterapkan dengan benar dalam burst. Hanya memeriksa metadata keluaran.

API diuji:

Lulus: Data keluaran memiliki toleransi kesalahan kurang dari 0,2%.

test_read_write

Menguji apakah perangkat menulis eksposur yang benar dan mendapatkan nilai dengan membaca kembali metadata tangkapan.

API diuji:

Pass: Nilai baca dan tulis cocok di semua bidikan.

test_sensor_events

Menguji kueri perangkat dan mencetak peristiwa sensor untuk perangkat yang mengiklankan dukungan fusi sensor. Sensor yang diharapkan adalah akselerometer, giroskop, dan magnetometer. Tes ini hanya berfungsi jika layar menyala, artinya perangkat tidak dalam mode siaga.

API diuji:

Lulus: Acara untuk setiap sensor diterima.

test_solid_color_test_pattern

Tes bahwa pola tes warna solid dihasilkan dengan benar untuk mematikan kamera. Jika pembisuan kamera didukung, pola pengujian warna solid harus didukung. Jika pembisuan kamera tidak didukung, pola uji warna solid hanya diuji jika kemampuannya diiklankan.

Jika gambar RAW didukung, penentuan warna juga akan diuji. Warna yang diuji adalah hitam, putih, merah, biru, dan hijau. Untuk kamera yang tidak mendukung gambar RAW, hanya warna hitam yang diuji.

API diuji:

Lulus: Pola uji padat yang didukung adalah warna yang benar dan variasi gambar yang rendah.

test_test_pattern

Menguji parameter android.sensor.testPatternMode untuk menangkap frame untuk setiap pola pengujian yang valid dan memeriksa apakah frame dibuat dengan benar untuk warna solid dan bilah warna. Tes ini mencakup langkah-langkah berikut:

  1. Menangkap gambar untuk semua pola pengujian yang didukung.
  2. Melakukan pemeriksaan kebenaran sederhana untuk pola uji warna padat dan bilah warna.

API diuji:

Lulus: Pola pengujian yang didukung dihasilkan dengan benar.

test_test_patterns_2

test_test_patterns_2.jpg

test_tonemap_curve

Tes konversi pola tes dari RAW ke YUV dengan linear tonemap. Pengujian ini memerlukan android.sensor.testPatternMode = 2 (COLOR_BARS) untuk menghasilkan pola gambar yang sempurna untuk konversi peta warna. Memastikan pipeline memiliki output warna yang tepat dengan linear tonemap dan input gambar yang ideal (bergantung pada test_test_patterns ).

API diuji:

Pass: YUV dan RAW terlihat mirip satu sama lain.

test_tonemap_curve_raw_2

test_tonemap_curve_raw_2.jpg

test_tonemap_curve_yuv_2.jpg

test_tonemap_curve_yuv_2.jpg

test_unified_timestamp

Menguji apakah peristiwa sensor gambar dan gerak berada dalam domain waktu yang sama.

API diuji:

Pass: Stempel waktu gerakan berada di antara dua stempel waktu gambar.

test_vibration_restriction

Menguji apakah getaran perangkat berfungsi seperti yang diharapkan.

API diuji:

Lulus: Perangkat tidak bergetar saat dibisukan oleh API pembatasan audio kamera.

adegan1

scene1 adalah bagan abu-abu. Bagan abu-abu harus menutupi bagian tengah 30% bidang pandang kamera. Bagan abu-abu diharapkan menantang 3A (paparan otomatis, keseimbangan putih otomatis, fokus otomatis) secara moderat karena wilayah tengah tidak memiliki fitur. Namun, permintaan pengambilan menentukan seluruh adegan yang menyertakan fitur yang memadai untuk 3A agar menyatu.

Kamera RFoV dapat diuji di WFoV atau rig uji RFoV. Jika kamera RFoV diuji di rig uji WFoV, bagan diskalakan dengan ⅔ untuk memastikan beberapa batasan bagi bagan abu-abu di FoV untuk membantu konvergensi 3A.

adegan1

scene1: Bagan ukuran penuh (kiri). ⅔ bagan berskala (kanan).

tes_3a

Menguji konvergensi 3A dengan target yang cukup menantang.

API diuji:

Lulus: 3A konvergen dan nilai 3A yang dikembalikan valid.

test_ae_af

Menguji algoritme eksposur otomatis (AE) dan fokus otomatis (AF) 3A satu per satu.

API diuji:

Lulus: 3A konvergen dan nilai 3A yang dikembalikan adalah legal.

test_ae_precapture_trigger

Menguji mesin status AE saat menggunakan pemicu pratangkap. Menangkap lima permintaan manual dengan AE dinonaktifkan. Permintaan terakhir memiliki pemicu pratangkap AE, yang harus diabaikan karena AE dinonaktifkan.

API diuji:

Lulus: AE konvergen.

test_auto_vs_manual

Pengujian yang menangkap bidikan otomatis dan manual terlihat sama.

API diuji:

Lulus: Penguatan dan transformasi white balance manual yang dilaporkan di setiap hasil tangkapan cocok dengan estimate white balance otomatis dari algoritme 3A kamera.

test_auto_vs_manual_auto

test_auto_vs_manual_auto.jpg

test_auto_vs_manual_wb

test_auto_vs_manual_wb.jpg

test_auto_vs_manual_manual_wb_tm

test_auto_vs_manual_manual_wb_tm.jpg

tes_hitam_putih

Menguji apakah perangkat menghasilkan gambar hitam putih penuh. Mengambil dua jepretan, yang pertama dengan gain sangat rendah dan eksposur pendek, yang menghasilkan foto hitam, dan yang kedua dengan gain sangat tinggi dan eksposur panjang, yang menghasilkan foto putih.

API diuji:

Pass: Menghasilkan gambar hitam putih. Saluran jenuh gambar putih memiliki nilai RGB [255, 255, 255] dengan margin kesalahan perbedaan kurang dari 1%.

tes_hitam_putih_hitamtes_hitam_putih_hitam
test_black_white_black.jpg test_black_white_white.jpg

test_black_white_plot_means

test_black_white_plot_means.png

test_burst_sameness_manual

Mengambil 5 semburan dari 50 gambar dengan pengaturan pengambilan manual dan memeriksa apakah semuanya identik. Tes ini dapat digunakan untuk mengidentifikasi apakah ada frame sporadis yang diproses secara berbeda atau memiliki artefak.

API diuji:

Lulus: Gambar identik secara visual dan dalam nilai RGB.

Gagal: Menampilkan lonjakan atau penurunan grafik rata-rata RGB di awal setiap rentetan

  • Toleransi adalah 3% untuk first_API_level < 30
  • Toleransi adalah 2% untuk first_API_level >= 30

test_burst_sameness_manual_mean

test_burst_sameness_manual_mean.jpg

test_burst_sameness_manual_plot_means

test_burst_sameness_manual_plot_means.png

test_capture_result

Menguji apakah data yang valid kembali ke objek CaptureResult . Melakukan pengambilan otomatis, manual, dan otomatis.

API diuji:

Lulus: Metadata valid untuk semua tangkapan dan pengaturan manual tidak bocor ke tangkapan otomatis kedua. Merencanakan koreksi naungan lensa untuk tangkapan.

test_capture_result_plot_lsc_auto_ch0

test_capture_result_plot_lsc_auto_ch0.png

test_crop_region_raw

Menguji bahwa aliran RAW tidak dapat dipangkas.

API diuji:

Lulus: Gambar YUV dipangkas di tengah tetapi bukan gambar RAW.

test_crop_region_raw_comp_raw_crop

test_crop_region_raw_comp_raw_crop.jpg

test_crop_region_raw_comp_raw_full

test_crop_region_raw_comp_raw_full.jpg

test_crop_region_raw_comp_yuv_crop

test_crop_region_raw_comp_yuv_crop.jpg

test_crop_region_raw_yuv_full

test_crop_region_raw_yuv_full.jpg

test_crop_regions

Menguji apakah daerah pemotongan berfungsi. Mengambil gambar penuh dan membuat tambalan dari 5 wilayah berbeda (sudut dan tengah.) Mengambil gambar dengan set pemotongan untuk 5 wilayah. Membandingkan patch dan nilai crop image.

API diuji:

Pass: Gambar wilayah yang dipangkas cocok dengan tambalan yang sesuai dengan gambar yang dipangkas.

test_dng_noise_model

Memverifikasi bahwa parameter model mentah DNG sudah benar. Plot tersebut menggambarkan varians terukur dari petak tengah kartu abu-abu dalam bidikan mentah yang ditangkap pada rentang sensitivitas, dan membandingkan nilai ini dengan varians yang diharapkan pada setiap sensitivitas oleh model derau DNG di kamera HAL (berdasarkan Parameter O,S dikembalikan dalam objek hasil tangkapan). Untuk detail lebih lanjut tentang model kebisingan DNG, unduh dokumen berikut tentang Model Kebisingan DNG .

API diuji:

Lulus: Parameter model mentah DNG sudah benar. Nilai RGB yang diharapkan cocok dengan nilai RGB sebenarnya yang diukur.

test_dng_noise_model_plog

test_dng_noise_model_plog.png

test_ev_compensation_advanced

Menguji bahwa kompensasi exposure value (EV) diterapkan. Tes ini meningkatkan eksposur dalam delapan langkah, dan memeriksa kecerahan terukur versus kecerahan yang diharapkan. Nilai yang diharapkan dihitung dari kecerahan gambar tanpa kompensasi EV yang diterapkan dan nilai yang diharapkan akan jenuh jika nilai yang dihitung melebihi rentang nilai gambar sebenarnya. Pengujian gagal jika nilai yang diharapkan dan nilai terukur tidak cocok atau gambar terlalu terang dalam lima langkah.

API diuji:

Pass: Gambar menunjukkan eksposur yang meningkat tanpa overexposing dalam lima langkah.

test_ev_compensation_advanced_plot_means

test_ev_compensation_advanced_plot_means.png

test_ev_compensation_basic

Menguji apakah kompensasi EV diterapkan menggunakan rentang yang dibuat dengan CONTROL_AE_COMPENSATION_STEP . Delapan bingkai diambil pada setiap nilai kompensasi.

API diuji:

Pass: Menangkap peningkatan luma dengan peningkatan pengaturan kompensasi EV, dan delapan frame yang diambil untuk setiap pengaturan kompensasi EV memiliki nilai luma yang stabil.

test_ev_compensation_basic

test_ev_compensation_basic.png

test_exposure

Tes bahwa eksposur konstan dicapai sebagai ISO dan waktu eksposur bervariasi. Mengambil serangkaian bidikan dengan ISO dan waktu pencahayaan yang dipilih untuk menyeimbangkan satu sama lain. Hasil harus memiliki kecerahan yang sama, tetapi gambar akan menjadi lebih berisik. Memverifikasi nilai rata-rata piksel sampel dekat satu sama lain. Pastikan gambar tidak dijepit ke 0 atau 1 (yang akan membuatnya terlihat seperti garis datar). Pengujian juga dapat dijalankan dengan gambar RAW dengan menyetel flag debug di file konfigurasi Anda.

API diuji:

Pass: Gambar memiliki kecerahan yang sama, tetapi menjadi lebih berisik dengan ISO yang lebih tinggi. Bidang RGB datar saat nilai paparan ISO* konstan di atas ruang penguatan yang diuji.

test_exposure_plot_means

test_exposure_plot_means.png

test_exposure_mult=1.00test_exposure_mult=64.00
test_exposure_mult=1.00.jpg test_exposure_mult=64.00.jpg

test_jpeg

Pengujian yang mengonversi gambar YUV dan gambar JPEG perangkat terlihat sama. Tes mengambil pusat 10% dari gambar dan menghitung nilai RGB, dan memverifikasi bahwa keduanya cocok.

API diuji:

Lulus: Perbedaan RGB rata-rata antara setiap gambar kurang dari 3%.

test_jpeg_fmt=jpg.jpgtest_jpeg=fmt=yuv.jpg
test_jpeg_fmt=jpg.jpg test_jpeg=fmt=yuv.jpg

test_latching

Menguji kait pengaturan (pencahayaan dan penguatan) pada bingkai kanan untuk kamera FULL dan LEVEL_3 . Mengambil serangkaian bidikan menggunakan permintaan back-to-back, memvariasikan parameter permintaan pengambilan di antara bidikan. Periksa apakah gambar memiliki properti yang diharapkan.

API diuji:

Lulus: Gambar [2, 3, 6, 8, 10, 12, 13] telah meningkatkan ISO atau eksposur dan muncul dengan nilai RGB yang lebih tinggi pada test_latching_plot_means.png .

test_latching_i=00.jpgtest_latching_i=01.jpgtest_latching_i=02.jpg
test_latching_i=00.jpg test_latching_i=01.jpg test_latching_i=02.jpg
test_latching_i=03.jpgtest_latching_i=04.jpgtest_latching_i=05.jpg
test_latching_i=03.jpg test_latching_i=04.jpg test_latching_i=05.jpg
test_latching_i=06.jpgtest_latching_i=07.jpgtest_latching_i=08.jpg
test_latching_i=06.jpg test_latching_i=07.jpg test_latching_i=08.jpg
test_latching_i=09.jpgtest_latching_i=10.jpgtest_latching_i=11.jpg
test_latching_i=09.jpg test_latching_i=10.jpg test_latching_i=11.jpg
test_latching_i=12.jpg
test_latching_i=12.jpg

test_latching_plot_means

test_latching_plot_means.png

test_linearity

Menguji bahwa pemrosesan perangkat dapat dibalik ke piksel linier. Menangkap rangkaian bidikan dengan perangkat mengarah ke target yang seragam.

API diuji:

Lulus: Nilai R, G, B harus meningkat secara linier dengan peningkatan sensitivitas.

test_linearity_plot_means

test_linearity_plot_means.png

test_locked_burst

Tes 3A lock dan YUV burst (menggunakan pengaturan otomatis). Tes ini dirancang untuk lulus bahkan pada perangkat terbatas yang tidak memiliki MANUAL_SENSOR atau PER_FRAME_CONTROLS . Pengujian memeriksa konsistensi gambar YUV sementara pemeriksaan frekuensi gambar dalam CTS.

API diuji:

Pass: Hasil tangkapan terlihat konsisten.

test_locked_burst_frame0

test_locked_burst_frame0.jpg

test_locked_burst_frame1

test_locked_burst_frame1.jpg

test_locked_burst_frame2

test_locked_burst_frame2.jpg

test_multi_camera_match

Pengujian untuk melihat apakah multikamera pada perangkat memberikan nilai RGB serupa untuk tambalan abu-abu.

API diuji:

Lulus: Kamera yang berbeda menghasilkan nilai RGB yang serupa untuk tambalan abu-abu yang sama.

test_multi_camera+match_yuv_fl=4.38

test_multi_camera+match_yuv_fl=4.38.jpg

test_param_color_correction

Menguji apakah parameter android.colorCorrection.* diterapkan saat disetel. Mengambil bidikan dengan nilai transformasi dan perolehan yang berbeda, dan menguji apakah keduanya terlihat berbeda. Transformasi dan gain dipilih untuk membuat keluaran semakin merah atau biru. Menggunakan peta nada linier. Pemetaan nada adalah teknik yang digunakan dalam pemrosesan gambar untuk memetakan satu set warna ke yang lain untuk memperkirakan tampilan gambar rentang dinamis tinggi dalam media yang memiliki rentang dinamis lebih terbatas.

API diuji:

Pass: Nilai R dan B meningkat sesuai dengan transformasi.

test_param_color_correction_plot_means

test_param_color_correction_plot_means.png

*Sumbu x adalah permintaan tangkap: 0 = unity, 1=red boost, 2= blue boost

test_param_color_correction_req=0

test_param_color_correction_req=0.jpg

test_param_color_correctness_req=1

test_param_color_correctness_req=1.jpg (peningkatan R)

test_param_color_correction_req=2

test_param_color_correction_req=2.jpg (peningkatan B)

test_param_exposure_time

Menguji penerapan parameter android.sensor.exposureTime .

API diuji:

Pass: Setiap bidikan lebih terang dari bidikan sebelumnya.

test_param_exposure_time_frame0

test_param_exposure_time_frame0.jpg

test_param_exposure_time_plot

test_param_exposure_time_plot.png

test_param_flash_mode

Menguji apakah parameter android.flash.mode diterapkan. Secara manual menyetel eksposur ke sisi gelap, sehingga jelas apakah blitz menyala atau tidak, dan menggunakan peta nada linier. Periksa bagian tengah dengan gambar petak untuk melihat apakah ada gradien besar yang dibuat untuk memverifikasi apakah lampu kilat menyala.

API diuji:

Pass: Bagian tengah gambar petak memiliki gradien besar yang berarti blitz ditembakkan.

test_param_flash_mode_1

test_param_flash_mode_1.jpg

test_param_flash_mode_1_tile

test_param_flash_mode_1_tile.jpg

test_param_flash_mode_2

test_param_flash_mode_2.jpg

test_param_flash_mode_2_tile

test_param_flash_mode_2_tile.jpg

test_param_noise_reduction

Menguji apakah parameter android.noiseReduction.mode diterapkan dengan benar saat disetel. Menangkap gambar dengan kamera redup. Menggunakan gain analog tinggi untuk memastikan gambar yang diambil tidak berisik. Menangkap tiga gambar, untuk NR off, "fast", dan "high quality". Juga menangkap gambar dengan gain rendah dan NR nonaktif, dan menggunakan varian ini sebagai garis dasar. Semakin tinggi SNR (Signal to Noise Ratio), semakin baik kualitas gambarnya.

API diuji:

Pass: SNR bervariasi dengan mode pengurangan noise yang berbeda dan berperilaku serupa dengan grafik di bawah ini.

test_param_noise_reduction_plot_SNR

test_param_noise_reduction_plot_SNRs.png

0: MATI, 1: CEPAT, 2: Markas Besar, 3: MENIT, 4: ZSL

test_param_noise_reduction_high_gain_nr=0

test_param_noise_reduction_high_gain_nr=0.jpg

test_param_noise_reduction_high_gain_nr=1

test_param_noise_reduction_high_gain_nr=1.jpg

test_param_noise_reduction_high_gain_nr=2

test_param_noise_reduction_high_gain_nr=2.jpg

test_param_noise_reduction_high_gain_nr=3

test_param_noise_reduction_high_gain_nr=3.jpg

test_param_noise_reduction_low_gain

test_param_noise_reduction_low_gain.jpg

tes_param_sensitivitas

Menguji penerapan parameter android.sensor.sensitivity . Tes meningkatkan sensitivitas dalam 5 langkah dengan eksposur tetap untuk setiap bidikan.

API diuji:

Lulus: RGB berarti pusat 10% menjadi lebih terang dengan sensitivitas yang meningkat.

test_param_sensitivity_iso=0055

test_param_sensitivity_iso=0055.jpg

test_param_sensitivity_iso=1819

test_param_sensitivity_iso=1819.jpg

test_param_sensitivity_iso=3583

test_param_sensitivity_iso=3583.jpg

test_param_sensitivity_iso=5347

test_param_sensitivity_iso=5347.jpg

test_param_sensitivity_iso=7111

test_param_sensitivity_iso=7111.jpg

test_param_sensitivity_plot

test_param_sensitivity_plot.png

test_param_shading_mode

Menguji apakah parameter android.shading.mode diterapkan.

API diuji:

Lulus: Mode bayangan diubah dan peta bayangan lensa dimodifikasi seperti yang diharapkan.

test_param_shading_mode_ls_maps_mode_0_loop_0

test_param_shading_mode_ls_maps_mode_0_loop_0.png

test_param_shading_mode_ls_maps_mode_1_loop_0

test_param_shading_mode_ls_maps_mode_1_loop_0.png

test_param_shading_mode_ls_maps_mode_2_loop_0

test_param_shading_mode_ls_maps_mode_2_loop_0.png

test_param_tonemap_mode

Menguji apakah parameter android.tonemap.mode diterapkan. Menerapkan kurva peta warna yang berbeda untuk setiap saluran R, G, B, dan memeriksa apakah gambar keluaran dimodifikasi seperti yang diharapkan. Tes ini terdiri dari dua tes, tes1 dan tes2.

API diuji:

Lulus:

  • test1: Kedua gambar memiliki peta warna linier, tetapi n=1 memiliki gradien yang lebih curam. Saluran G (hijau) lebih terang untuk gambar n=1.
  • test2: Tonemap yang sama, tetapi panjangnya berbeda. Gambarnya sama.
test_param_tonemap_mode_n=0.jpgtest_param_tonemap_mode_n=1.jpg
test_param_tonemap_mode_n=0.jpg test_param_tonemap_mode_n=1.jpg

test_post_raw_sensitivity_boost

Memeriksa peningkatan sensitivitas pasca RAW. Menangkap satu set gambar RAW dan YUV dengan sensitivitas berbeda, memposting kombinasi peningkatan sensitivitas RAW dan memeriksa apakah rata-rata piksel keluaran cocok dengan pengaturan permintaan.

API diuji:

Lulus: Gambar RAW menjadi lebih gelap saat dorongan meningkat sementara kecerahan gambar YUV tetap konstan

test_post_raw_sensitivity_boost_raw_s=3583_boost=0100

test_post_raw_sensitivity_boost_raw_s=3583_boost=0100.jpg

test_post_raw_sensitivity_boost_raw_s=1792_boost=0200

test_post_raw_sensitivity_boost_raw_s=1792_boost=0200.jpg

test_post_raw_sensitivity_boost_raw_s=0896_boost=0400

test_post_raw_sensitivity_boost_raw_s=0896_boost=0400.jpg

test_post_raw_sensitivity_boost_raw_s=0448_boost=0800

test_post_raw_sensitivity_boost_raw_s=0448_boost=0800.jpg

test_post_raw_sensitivity_boost_raw_s=0224_boost=1600

test_post_raw_sensitivity_boost_raw_s=0224_boost=1600.jpg

test_post_raw_sensitivity_boost_raw_s=0112_boost=3199

test_post_raw_sensitivity_boost_raw_s=0112_boost=3199.jpg

test_post_raw_sensitivity_boost_raw_plot_means

test_post_raw_sensitivity_boost_raw_plot_means.png

test_post_raw_sensitivity_boost_yuv_s=0112_boost=3199

test_post_raw_sensitivity_boost_yuv_s=0112_boost=3199.jpg

test_post_raw_sensitivity_boost_yuv_s=0448_boost=0800

test_post_raw_sensitivity_boost_yuv_s=0448_boost=0800.jpg

test_post_raw_sensitivity_boost_yuv_s=0896_boost=0400

test_post_raw_sensitivity_boost_yuv_s=0896_boost=0400.jpg

test_post_raw_sensitivity_boost_yuv_s=1792_boost=0200

test_post_raw_sensitivity_boost_yuv_s=1792_boost=0200.jpg

test_post_raw_sensitivity_boost_yuv_s=3585_boost=0100

test_post_raw_sensitivity_boost_yuv_s=3585_boost=0100.jpg

test_post_raw_sensitivity_boost_yuv_plot_means

test_post_raw_sensitivity_boost_yuv_plot_means.png

test_raw_burst_sensitivity

Menangkap serangkaian gambar mentah dengan perolehan yang meningkat dan mengukur noise. Menangkap hanya mentah, dalam ledakan.

API diuji:

Pass: Setiap bidikan lebih berisik dari bidikan sebelumnya, karena perolehannya meningkat.

Menggunakan varian dari sel kisi statistik pusat.

test_raw_burst_sensitivity_variance

test_raw_burst_sensitivity_variance.png

test_raw_exposure

Menangkap sekumpulan gambar mentah dengan bertambahnya waktu pencahayaan dan mengukur nilai piksel.

API diuji:

Pass: Menaikkan ISO (gain) membuat piksel lebih sensitif terhadap cahaya, sehingga plot bergerak ke arah kiri.

test_raw_exposure_s=55

test_raw_exposure_s=55.png

(10⁰ adalah 1 mdtk, 10¹ adalah 10 mdtk, 10⁻¹ adalah 0,1 mdtk)

test_raw_exposure_s=132

test_raw_exposure_s=132.png

test_raw_exposure_s=209

test_raw_exposure_s=209.png

test_raw_exposure_s=286

test_raw_exposure_s=286.png

test_raw_exposure_s=363

test_raw_exposure_s=363.png

test_raw_exposure_s=440

test_raw_exposure_s=440.png

test_raw_sensitivity

Menangkap serangkaian gambar mentah dengan sensitivitas yang meningkat dan mengukur noise (varians) di tengah 10% gambar. Menguji bahwa setiap bidikan lebih berisik dari bidikan sebelumnya.

API diuji:

Pass: Varians meningkat dengan setiap tembakan.

test_raw_sensitivity_variance

test_raw_sensitivity_variance.png

test_reprocess_noise_reduction

Menguji apakah android.noiseReduction.mode diterapkan untuk memproses ulang permintaan. Menangkap gambar yang diproses ulang dengan kamera yang remang-remang. Menggunakan penguatan analog tinggi untuk memastikan pengambilan gambar tidak bising. Menangkap tiga gambar yang diproses ulang, untuk NR nonaktif, "cepat", dan "kualitas tinggi". Menangkap gambar yang diproses ulang dengan penguatan rendah dan NR nonaktif, dan menggunakan varian ini sebagai garis dasar.

API diuji:

Lulus: CEPAT >= MATI, HQ >= CEPAT, HQ >> MATI

Plot SNR vs NR_MODE tipikal

Plot SNR vs NR_MODE tipikal

test_tonemap_sequence

Menguji urutan bidikan dengan kurva peta nada yang berbeda. Menangkap 3 bidikan manual dengan peta nada linier. Menangkap 3 bidikan manual dengan peta nada default. Menghitung delta di antara setiap pasangan bingkai yang berurutan.

API diuji:

Pass: Ada 3 frame identik diikuti oleh set berbeda dari 3 frame identik.

test_tonemap_sequence_i=0

test_tonemap_sequence_i=0.jpg

test_tonemap_sequence_i=1

test_tonemap_sequence_i=1.jpg

test_tonemap_sequence_i=2

test_tonemap_sequence_i=2.jpg

test_tonemap_sequence_i=3

test_tonemap_sequence_i=3.jpg

test_tonemap_sequence_i=4

test_tonemap_sequence_i=4.jpg

test_tonemap_sequence_i=5

test_tonemap_sequence_i=5.jpg

test_yuv_jpeg_all

Menguji bahwa semua ukuran dan format yang dilaporkan untuk pengambilan gambar berfungsi. Menggunakan permintaan manual dengan peta warna linier sehingga YUV dan JPEG terlihat sama saat dikonversi oleh modul image_processing_utils . Gambar tidak disimpan secara default, tetapi dapat disimpan dengan mengaktifkan debug_mode .

API diuji:

Lulus: Semua pusat gambar memiliki perbedaan maksimum RMS (nilai root-mean-square dari sinyal) dalam gambar yang dikonversi RGB dengan 3% dari gambar YUV resolusi tertinggi.

test_yuv_jpeg_all

test_yuv_jpeg_all.png

test_yuv_plus_dng

Menguji apakah ukuran dan format yang dilaporkan untuk pengambilan gambar berfungsi.

API diuji:

Lulus: Tes selesai dan mengembalikan gambar yang diminta.

test_yuv_plus_dng

test_yuv_plus_dng.jpg

test_yuv_plus_jpeg

Tes menangkap satu frame sebagai output YUV dan JPEG. Menggunakan permintaan manual dengan peta warna linier sehingga YUV dan JPEG terlihat sama saat dikonversi oleh modul image_processing_utils .

API diuji:

Lulus: Gambar YUV dan JPEG serupa dan memiliki perbedaan kurang dari 1% RMS (nilai root-mean-square dari sinyal).

test_yuv_plus_jpg_jpg.jpgtest_yuv_plus_jpeg_yuv.jpg
test_yuv_plus_jpg_jpg.jpg test_yuv_plus_jpeg_yuv.jpg

test_yuv_plus_raw

Tes menangkap satu frame sebagai output RAW dan YUV. Menggunakan permintaan manual dengan peta warna linier sehingga RAW dan YUV diharapkan sama. Membandingkan nilai RGB 10% pusat gambar yang dikonversi RGB. Log android.shading.mode .

API diuji:

Lulus: Gambar YUV dan JPEG serupa dan memiliki perbedaan kurang dari 3,5% RMS (nilai root-mean-square dari sinyal).

test_yuv_plus_raw_shading=1_raw.jpgtest_yuv_plus_raw_shading=1_yuv.jpg
test_yuv_plus_raw_shading=1_raw.jpg test_yuv_plus_raw_shading=1_yuv.jpg

test_yuv_plus_raw10

Pengujian menangkap satu frame sebagai output RAW10 dan YUV. Menggunakan permintaan manual dengan peta warna linier sehingga RAW dan YUV diharapkan sama. Membandingkan nilai RGB 10% pusat gambar yang dikonversi RGB. Log android.shading.mode .

API diuji:

Lulus: Gambar RAW10 dan YUV serupa dan memiliki perbedaan kurang dari 3,5% RMS (root-mean-square value of a signal).

test_yuv_plus_raw10_shading=1_mentahtest_yuv_plus_raw10_shading=1_yuv
test_yuv_plus_raw10_shading=1_raw.jpg test_yuv_plus_raw10_shading=1_yuv.jpg

test_yuv_plus_raw12

Pengujian menangkap satu frame sebagai output RAW12 dan YUV. Menggunakan permintaan manual dengan peta warna linier sehingga RAW dan YUV diharapkan sama. Membandingkan nilai RGB 10% pusat gambar yang dikonversi RGB. Log android.shading.mode .

API diuji:

Lulus: Gambar RAW12 dan YUV serupa dan memiliki perbedaan kurang dari 3,5% RMS (root-mean-square value of a signal).

test_yuv_plus_raw12_shading=1_raw.jpgtest_yuv_plus_raw12_shading=1_yuv.jpg
test_yuv_plus_raw12_shading=1_raw.jpg test_yuv_plus_raw12_shading=1_yuv.jpg

adegan2_a

scene2_a memiliki tiga wajah dengan latar belakang abu-abu dan pakaian netral. Wajah-wajah dipilih untuk memiliki berbagai macam warna kulit. Bagan harus memiliki orientasi yang benar agar deteksi wajah dapat bekerja secara optimal.

adegan2_a

adegan2_a

test_auto_flash

Menguji apakah flash otomatis dipicu dalam suasana gelap. Memverifikasi apakah lampu kilat otomatis diaktifkan dengan memeriksa bahwa bagian tengah gambar petak memiliki gradien yang besar. Untuk memicu flash otomatis, tablet dan lampu di rig pengujian harus dimatikan. Tablet dimatikan dengan pengujian, dan lampu dapat dimatikan secara otomatis dengan pengontrol Arduino. Adegan harus benar-benar gelap agar tes bekerja dengan benar. Dengan demikian, bukaan tablet belakang harus sepenuhnya tertutup oleh scene tablet, dan bukaan depan harus ditutup oleh bukaan dan telepon DUT untuk memblokir cahaya yang menyimpang memasuki rig.

API diuji:

Pass: Bagian tengah gambar petak memiliki gradien besar yang berarti flash otomatis menyala.

uji_efek

Menangkap bingkai untuk efek kamera yang didukung dan memeriksa apakah dibuat dengan benar. Pengujian ini hanya memeriksa efek OFF dan MONO , tetapi menyimpan gambar untuk semua efek yang didukung.

API diuji:

Pass: Menangkap gambar pemandangan dengan efek OFF dan gambar monokrom dengan efek diatur ke MONO .

uji_efek_MONO

test_efek_MONO.jpg

test_format_combos

Menguji berbagai kombinasi format keluaran.

API diuji:

Pass: Semua kombinasi berhasil ditangkap.

test_jpeg_quality

Menguji kualitas kompresi kamera JPEG. Langkah kualitas JPEG melalui android.jpeg.quality dan pastikan Tabel Kuantisasi berubah dengan benar.

API diuji:

Lulus: Matriks kuantisasi menurun dengan peningkatan kualitas. (Matriks mewakili faktor pembagian.)

test_jpeg_quality

Rata-rata matriks DQT kamera belakang Pixel 4 luma/chroma vs kualitas JPEG

test_jpeg_quality gagal

Contoh tes gagal

Perhatikan bahwa untuk gambar berkualitas sangat rendah (jpeg.quality <50), tidak ada peningkatan kompresi dalam matriks kuantisasi.

test_num_faces

Tes deteksi wajah.

API diuji:

Pass: Menemukan tiga wajah.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

scene2_b

test_num_faces

Menguji deteksi wajah dengan keragaman rona kulit yang meningkat dalam adegan wajah.

API diuji:

Pass: Menemukan 3 wajah.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

test_yuv_jpeg_capture_sameness

Menangkap dua gambar menggunakan format YUV dan JPEG umum terbesar dengan rasio aspek yang sama dengan format JPEG terbesar yang tidak melebihi resolusi 1920x1440. Setel jpeg.quality ke 100 dan tangkap permintaan permukaan ganda. Mengonversi kedua gambar menjadi larik RGB dan menghitung perbedaan root mean square (RMS) 3D antara kedua gambar.

API diuji:

Lulus: Gambar YUV dan JPEG serupa dan memiliki perbedaan kurang dari 1% RMS (nilai root-mean-square dari sinyal).

scene2_c

test_num_faces

Menguji deteksi wajah dengan keragaman rona kulit yang meningkat dalam adegan wajah.

API diuji:

Pass: Menemukan 3 wajah.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

test_jpeg_capture_perf_class

Menguji latensi penangkapan JPEG untuk kelas performa S seperti yang ditentukan di bagian 2.2.7.2 Kamera di CDD.

Lulus: HARUS memiliki latensi pengambilan JPEG kamera2 < 1000ms untuk resolusi 1080p yang diukur dengan Uji Kinerja kamera CTS dalam kondisi pencahayaan ITS (3000K) untuk kedua kamera utama.

test_camera_launch_perf_class

Menguji latensi peluncuran kamera untuk kelas kinerja S seperti yang ditentukan di bagian 2.2.7.2 Kamera di CDD.

Lulus: HARUS memiliki latensi pengaktifan kamera2 (buka kamera ke bingkai pratinjau pertama) < 600ms yang diukur dengan Uji Kinerja kamera CTS dalam kondisi pencahayaan ITS (3000K) untuk kedua kamera utama.

scene2_d

test_num_faces

Menguji deteksi wajah dengan keragaman rona kulit yang meningkat dalam adegan wajah.

API diuji:

Pass: Menemukan 3 wajah.

scene2_e

test_continuous_picture

50 frame beresolusi VGA ditangkap dengan request capture pertama mengatur android.control.afMode = 4 (CONTINUOUS_PICTURE).

API diuji:

Lulus: Sistem 3A mengendap pada akhir pengambilan 50 bingkai.

test_num_faces

Menguji deteksi wajah dengan keragaman rona kulit yang meningkat dalam adegan wajah.

API diuji:

Pass: Menemukan 3 wajah.

adegan3

Scene3 menggunakan bagan ISO12233, dan sebagian besar pengujian menggunakan metode ekstraktor bagan untuk menemukan bagan di tempat kejadian. Untuk alasan ini, sebagian besar gambar yang disimpan tidak memiliki batas seperti gambar untuk adegan 1, 2 atau 4, tetapi hanya grafiknya. Bagan harus dalam orientasi yang benar agar pencari bagan dapat bekerja secara optimal.

test_3a_konsistensi

Tes untuk konsistensi 3A.

API diuji:

Pass: 3A konvergen untuk exposure, gain, awb (auto white balance), dan fd (jarak fokus) tiga kali dalam toleransi.

test_edge_enhancement

Menguji apakah parameter android.edge.mode diterapkan dengan benar. Menangkap gambar non-proses ulang untuk setiap mode tepi dan mengembalikan ketajaman gambar keluaran dan metadata hasil tangkapan. Memproses permintaan pengambilan dengan mode tepi tertentu, sensitivitas, waktu pencahayaan, jarak fokus, dan parameter permukaan keluaran.

Pass: Mode HQ (2) lebih tajam dari mode OFF (0). Mode FAST (1) lebih tajam dari mode OFF . Mode HQ lebih tajam atau sama dengan mode FAST .

API diuji:

Parameter kamera yang terpengaruh:

  • EDGE_MODE

test_edge_enhancement_edge=0

test_edge_enhancement_edge=0.jpg

test_edge_enhancement_edge=1

test_edge_enhancement_edge=1.jpg (mode cepat)

test_edge_enhancement_edge=2

test_edge_enhancement_edge=2.jpg (mode kualitas tinggi)

test_flip_mirror

Menguji apakah gambar diorientasikan dengan benar sesuai CDD bagian 7.5.2 Kamera Depan [C-1-5] .

Mirrored, flipped, or rotated images can be identified by the diamond feature near the center.

Pass: Image isn't flipped, mirrored or rotated.

test_flip_mirror_scene_patch

test_flip_mirror_scene_patch.jpg

test_lens_movement_reporting

Tests if the lens movement flag is properly reported. Captures a burst of 24 images with the first 12 frames at the optimum focus distance (as found by 3A) and the last 12 frames at the minimum focus distance. Around frame 12, the lens moves causing the sharpness to drop. The sharpness eventually stabilize as the lens moves to the final position. The lens movement flag should be asserted in all frames where the sharpness is intermediate to sharpness in the first 10 frames with the lens stationary at optimum focal distance, and the final 10 frames where the lens is stationary in the minimum focal distance. The exact frame the lens moves isn't important: what is checked is that the movement flag is asserted when the lens is moving.

APIs tested:

Pass: Lens movement flag is True in the frame with sharpness change.

test_reprocess_edge_enhancement

Tests if supported reprocess methods for edge enhancement work properly. Processes a capture request with a given reprocess edge mode and compares different modes to capture with reprocess edge modes disabled.

APIs tested:

Pass: Sharpness for the different edge modes is correct. HQ (mode 2) is sharper than OFF (mode 0), and improvement between different modes is similar.

test_reprocess_edge_enhancement_plot

test_reprocess_edge_enhancement_plot.png

scene4

Scene4 consists of a black circle on a white background inside a square.

scene4

scene4

test_aspect_ratio_and_crop

Takes pictures of a circle inside of a square over all formats. Verifies that the aspect ratio of the circle doesn't change, the cropped images keep the circle in center, and the circle size doesn't change for a constant format or with different resolution (field of view check).

APIs tested:

Pass: Images aren't stretched, the center of images don't differ by more than 3%, and the maximum possible FOV (field of view) is preserved.

test_multi_camera_alignment

Tests the multi camera system parameters related to camera spacing. Using the multi-camera physical sub-cameras, takes a picture with one of the physical cameras. Finds the circle center. Projects the circle center to the world coordinates for each camera. Compares the difference between the cameras' circle centers in world coordinates. Reprojects the world coordinate back to pixel coordinates and compares against originals as a validity check. Compares the circle sizes checking if the focal lengths of the cameras are different.

APIs tested:

Pass: Focal lengths and circles sizes are consistent.

test_preview_stabilization_fov

Checks the supported preview sizes to ensure the FoV is cropped appropriately. The test captures two videos, one with preview stabilization ON , and another with preview stabilization OFF . A representative frame is selected from each video, and analyzed to ensure that the FoV changes in the two videos are within spec.

APIs tested:

Pass: The circle aspect ratio remains about constant, the center location of the circle remains stable, and the size of circle changes no more that 20%. ie the FOV changes at most 20%

test_video_aspect_ratio_and_crop

Takes videos of a circle inside of a square over all video formats. Extracts the key frames, and verifies the aspect ratio of the circle doesn't change, the cropped images keep the circle in center, and the circle size doesn't change for a constant format or with different resolution (field of view check).

APIs tested:

Pass: Video frames aren't stretched, the center of frames don't differ by more than 3%, and the maximum possible FoV (field of view) is preserved.

scene5/diffuser

test_lens_shading_and_color_uniformity

Tests that the lens shading correction is applied appropriately, and color of a monochrome uniform scene is evenly distributed. Performs this test on a YUV frame with auto 3A. Lens shading is evaluated based on the y channel. Measures the average y value for each sample block specified, and determines pass or fail by comparing with the center y value. The color uniformity test is evaluated in r/g and b/g space.

APIs tested:

Pass: At the specified radius of the image, the variance of r/g and b/g value must be less than 20% to pass the test.

scene6

Scene6 is a grid of small circles with a square in one corner to indicate orientation. The small circles are needed to test zoom function over a large range.

scene6

scene6

test_zoom

Tests the camera zoom behavior. Takes captures over the zoom range and checks if the circles get bigger as the camera zooms in.

APIs tested:

Pass: Relative size of captured circle is accurate against requested zoom ratio to ensure camera is zooming correctly.

test_zoom

test_zoom to find the contour of the circle closest to the center.

sensor_fusion

Sensor fusion tests require specific phone movement in front of a checkerboard pattern. For optimum results, ensure the test chart is mounted flat. Charts that aren't flat affect the rotation calculations for many of the tests. The sensor_fusion tests can be automated with the Sensor Fusion Box .

checkerboard

Image of checkerboard

test_multi_camera_frame_sync

Tests that frame timestamps captured by logical camera are within 10 ms by computing angles of squares within the checkerboard to determine the timestamp.

APIs tested:

Pass: Angle between images from each camera doesn't change appreciably as phone is rotated.

test_preview_stabilization

Tests that stabilized preview video rotates less than gyroscope.

APIs tested:

Pass: Max angle rotation over frames is less than 70% of gyroscope rotation.

The following are sample videos with and without stabilization.

  • Sample video with stabilization

  • Sample video without stabilization

    test_sensor_fusion

Tests the timestamp difference between the camera and the gyroscope for AR and VR applications. Phone is rotated 90 degrees 10 times in front of the checkerboard pattern. Motion is about 2 s round trip. This test is skipped if no gyroscope is included or if the timestamp source REALTIME parameter is not enabled.

The test_sensor_fusion test generates a number of plots. The two most important plots for debugging are:

  • test_sensor_fusion_gyro_events : Shows the gyroscope events for the phone during the test. Movement in the x and y direction implies the phone isn't securely mounted on the mounting plate, reducing the probability of the test passing. The number of cycles in the plot depends on the write speed for saving frames.

    test_sensor_fusion_gyro_events.png

    test_sensor_fusion_gyro_events

  • test_sensor_fusion_plot_rotations : Shows the alignment of the gyroscope and camera events. This plot must show matching movement between camera and gyroscope to +/-1 ms.

    test_sensor_fusion_plot_rotations.png

    test_sensor_fusion_plot_rotations

APIs tested:

Pass: Camera and gyroscope timestamps' offset is less than 1 ms as per CDD section 7.3.9 High Fidelity Sensors [C-2-14] .

test_video_stabilization

Tests that stabilized video rotates less than gyroscope.

APIs tested:

Pass: Max angle rotation over frames is less than 60% of gyroscope rotation.

The following are sample videos with and without stabilization.

  • Sample video with stabilization

  • Sample video without stabilization