Kamera ITS

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

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

Mempersiapkan

Untuk menjalankan pengujian ITS, hal-hal berikut harus diatur:

  • Perangkat yang sedang diuji (DUT)
  • Mesin host (misalnya, desktop atau laptop Linux)
  • Pemandangan yang dipotret kamera

Penyiapan perangkat dalam pengujian (DUT).

Untuk menyiapkan DUT, ikuti langkah-langkah berikut:

  1. Hubungkan DUT ke mesin host melalui USB.
  2. Berikan izin kepada host untuk mengakses DUT melalui ADB.
  3. Instal aplikasi CTS Verifier ( CtsVerifier.apk ) ke perangkat. Untuk informasi lebih lanjut, 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
    

Pengaturan tuan rumah

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

Untuk menyiapkan mesin host Anda, pastikan perangkat lunak berikut diinstal.

Alat Platform SDK Android

Alat Platform Android SDK harus diinstal dan ADB harus berada di jalur eksekusi shell atau terminal yang berjalan pada mesin host. Untuk versi alat Platform SDK Android yang dirilis secara publik, lihat catatan rilis Alat Platform SDK .

ular piton

Python harus diinstal pada mesin host. Kami merekomendasikan penggunaan distribusi Python yang dibundel untuk memastikan dukungan untuk versi yang kompatibel. Untuk detail tentang versi Python dan paket mana yang akan diinstal untuk rilis tertentu, lihat catatan rilis Camera ITS untuk rilis terkait.

secara seluler

Untuk Android 12 dan lebih tinggi, kerangka pengujian Mobly harus diinstal. Mobly memungkinkan Anda menyiapkan DUT dan tablet grafik di kelas its_base_test . Untuk menginstal kerangka pengujian Mobly, jalankan:

pip install mobly

Pengaturan lingkungan

Untuk menyiapkan lingkungan pengujian, jalankan:

cd CameraITS
source build/envsetup.sh

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

Jika Anda melihat pesan kesalahan libtinfo.so.6: no version information available (required by /bin/sh) saat runtime, jalankan perintah berikut untuk mengganti nama file libtinfo.so.6 .

mv $ENV_DIRECTORY/lib/libtinfo.so.6 $ENV_DIRECTORY/lib/libtinfo.so.6.bak

Pengaturan adegan

Untuk mengatur adegan, kami merekomendasikan penggunaan pengaturan Kamera ITS-in-a-box untuk kemudahan dalam otomatisasi, keandalan, dan efisiensi dalam pengujian. Rig pengujian ITS-in-a-box mendukung semua persyaratan pencahayaan, pemusatan, dan perubahan bagan untuk ITS. Selain itu, ITS-in-a-box diperlukan untuk pengujian ekstensi kamera .

Untuk pengujian manual, pastikan hal berikut:

  • DUT ada di tripod
  • DUT diarahkan ke adegan yang benar untuk setiap tes. (Skrip pengujian ITS memberikan petunjuk untuk mengubah pengaturan adegan sebelum memulai pengujian di adegan baru.)
  • DUT terhubung ke mesin host melalui USB.
  • DUT tidak bergerak selama uji coba.
  • Pemandangan tersebut diterangi dengan sumber cahaya yang stabil dan tidak berfluktuasi. (Jangan gunakan lampu neon karena dapat menimbulkan kedipan.)

Skrip pengujian ITS menampilkan prompt yang meminta pengguna untuk mengubah pengaturan adegan sebelum memulai pengujian di adegan baru.

Orientasi ponsel harus diatur agar kamera mengambil gambar tanpa rotasi. Cara termudah untuk memeriksanya adalah dengan adegan wajah di adegan2. Kebanyakan ponsel memiliki ponsel dalam orientasi lanskap dengan ponsel diputar berlawanan arah jarum jam untuk kamera belakang dan diputar searah jarum jam untuk kamera depan.

File konfigurasi

Dengan menggunakan kerangka Mobly, Anda harus membuat file konfigurasi config.yml untuk menentukan testbed Mobly. Berikut ini adalah contoh untuk kasus penggunaan yang berbeda.

File config.yml adegan berbasis tablet

Berikut ini adalah contoh file config.yml untuk adegan berbasis tablet. Untuk pengujian berbasis tablet, kata kunci TABLET harus ada dalam nama pengujian. Selama inisialisasi, pelari pengujian 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 menjalankan test bed, jalankan tools/run_all_tests.py . Jika tidak ada nilai baris perintah yang menentukan kamera atau pemandangan, pengujian dijalankan dengan nilai file config.yml . Jika ada nilai baris perintah untuk kamera atau pemandangan, nilai tersebut akan menggantikan nilai di bagian TestParams pada file config.yml . Misalnya:

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

file config.yml adegan sensor_fusion

Berikut ini 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 lebih tinggi hanya mendukung pengontrol Arduino untuk fusi sensor karena pratinjau dan pengujian 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 tes sensor_fusion dengan sensor fusion box , jalankan:

python tools/run_all_tests.py scenes=sensor_fusion
python tools/run_all_tests.py scenes=sensor_fusion camera=0

Beberapa file config.yml testbeds

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

Pengujian manual file config.yml

Berikut ini adalah contoh file config.yml untuk pengujian manual. Mulai Android 14, pengujian manual didukung untuk semua pengujian kecuali pengujian scene_extensions . Untuk pengujian manual, kata kunci MANUAL harus ada pada 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

Menjalankan tes ITS

Bagian ini menjelaskan cara menjalankan pengujian ITS.

Memanggil tes

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

  1. Buka aplikasi CTS Verifer. Pada menu tes, pilih Kamera ITS 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 pengaturan debug, sebaiknya jalankan salah satu scene2 dengan satu pengujian untuk penyelesaian tercepat.

    Untuk pengujian manual, sebelum mulai menjalankan serangkaian pengujian ITS pada setiap adegan, skrip mengambil gambar adegan saat ini, menyimpannya sebagai JPEG, mencetak jalur ke JPEG ke konsol, dan meminta pengguna untuk mengonfirmasi apakah gambarnya oke. Ini menangkap dan mengonfirmasi loop aliran hingga pengguna mengonfirmasi bahwa gambarnya baik-baik saja. Berikut pesan-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 eksekusi skrip mencetak log yang menunjukkan PASS, FAIL, atau SKIP untuk setiap pengujian ITS, dengan SKIP menunjukkan bahwa pengujian berhasil karena perangkat tidak mengumumkan kemampuan dasar yang sedang diuji. Misalnya, jika perangkat tidak beriklan melalui antarmuka kamera yang mendukung DNG, pengujian yang terkait dengan pengambilan file DNG akan dilewati dan dihitung sebagai kelulusan.

  3. Untuk menyatakan bahwa tes telah memenuhi persyaratan tes, ketuk tombol tanda centang hijau. Entri Tes Kamera ITS di menu tes CTS Verifier kemudian menjadi hijau dan menandakan ponsel telah lulus Kamera ITS.

Pengujian DUT paralel

Perangkat yang menjalankan Android 14 atau 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. Semua pengujian untuk sesi pengujian paralel dikumpulkan pada sesi Pemverifikasi CTS pada referensi DUT. Anda harus menjalankan pengujian paralel dengan kontrol pencahayaan Arduino, karena kontrol pencahayaan manual tidak didukung dengan pengujian paralel. Pastikan saluran berbeda pada pengontrol Arduino yang sama mengontrol pencahayaan untuk setiap rig.

Berikut ini adalah contoh file config.yml yang mendefinisikan 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 testbeds 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

Model kebisingan DNG

Perangkat yang mengiklankan kemampuan menangkap RAW atau DNG harus menyediakan model noise dalam metadata hasil pengambilan setiap gambar mentah. Model noise ini harus ditanamkan ke dalam HAL kamera untuk setiap kamera (misalnya kamera depan dan belakang) pada perangkat yang diklaim mendukung.

Implementasi model kebisingan

Untuk menerapkan model derau, ikuti langkah-langkah berikut untuk menghasilkan model derau dan menyematkan model tersebut ke HAL kamera.

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

  2. Untuk menerapkan model kebisingan pada perangkat, potong dan tempel cuplikan kode C ke HAL kamera.

Validasi model kebisingan

tests/scene1_1/test_dng_noise_model.py pengujian ITS otomatis memvalidasi model kebisingan dengan memverifikasi bahwa nilai kebisingan untuk eksposur bidikan dan penguatan yang diberikan dalam data kamera sudah benar.