Kamera ITS

Rangkaian Pengujian Gambar Kamera (ITS) adalah framework untuk menjalankan pengujian pada gambar yang dihasilkan oleh kamera Android. Sasaran 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 mengharuskan kamera diarahkan ke diagram target tertentu atau diserangi cahaya dengan intensitas tertentu.

ITS terletak di harness pengujian CTS Verifier di cts/apps/CameraITS. Perangkat harus lulus pengujian ITS yang sesuai dengan fitur yang didukung dan diiklankan oleh framework kamera untuk aplikasi pihak ketiga sebagai subset dari 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. Berikan izin kepada host untuk mengakses DUT melalui ADB.
  3. Instal aplikasi CTS Verifier (CtsVerifier.apk) ke perangkat. Untuk 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 penyelenggara

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

Untuk menyiapkan mesin host, pastikan software berikut telah diinstal.

Android SDK Platform Tools

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

Python

Python harus diinstal di mesin host. Sebaiknya gunakan paket distribusi Python untuk memastikan dukungan bagi versi yang kompatibel. Untuk mengetahui detail tentang versi Python dan paket 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 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 tampilan

Untuk menyiapkan scene, 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 tampilan yang benar untuk setiap pengujian. (Skrip pengujian ITS memberikan perintah untuk mengubah penyiapan tampilan sebelum memulai pengujian di tampilan baru.)
  • DUT terhubung ke mesin {i>host<i} melalui USB.
  • DUT tidak bergerak selama pengujian berjalan.
  • Adegan diterangi dengan sumber cahaya yang stabil dan tidak berfluktuasi. (Jangan gunakan lampu fluoresen 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 ditetapkan agar kamera mengambil gambar tanpa rotasi. Cara termudah untuk memeriksanya adalah dengan scene 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.

File konfigurasi

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

File config.yml scene berbasis tablet

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

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 test bed, jalankan tools/run_all_tests.py. Jika tidak ada nilai baris perintah yang menentukan kamera atau scene, pengujian akan dijalankan dengan nilai file config.yml. Jika ada nilai command line untuk kamera atau scene, nilai ini akan menggantikan 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 dalam nama pengujian. Android 13 dan yang lebih baru hanya mendukung pengontrol Arduino untuk penggabungan sensor 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 pengujian sensor_fusion dengan kotak penggabungan 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 testbed

Berikut adalah contoh file config.yml dengan beberapa testbed, tablet yang diuji, dan sensor_fusion testbed. Platform pengujian yang benar ditentukan oleh scene 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. Mulai Android 14, pengujian manual didukung untuk semua pengujian kecuali untuk pengujian scene_extensions. 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

Menjalankan pengujian ITS

Bagian ini menjelaskan cara menjalankan pengujian ITS.

Memanggil pengujian

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

  1. Buka aplikasi CTS Verifer. Di menu pengujian, pilih Camera 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 pengujian scene berdasarkan file config.yml. Untuk penyiapan proses debug, sebaiknya jalankan salah satu adegan scene2 dengan satu pengujian untuk mendapatkan hasil tercepat.

    Untuk pengujian manual, sebelum mulai menjalankan kumpulan pengujian ITS di setiap scene, skrip akan mengambil gambar scene saat ini, menyimpannya sebagai JPEG, mencetak jalur ke JPEG ke konsol, dan meminta pengguna untuk mengonfirmasi apakah gambar sudah baik. Alur ambil dan konfirmasi ini akan berulang hingga pengguna mengonfirmasi bahwa gambar sudah 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 kali skrip dijalankan, log akan mencetak PASS, FAIL, FAIL*, atau SKIP untuk setiap pengujian ITS. FAIL* menunjukkan bahwa pengujian gagal, tetapi karena pengujian belum diwajibkan, pengujian akan dilaporkan sebagai PASS ke CtsVerifier. SKIP menunjukkan bahwa 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 menjadi hijau dan menandakan bahwa ponsel telah lulus Camera ITS.

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. Semua pengujian untuk sesi pengujian paralel digabungkan di sesi CTS Verifier pada DUT referensi. Anda harus menjalankan pengujian paralel dengan kontrol pencahayaan Arduino, karena kontrol pencahayaan manual tidak didukung dengan pengujian paralel. Pastikan saluran yang berbeda di 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

Model derau DNG

Perangkat yang memberitahukan kemampuan untuk menangkap RAW atau DNG harus menyediakan model derau dalam metadata hasil perekaman dari setiap foto mentah. Model derau ini harus disematkan ke HAL kamera untuk setiap kamera (misalnya, kamera depan dan belakang) di perangkat yang mengklaim dukungan.

Implementasi model derau

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

  1. Untuk menghasilkan model derau untuk setiap kamera, jalankan skrip dng_noise_model.py di direktori tools. Perintah ini 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 menerapkan model derau untuk perangkat, potong dan tempel cuplikan kode C ke dalam HAL kamera.

Validasi model derau

Pengujian ITS otomatis tests/scene1_1/test_dng_noise_model.py memvalidasi model derau dengan memverifikasi bahwa nilai derau untuk eksposur dan gain pengambilan gambar yang diberikan dalam data kamera sudah benar.