Kamera ITS

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

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

Penyiapan

Untuk menjalankan pengujian ITS, hal berikut harus disiapkan:

  • Perangkat dalam pengujian (DUT)
  • Mesin host (misalnya, desktop atau laptop Linux)
  • Adegan yang difoto oleh 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 selengkapnya 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
    

Penyiapan host

ITS mengharuskan komputer {i>host<i} terhubung ke DUT melalui USB, dapat menggunakan ADB untuk kontrol dan komunikasi perangkat, dan memiliki persyaratan software terinstal.

Untuk menyiapkan mesin host, pastikan software berikut diinstal.

Android SDK Platform Tools

Android SDK Platform Tools harus diinstal dan ADB harus diinstal jalur {i>executable<i} dari {i>shell<i} atau terminal yang berjalan pada {i>host<i} mesin Linux dan Windows. Untuk versi alat Android SDK Platform yang dirilis secara publik, lihat Catatan rilis SDK Platform Tools.

Python

Python harus diinstal di mesin host. Sebaiknya gunakan paket Distribusi Python guna memastikan dukungan untuk versi yang kompatibel. Untuk mengetahui detail tentang Python dan versi paket mana yang akan diinstal untuk rilis tertentu, lihat Catatan rilis Camera ITS untuk rilis terkait.

Mobly

Untuk Android 12 dan yang lebih baru, framework pengujian Mobly harus diinstal. 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 PYTHONPATH variabel lingkungan, dan menjalankan pengujian unit pada modul utils/*.py. Jika tidak {i>error <i}dicetak ke terminal, lingkungan siap menjalankan layanan ITS pengujian.

Penyiapan adegan

Untuk menyiapkan adegan, sebaiknya gunakan atribut Penyiapan Kamera ITS dalam kotak untuk kemudahan dalam otomatisasi, keandalan, dan efisiensi dalam pengujian. ITS-in-a-box rig pengujian mendukung semua persyaratan pencahayaan, pemusatan, dan perubahan diagram untuk ITS. ITS-in-a-box juga diperlukan untuk ekstensi kamera pengujian.

Untuk pengujian manual, pastikan hal berikut:

  • DUT berada di atas tripod
  • DUT diarahkan ke scene yang benar untuk setiap pengujian. (Skrip ujian ITS memberikan prompt untuk mengubah pengaturan scene sebelum memulai pengujian dalam layar berikutnya.)
  • DUT terhubung ke mesin {i>host<i} melalui USB.
  • DUT tidak bergerak selama pengujian.
  • Pemandangan diterangi dengan sumber cahaya yang stabil dan tidak berfluktuasi. (Jangan menggunakan lampu neon karena akan menimbulkan kedipan.)

Skrip pengujian ITS menampilkan perintah yang meminta pengguna untuk mengubah adegan sebelum memulai pengujian dalam scene baru.

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

File konfigurasi

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

File config.yml scene berbasis tablet

Berikut adalah contoh file config.yml untuk suasana berbasis tablet. Sebagai pengujian berbasis tablet, kata kunci TABLET harus ada dalam nama tempat pengujian. Selama inisialisasi, runner pengujian Mobly menginisialisasi parameter dalam file dan meneruskannya ke pengujian individu.

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 tempat tidur pengujian, jalankan tools/run_all_tests.py. Jika tidak ada perintah nilai baris yang menentukan kamera atau suasana, pengujian akan dijalankan dengan config.yml nilai file. Jika ada nilai command line untuk kamera atau suasana, mengganti nilai di bagian TestParams pada 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=1 scenes=2,1,0

File config.yml scene sensor_fusion

Berikut adalah contoh file config_yml untuk pengujian sensor_fusion. Untuk pengujian sensor_fusion, kata kunci SENSOR_FUSION harus berada di tempat pengujian nama. Android 13 dan yang lebih baru hanya mendukung Arduino pengontrol untuk penggabungan sensor berkat 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 pengujian sensor_fusion dengan kotak fusi sensor, 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 adalah contoh file config.yml dengan beberapa tempat pengujian, tablet diuji dan sensor_fusion diuji. Tempat pengujian yang benar ditentukan dengan 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. Dari Android 14, manual pengujian didukung untuk semua pengujian kecuali untuk scene_extensions pengujian. Untuk pengujian manual, kata kunci MANUAL harus berada dalam nama tempat pengujian. Selain itu, bagian AndroidDevice tidak boleh 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 pengujian ITS

Bagian ini menjelaskan cara menjalankan pengujian ITS.

Memanggil pengujian

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

  1. Buka aplikasi CTS Verifer. Di menu pengujian, pilih Ujian ITS Kamera.

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

    python tools/run_all_tests.py
    

    Skrip ini melakukan iterasi melalui kamera dan menguji adegan berdasarkan File config.yml. Untuk penyiapan proses debug, sebaiknya jalankan satu dari scene2 scene dengan satu pengujian untuk penyelesaian tercepat.

    Untuk pengujian manual, sebelum mulai menjalankan rangkaian tes ITS di setiap adegan, skrip mengambil gambar adegan saat ini, menyimpannya sebagai JPEG, mencetak jalur ke JPEG ke konsol, dan meminta pengguna untuk mengonfirmasi apakah bukan masalah. Alur tangkapan dan konfirmasi ini akan diulang hingga pengguna yang memastikan bahwa gambar sudah benar. 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 eksekusi skrip mencetak log yang menunjukkan PASS, FAIL, FAIL* atau SKIP untuk setiap pengujian ITS. FAIL* menunjukkan bahwa pengujian gagal tetapi karena pengujian belum dimandatkan, pengujian akan dilaporkan sebagai PASS ke CtsVerifier. SKIP menunjukkan bahwa pengujian berhasil karena perangkat tidak memberitahukan kemampuan dasar yang sedang diuji. Sebagai jika perangkat tidak muncul melalui antarmuka kamera yang mendukung DNG, pengujian terkait pengambilan file DNG dilewati dan dihitung sebagai PASS.

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

Pengujian DUT paralel

Perangkat yang menjalankan Android 14 atau dukungan yang lebih tinggi paralel pengujian DUT. Hal ini memungkinkan Anda menguji DUT secara paralel dengan beberapa rig untuk meningkatkan kecepatan pengujian secara keseluruhan. Misalnya, pengujian paralel memungkinkan Anda menguji kamera 0 dalam satu rig dan kamera 1 di perangkat lain pada saat yang sama. Semua pengujian untuk paralel sesi pengujian digabungkan pada sesi CTS Verifier pada DUT referensi. Anda harus menjalankan pengujian paralel dengan kontrol pencahayaan Arduino, sebagai pencahayaan manual tidak didukung dengan pengujian paralel. Pastikan bahwa saluran pada {i>controller<i} Arduino yang sama mengontrol pencahayaan untuk setiap rig.

Berikut adalah contoh file config.yml yang menentukan tiga tempat pengujian yang akan 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

Model noise DNG

Perangkat yang memberitahukan kemampuan untuk menangkap RAW atau DNG harus memberikan derau dalam metadata hasil pengambilan dari setiap gambar mentah. Model noise ini harus disematkan ke HAL kamera untuk setiap kamera (misalnya, dan kamera belakang) di perangkat yang mengklaim dukungan.

Implementasi model derau

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

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

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

Validasi model derau

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