Ringkasan ITS Kamera

Camera Image Test Suite (ITS) adalah framework untuk menjalankan pengujian pada gambar yang dihasilkan oleh kamera Android. Tujuan umum setiap pengujian di ITS adalah mengonfigurasi kamera dengan cara tertentu, mengambil satu atau beberapa gambar, dan memeriksa gambar untuk melihat apakah gambar tersebut berisi data gambar yang diharapkan. Banyak pengujian yang mengharuskan kamera diarahkan ke diagram target tertentu atau diterangi pada intensitas tertentu.

ITS terletak di CTS Verifier test harness di cts/apps/CameraITS. Perangkat harus lulus pengujian ITS yang sesuai dengan fitur yang didukung yang diiklankan oleh framework kamera untuk aplikasi pihak ketiga sebagai subset CTS.

Penyiapan

Untuk menjalankan pengujian ITS, hal berikut harus disiapkan:

  • Perangkat yang sedang diuji (DUT)
  • Mesin host (misalnya, desktop atau laptop Linux)
  • Adegan yang difoto oleh kamera

Penyiapan perangkat yang sedang diuji (DUT)

Untuk menyiapkan DUT, ikuti langkah-langkah berikut:

  1. Hubungkan DUT ke mesin host melalui USB.
  2. Konfigurasi opsi developer di DUT:
    • Aktifkan Tetap terjaga dan Proses debug USB.
    • Nonaktifkan Update sistem otomatis dan Verifikasi aplikasi melalui USB.
  3. Berikan izin agar host dapat mengakses DUT melalui ADB.
  4. Instal aplikasi CTS Verifier (CtsVerifier.apk) ke perangkat. Untuk mengetahui informasi selengkapnya, lihat Menggunakan CTS Verifier.

    extract root/out/host/linux-x86/cts-verfier/android-cts-verifier.zip
    cd android-cts-verifier
    adb install -r -g CtsVerifier.apk
  5. Di DUT, luncurkan aplikasi kamera default dan tutup semua jendela yang muncul saat peluncuran untuk menghindari gangguan selama pengujian.

Penyiapan host

ITS mengharuskan mesin host terhubung ke DUT melalui USB, dapat menggunakan ADB untuk kontrol dan komunikasi perangkat, serta menginstal software yang diperlukan.

Untuk menyiapkan mesin host, pastikan software berikut telah diinstal.

Android SDK Platform Tools

Android SDK Platform Tools harus diinstal dan ADB harus berada di jalur yang dapat dieksekusi dari shell atau terminal yang berjalan di mesin host. Untuk versi Android SDK Platform Tools yang dirilis publik, lihat Catatan rilis SDK Platform Tools.

Python

Python harus diinstal di mesin host. Sebaiknya gunakan distribusi Python yang digabungkan untuk memastikan dukungan untuk versi yang kompatibel. Untuk mengetahui detail tentang versi Python dan paket yang akan diinstal untuk rilis tertentu, lihat catatan rilis Camera ITS untuk rilis yang sesuai.

Mobly

Untuk Android 12 dan yang lebih tinggi, instal framework pengujian Mobly. Mobly memungkinkan Anda menyiapkan DUT dan tablet diagram di class its_base_test. Untuk menginstal framework pengujian Mobly, jalankan:

pip install mobly

Penyiapan lingkungan

Untuk menyiapkan lingkungan pengujian, jalankan:

cd CameraITS
source build/envsetup.sh

Perintah ini memeriksa penginstalan Python, menyiapkan variabel lingkungan PYTHONPATH, dan menjalankan pengujian unit pada modul utils/*.py. Jika tidak ada error yang dicetak ke terminal, lingkungan siap menjalankan pengujian ITS.

Penyiapan adegan

Untuk menyiapkan adegan, sebaiknya gunakan penyiapan Camera ITS-in-a-box untuk memudahkan otomatisasi, keandalan, dan efisiensi dalam pengujian. Rig pengujian ITS-in-a-box mendukung semua persyaratan pencahayaan, pemusatan, dan perubahan diagram untuk ITS. Selain itu, ITS-in-a-box diperlukan untuk pengujian ekstensi kamera.

Untuk pengujian manual, pastikan hal berikut:

  • DUT berada di tripod
  • DUT diarahkan ke adegan yang benar untuk setiap pengujian. (Skrip pengujian ITS memberikan perintah untuk mengubah penyiapan adegan sebelum memulai pengujian di adegan baru.)
  • DUT terhubung ke mesin host melalui USB.
  • DUT tidak bergerak selama pengujian dijalankan.
  • Adegan diterangi dengan sumber cahaya yang stabil dan tidak berfluktuasi. (Jangan gunakan lampu neon karena akan menyebabkan kedipan.)

Skrip pengujian ITS menampilkan perintah yang meminta pengguna untuk mengubah penyiapan adegan sebelum memulai pengujian di adegan baru.

Orientasi ponsel harus disetel agar kamera mengambil gambar tanpa rotasi. Cara termudah untuk memeriksanya adalah dengan adegan wajah di scene2. Sebagian besar ponsel memiliki orientasi lanskap dengan ponsel diputar berlawanan arah jarum jam untuk kamera belakang dan diputar searah jarum jam untuk kamera depan.

Untuk memeriksa DUT dan penyelarasan diagram, jalankan tools/check_alignment.py untuk menampilkan koordinat x,y untuk pusat diagram versus pusat gambar, dan anotasi gambar yang diambil dengan dua pusat untuk penyelarasan yang optimal.

File konfigurasi

Dengan menggunakan framework Mobly, Anda harus membuat file konfigurasi config.yml untuk menentukan testbed Mobly. Berikut adalah contoh untuk berbagai kasus penggunaan.

File config.yml adegan berbasis tablet

Berikut adalah contoh file config.yml untuk adegan berbasis tablet. Untuk pengujian berbasis tablet, kata kunci TABLET harus ada dalam nama testbed. Selama inisialisasi, test runner Mobly menginisialisasi parameter dalam file dan meneruskannya ke pengujian individual.

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"  # "True" or "False"; quotes needed
      lighting_cntl: <controller-type>  # "arduino" or "None"; quotes needed
      lighting_ch: <controller-channel>
      camera: 0
      foldable_device: "False". # set "True" if testing foldable
      scene: <scene-name>  # if <scene-name> runs all scenes

Untuk memanggil testbed, jalankan tools/run_all_tests.py. Jika tidak ada nilai command line yang menentukan kamera atau adegan, pengujian akan dijalankan dengan nilai file config.yml. Jika ada nilai command line untuk kamera atau adegan, nilai ini akan mengganti nilai di bagian TestParams dari file config.yml. 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=0 scenes=scene_tele
python tools/run_all_tests.py camera=0.4 scenes=4,scene6_tele

Parameter chart_scaling

Di Android 17 dan yang lebih tinggi, parameter chart_scaling disertakan dalam config.yml untuk TEST_BED_TABLET_SCENES. Parameter ini mengatasi masalah penskalaan diagram untuk perangkat kamera tele dengan ruang pandang (FoV) yang lebih luas, mencegah pemangkasan adegan, dan menerapkan fokus perangkat yang tepat selama pengujian.

Nilai yang didukung untuk chart_scaling adalah 1, 0.33, 0.5, atau 0.67, dengan None sebagai default. Pendekatan ini memungkinkan perangkat menggunakan faktor penskalaan optimal yang disesuaikan dengan persyaratan spesifiknya, sehingga mempertahankan pengujian fungsional di semua perangkat.

Jika chart_scaling ditetapkan ke None, pengujian akan otomatis menentukan faktor penskalaan menggunakan chart_scaling_logic. Jika tidak, nilai yang ditentukan dalam config.yml akan digunakan, atau error akan ditandai jika penskalaan tidak tersedia.

Berikut adalah contoh config.yml dengan parameter chart_scaling

TestBeds:
  -   Name: TEST_BED_TABLET_SCENES  # Need 'tablet' in name for tablet scenes
    # Use TEST_BED_MANUAL for manual testing and remove below lines:
    #     - serial <tablet_id>
    #       label: tablet
    # Test configuration for scenes[0:4, 6]
    Controllers:
        AndroidDevice:
          -   serial: <device-id>  # quotes needed if serial id entirely numeric
            label: dut
          -   serial: <tablet-id>  # quotes needed if serial id entirely numeric
            label: tablet
    TestParams:
      brightness: 192
      chart_distance: 22.0
      debug_mode: "False"  # quotes needed
      lighting_cntl: <controller-type>  # can be arduino or "None"
      lighting_ch: <controller-channel>
      camera: <camera-id>
      scene: <scene-name>  # if <scene-name> runs all scenes
      foldable_device: "False"  # "True" if testing foldable device
      chart_scaling: "None"  # use the values available for scene to be tested
      resultstore_upload: "False"  # "True" if results should be uploaded to ResultStore

Penyesuaian sisi pengujian diperlukan untuk mengaktifkan kemampuan penskalaan diagram Camera ITS. Jika pengujian yang Anda gunakan tidak mendukung hal ini, ajukan bug.

Berikut adalah contoh perubahan sisi pengujian dengan parameter chart_scaling.

# load chart for scene
      its_session_utils.load_scene(
          cam, props, self.scene, self.tablet, self.chart_distance,
          chart_scaling=self.chart_scaling)

File config.yml adegan sensor_fusion

Berikut adalah contoh file config_yml untuk pengujian sensor_fusion. Untuk pengujian sensor_fusion, kata kunci SENSOR_FUSION harus ada dalam nama testbed. Android 13 dan yang lebih tinggi hanya mendukung pengontrol Arduino untuk sensor fusion karena pengujian pratinjau dan stabilisasi video. Android 12 mendukung pengontrol Arduino dan Canakit.

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
      rotator_ch: 1
      camera: 0

Untuk menjalankan sensor_fusion pengujian dengan kotak sensor fusion, jalankan:

python tools/run_all_tests.py scenes=sensor_fusion
python tools/run_all_tests.py scenes=sensor_fusion camera=0
python tools/run_all_tests.py scenes=scene_flash,feature_combination
python tools/run_all_tests.py scenes=checkerboard camera=1

File config.yml beberapa testbed

Berikut adalah contoh file config.yml dengan beberapa testbed, testbed tablet, dan testbed sensor_fusion. Testbed yang benar ditentukan oleh adegan 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

File config.yml pengujian manual

Berikut adalah contoh file config.yml untuk pengujian manual. Android 14 dan yang lebih tinggi mendukung pengujian manual untuk semua pengujian, kecuali scene_extensions pengujian. Untuk pengujian manual, kata kunci MANUAL harus ada dalam nama testbed. Selain itu, bagian AndroidDevice tidak dapat menyertakan bagian serial atau label untuk tablet.

TestBeds:
  - Name: TEST_BED_MANUAL
    Controllers:
        AndroidDevice:
          - serial: 8A9X0NS5Z
            label: dut

    TestParams:
      debug_mode: "False"
      camera: 0
      scene: 1

File config.yml pengujian rig Gen2

Berikut adalah contoh file config.yml dari testbed TEST_BED_GEN2. Gunakan testbed ini untuk pengujian scene_ip, yang menggunakan rig Gen2. Contoh berikut menunjukkan parameter testbed saat rig Gen2 tersedia dan scene_ip pengujian tidak dilewati.

Testbeds
  - Name: TEST_BED_GEN2
    # Test configuration for scene_ip/test_default_jca_ip.py
    Controllers:
        AndroidDevice:
          - serial: <device-id>  # quotes needed if serial id entirely numeric
            label: dut
    TestParams:
      debug_mode: "False"  # quotes are needed here
      chart_distance: 30
      rotator_cntl: gen2_rotator   # gen2 rig specific. "None" if gen2 rig not available
      rotator_ch: 0
      camera: <camera-id>
      foldable_device: "False"  # "True" if testing foldable device
      tablet_device: "False"  # "True" if testing tablet device
      lighting_cntl: gen2_lights  # gen2 rig specific. "None" if gen2 rig not available
      lighting_ch: 1
      scene: scene_ip

Contoh berikut menunjukkan parameter testbed saat rig Gen2 tidak tersedia dan pengujian scene_ip dilewati.

Testbeds
  - Name: TEST_BED_GEN2
    # Test configuration for scene_ip/test_default_jca_ip.py
    Controllers:
        AndroidDevice:
          - serial: <device-id>  # quotes needed if serial id entirely numeric
            label: dut
    TestParams:
      debug_mode: "False"  # quotes are needed here
      chart_distance: 30
      rotator_cntl: "None"   # gen2 rig specific. "None" if gen2 rig not available
      rotator_ch: <controller-channel>
      camera: <camera-id>
      foldable_device: "False"  # "True" if testing foldable device
      tablet_device: "False"  # "True" if testing tablet device
      lighting_cntl: "None"  # gen2 rig specific. "None" if gen2 rig not available
      lighting_ch: <controller-channel>
      scene: scene_ip

Untuk menjalankan pengujian scene_ip, gunakan salah satu perintah berikut:

python tests/scene_ip/test_default_jca_ip.py -c config.yml
python tools/run_all_tests.py camera=<camera-id> scenes=scene_ip

Menjalankan pengujian ITS

Bagian ini menjelaskan cara menjalankan pengujian ITS.

Memanggil pengujian

Setelah perangkat, mesin host (termasuk lingkungan), dan adegan fisik disiapkan, jalankan pengujian ITS menggunakan proses berikut.

  1. Buka aplikasi CTS Verifier. Di menu pengujian, pilih Camera ITS Test. Untuk Android 17 dan yang lebih tinggi, pengujian sensor_fusion dan feature_combination berada dalam aktivitas tambahan bernama Camera ITS Sensor Fusion Rig Test.

  2. Dari mesin host, jalankan pengujian ITS dari direktori CameraITS/. Misalnya, untuk perangkat dengan kamera depan dan belakang, jalankan perintah berikut:

    python tools/run_all_tests.py

    Skrip melakukan iterasi melalui kamera dan adegan pengujian berdasarkan file config.yml. Untuk penyiapan proses debug, sebaiknya jalankan salah satu adegan scene2 dengan satu pengujian untuk waktu penyelesaian tercepat.

    Untuk pengujian manual, sebelum mulai menjalankan kumpulan pengujian ITS di setiap adegan, skrip akan mengambil gambar adegan saat ini, menyimpannya sebagai JPEG, mencetak jalur ke JPEG ke konsol, dan meminta pengguna untuk mengonfirmasi apakah gambar tersebut baik. Alur pengambilan dan konfirmasi ini akan berulang hingga pengguna mengonfirmasi bahwa gambar tersebut baik. Berikut adalah pesan dalam alur ini.

    Preparing to run ITS on camera 0
    Start running ITS on camera:  0
    Press Enter after placing camera 0 to frame the test scene:
    scene1_1
    The scene setup should be: A grey card covering at least the   middle 30% of the scene
    Running vendor 3A on device
    Capture an image to check the test scene
    Capturing 1 frame with 1 format [yuv]
    Please check scene setup in /tmp/tmpwBOA7g/0/scene1_1.jpg
    Is the image okay for ITS scene1_1? (Y/N)
    

    Setiap menjalankan skrip, log akan dicetak yang menunjukkan PASS, FAIL, FAIL* atau SKIP untuk setiap pengujian ITS. FAIL* menunjukkan pengujian gagal, tetapi karena pengujian belum diwajibkan, pengujian akan dilaporkan sebagai PASS ke CtsVerifier. SKIP menunjukkan pengujian lulus karena perangkat tidak mengiklankan kemampuan dasar yang sedang diuji. Misalnya, jika perangkat tidak mengiklankan melalui antarmuka kamera bahwa perangkat mendukung DNG, pengujian yang terkait dengan pengambilan file DNG akan dilewati dan dihitung sebagai PASS.

  3. Untuk mengonfirmasi bahwa pengujian telah memenuhi persyaratan pengujian, ketuk tombol tanda centang hijau. Entri Camera ITS Test di menu pengujian CTS Verifier kemudian akan berwarna hijau dan menandakan bahwa ponsel telah lulus Camera ITS.

Mengurangi waktu pengujian

Camera ITS mendukung beberapa fitur untuk mengoptimalkan dan mengurangi waktu eksekusi pengujian secara keseluruhan di seluruh perangkat dan adegan.

Pengujian sub-kamera

Salah satu metode paling efektif untuk mengurangi waktu pengujian kamera adalah mengekspos satu kamera logis ke aplikasi pihak ketiga dengan multi-camera API. Multi-camera API menentukan sistem kamera logis yang terdiri dari kamera utama, umumnya kamera ruang pandang lebar, bersama dengan sub-kamera fisik yang beroperasi pada tingkat zoom yang berbeda, umumnya kamera ultra-lebar dan telefoto. Kamera yang menggunakan multi-camera API mengurangi waktu pengujian secara signifikan dibandingkan dengan mengekspos kamera satu per satu. Meskipun kamera logis utama menjalankan suite pengujian lengkap, sub-kamera menjalankan subset yang ditargetkan dari suite pengujian keseluruhan seperti yang ditunjukkan dalam tabel berikut:

Adegan Pengujian sub-kamera
scene0 test_jitter, test_solid_color_test_pattern
scene1_1 test_burst_sameness_manual, test_dng_noise_model, test_exposure, test_linearity
scene1_2 test_raw_exposure, test_raw_sensitivity, test_yuv_plus_raw
scene2_a test_faces, test_num_faces
scene3 test_flip_mirror
scene4 test_aspect_ratio_and_crop
sensor_fusion test_sensor_fusion

Pengujian DUT paralel

Perangkat yang menjalankan Android 14 atau yang lebih tinggi mendukung pengujian DUT paralel. Hal ini memungkinkan Anda menguji DUT secara paralel dengan beberapa rig untuk mempercepat pengujian secara keseluruhan. Misalnya, pengujian paralel memungkinkan Anda menguji kamera 0 di satu rig dan kamera 1 di rig lain secara bersamaan. Untuk Android 17 dan yang lebih tinggi, karena pengujian Camera ITS dibagi menjadi dua aktivitas, Anda dapat menjalankan pengujian sensor_fusion dan feature_combination di satu DUT, dan pengujian lainnya di DUT lain secara paralel. Semua pengujian untuk sesi pengujian paralel diagregasi pada sesi CTS Verifier di DUT referensi. Anda harus menjalankan pengujian paralel dengan kontrol pencahayaan Arduino, karena kontrol pencahayaan manual tidak didukung dengan pengujian paralel. Pastikan saluran yang berbeda pada pengontrol Arduino yang sama mengontrol pencahayaan untuk setiap rig.

Berikut adalah contoh file config.yml yang menentukan tiga testbed untuk dijalankan secara paralel.

TestBeds:
  - Name: TEST_BED_TABLET_SCENES_INDEX_0
    Controllers:
        AndroidDevice:
          - serial: <device-id-0>
            label: dut
          - serial: <tablet-id-0>
            label: tablet
    TestParams:
      brightness: 192
      chart_distance: 22.0
      debug_mode: "False"
      lighting_cntl: "arduino"
      lighting_ch: <controller-channel-0>
      camera: 0
      scene: <scene-name>  # if <scene-name> left as-is runs all scenes
      foldable_device: "False"

  - Name: TEST_BED_TABLET_SCENES_INDEX_1
    Controllers:
        AndroidDevice:
          - serial: <device-id-1>
            label: dut
          - serial: <tablet-id-1>
            label: tablet
    TestParams:
      brightness: 192
      chart_distance: 22.0
      debug_mode: "False"
      lighting_cntl: "arduino"
      lighting_ch: <controller-channel-1>
      camera: 1
      scene: <scene-name>  # if <scene-name> left as-is runs all scenes
      foldable_device: "False"

  # TEST_BED_SENSOR_FUSION represents testbed index 2
  # Parallel sensor_fusion is currently unsupported due to Arduino requirements
  - Name: TEST_BED_SENSOR_FUSION
    # Test configuration for sensor_fusion
    Controllers:
        AndroidDevice:
          - serial: <device-id>
            label: dut
    TestParams:
      fps: 30
      img_size: 640,480
      test_length: 7
      debug_mode: "False"
      chart_distance: 25
      rotator_cntl: "arduino"
      rotator_ch: <controller-channel-2>
      camera: <camera-id>
      foldable_device: "False"
      tablet_device: "False"
      lighting_cntl: "None"
      lighting_ch: <controller-channel>
      scene: "sensor_fusion"

Untuk menjalankan testbed secara paralel, gunakan perintah berikut:

for i in 0 1 2; do python3 tools/run_all_tests.py testbed_index=$i num_testbeds=3 & done; wait

Mengirim hasil pengujian gabungan

Di Android 17 dan yang lebih tinggi, Anda dapat mengirimkan hasil pengujian Camera ITS gabungan untuk persetujuan build. CTS Verifier memungkinkan Anda menguji beberapa adegan secara bersamaan di beberapa perangkat, dan menggabungkan hasil pengujian dari beberapa laporan CTS Verifier (dari pengujian atau perangkat yang berbeda) ke dalam satu pengiriman terpadu.

Proses pengiriman

Untuk mengirimkan hasil Camera ITS gabungan untuk persetujuan build, ikuti langkah-langkah berikut:

  1. Siapkan perangkat: Kumpulkan dua hingga tiga perangkat yang sedang diuji (DUT) yang semuanya memiliki sidik jari build yang sama persis.
  2. Instal CTS Verifier: Instal CTS Verifier APK terbaru, yang dapat diperoleh dari build explorer yang disediakan.
  3. Jalankan pengujian secara paralel:

    1. Pasang DUT di rig terpisah.
    2. Jalankan adegan Camera ITS yang berbeda di setiap perangkat secara bersamaan.
    3. Pengumpulan laporan: Tarik laporan CTS Verifier setelah setiap pengujian dijalankan. Hal ini mencakup laporan yang adegannya gagal. Hanya jalankan ulang adegan yang gagal pada pengujian berikutnya.
  4. Kirim laporan: Upload beberapa laporan CTS Verifier yang dikumpulkan dari semua perangkat.

  5. Tinjau hasil: Setelah laporan diupload, tinjau hasil gabungan:

    • Bagian Test Analysis menampilkan daftar lengkap semua adegan yang dijalankan.
    • Adegan yang tidak dijalankan atau gagal tercantum di bagian Failed.

      result-aggregation-image-1

      Gambar 1. Dokumentasi adegan yang tidak dijalankan atau gagal.

    • Adegan yang lulus tercantum di bagian Aggregated Pass.

      result-aggregation-image-2

      Gambar 2. Adegan yang dikategorikan sebagai Aggregated Pass

Status persetujuan build

Persetujuan build diberikan setelah semua adegan yang diperlukan berhasil diselesaikan di seluruh laporan gabungan.

Model noise DNG

Perangkat yang mengiklankan kemampuan untuk mengambil RAW atau DNG harus menyediakan model noise dalam metadata hasil pengambilan gambar setiap gambar RAW. Model noise ini harus disematkan ke dalam HAL kamera untuk setiap kamera (misalnya, kamera depan dan belakang) di perangkat yang mengklaim dukungan.

Implementasi model noise

Untuk mengimplementasikan model noise, ikuti langkah-langkah berikut untuk membuat model noise dan menyematkan model ke dalam HAL kamera.

  1. Untuk membuat model noise untuk setiap kamera, jalankan skrip dng_noise_model.py di direktori tools. Tindakan ini akan menghasilkan cuplikan kode C. Untuk mengetahui informasi selengkapnya tentang cara menyiapkan kamera dan lingkungan pengambilan gambar, lihat dokumen DngNoiseModel.pdf di direktori tools.

  2. Untuk mengimplementasikan model noise untuk perangkat, potong dan tempel cuplikan kode C ke dalam HAL kamera.

Validasi model noise

Pengujian ITS otomatis tests/scene1_1/test_dng_noise_model.py memvalidasi model noise dengan memverifikasi bahwa nilai noise untuk pencahayaan dan gain gambar yang disediakan dalam data kamera sudah benar.

Pengujian yang lulus dengan margin (status pengujian PASS*)

Di Android 17 dan yang lebih tinggi, lulus dengan margin (PASS*) menunjukkan bahwa pengujian telah lulus, tetapi metrik performanya sangat dekat dengan nilai minimum yang ditetapkan. Meskipun pengujian secara teknis memenuhi kriteria lulus, kedekatan dengan batas kegagalan menunjukkan perlunya pemeriksaan yang lebih cermat.

Manfaat lulus dengan margin

Status PASS* menawarkan beberapa manfaat:

  • Sistem peringatan dini: Mengidentifikasi pengujian yang hampir gagal, sehingga tim dapat mengatasi masalah sebelum menyebabkan kegagalan.

  • Pengoptimalan proaktif: Mendorong tim untuk mengoptimalkan pengujian dan kode yang berperforma di ujung bawah rentang yang dapat diterima, sehingga meningkatkan stabilitas secara keseluruhan.

  • Peningkatan kualitas: Membantu mempertahankan standar kualitas yang lebih tinggi dengan menandai area yang mungkin rentan terhadap regresi di masa mendatang dengan perubahan kode kecil.

  • Pengurangan waktu proses debug: Dengan menangkap pengujian PASS* lebih awal, waktu dan upaya yang diperlukan untuk men-debug kegagalan penuh di masa mendatang dapat dikurangi secara signifikan.

Detail PASS*

Status PASS* mencakup hal berikut:

  • Menentukan nilai minimum: Nilai minimum lulus dengan margin tertentu ditentukan untuk setiap pengujian yang relevan di Camera ITS.

  • Deteksi otomatis: Sistem otomatisasi pengujian mendeteksi dan mengategorikan pengujian sebagai PASS* berdasarkan nilai minimum yang ditentukan.

  • Mekanisme pemberitahuan: Tim menerima pemberitahuan otomatis untuk pengujian yang ditandai sebagai PASS*, yang mengarahkan mereka untuk menyelidiki pengujian tertentu dan metriknya.

  • Pelaporan: Status lulus dengan margin ditunjukkan dengan jelas dalam laporan dan dasbor pengujian untuk visibilitas yang lebih baik sebagai PASS* dalam laporan ItsTestSummary, mirip dengan Fail* untuk pengujian not_yet_mandated. Pengujian mempertahankan status hijau, karena terus lulus dalam nilai minimum yang ditetapkan, untuk menghindari kebingungan lebih lanjut. Status PASS* hanya berlaku untuk class pengujian, bukan seluruh adegan. Misalnya, Scene_0 dapat dianggap PASS meskipun test_jitter dan test_metadata adalah PASS*.

  • Pemantauan: Data performa dikumpulkan pada pengujian yang lulus dengan margin di perangkat. Hal ini memungkinkan pemantauan peningkatan kamera di masa mendatang yang dilakukan oleh OEM jika pengujian ini bertransisi ke status PASS.

Berikut adalah contoh hasil pengujian dengan PASS*:

INFO:root:Reporting camera 1 ITS results to CtsVerifier
INFO:root:ITS results to CtsVerifier: {'scene0': {'result': 'PASS', 'TEST_STATUS': [{'test': 'test_jitter', 'status': 'PASS*'}, {'test': 'test_metadata', **'status': 'PASS*'**}, {'test': 'test_request_capture_match', 'status': 'PASS'}, {'test': 'test_sensor_events', 'status': 'PASS'}, {'test': 'test_solid_color_test_pattern', 'status': 'PASS'}, {'test': 'test_test_patterns', 'status': 'SKIP'}, {'test': 'test_tonemap_curve', 'status': 'SKIP'}, {'test': 'test_unified_timestamps', 'status': 'PASS'}, {'test': 'test_vibration_restriction', 'status': 'PASS'}], 'mpc_metrics': [], 'performance_metrics': [], 'feature_query_proto': [], 'feature_query_proto_path': [], 'summary': '/tmp/CameraITS_zojk4sdr/cam_id_1/scene0/scene_test_summary.txt', 'start': 1754330630345, 'end': 1754330764534}, 'scene1_1': {'result': 'NOT_EXECUTED'}, 'scene1_2': {'result': 'NOT_EXECUTED'}, 'scene1_3': {'result': 'NOT_EXECUTED'}, 'scene2_a': {'result': 'NOT_EXECUTED'}, 'scene2_b': {'result': 'NOT_EXECUTED'}, 'scene2_c': {'result': 'NOT_EXECUTED'}, 'scene2_d': {'result': 'NOT_EXECUTED'}, 'scene2_e': {'result': 'NOT_EXECUTED'}, 'scene2_f': {'result': 'NOT_EXECUTED'}, 'scene2_g': {'result': 'NOT_EXECUTED'}, 'scene3': {'result': 'NOT_EXECUTED'}, 'scene4': {'result': 'NOT_EXECUTED'}, 'scene6': {'result': 'NOT_EXECUTED'}, 'scene7': {'result': 'NOT_EXECUTED'}, 'scene8': {'result': 'NOT_EXECUTED'}, 'scene9': {'result': 'NOT_EXECUTED'}, 'scene_extensions/scene_hdr': {'result': 'NOT_EXECUTED'}, 'scene_extensions/scene_low_light': {'result': 'NOT_EXECUTED'}, 'scene_tele/scene6_tele': {'result': 'NOT_EXECUTED'}, 'scene_tele/scene7_tele': {'result': 'NOT_EXECUTED'}, 'scene_video': {'result': 'NOT_EXECUTED'}, 'scene5': {'result': 'NOT_EXECUTED'}, 'sensor_fusion': {'result': 'NOT_EXECUTED'}, 'feature_combination': {'result': 'NOT_EXECUTED'}, 'scene_flash': {'result': 'NOT_EXECUTED'}, 'scene_ip': {'result': 'NOT_EXECUTED'}}

Partner dianjurkan untuk:

  • Memantau pemberitahuan PASS*
  • Menyelidiki penyebab utama pengujian PASS*
  • Mengoptimalkan pengujian dan kode yang diidentifikasi sebagai PASS* secara proaktif

Status PASS* bertujuan untuk meningkatkan ketahanan dan keandalan pengujian Camera ITS, sehingga menghasilkan produk yang stabil dan berkualitas tinggi.