Kamera ITS

Kamera Görüntüsü Test Paketi (ITS), Android kamera tarafından üretilen görüntülerde test çalıştırmak için kullanılan bir çerçevedir. ITS'deki her testin genel amacı, kamerayı belirli bir şekilde yapılandırmak, bir veya daha fazla fotoğraf çekmek ve fotoğrafları inceleyerek beklenen görüntü verilerini içerip içermediğini kontrol etmektir. Testlerin çoğunda kameranın belirli bir hedef grafiğe yönlendirilmesi veya belirli bir yoğunlukta aydınlatılması gerekir.

ITS, cts/apps/CameraITS'daki CTS Doğrulayıcı test donanımında bulunur. Cihazlar, CTS'nin alt kümesi olarak üçüncü taraf uygulamaları için kamera çerçevesi tarafından reklamı yapılan desteklenen özelliklere karşılık gelen ITS testlerini geçmelidir.

Kurulum

ITS testlerini çalıştırmak için aşağıdakiler ayarlanmalıdır:

  • Test edilen cihaz (DUT)
  • Ana makine (ör. Linux masaüstü veya dizüstü bilgisayar)
  • Kameranın fotoğrafını çektiği bir sahne

Test edilen cihaz (DUT) kurulumu

DUT oluşturmak için aşağıdaki adımları uygulayın:

  1. DUT'yu USB üzerinden bir ana makineye bağlayın.
  2. Ana makinenin ADB üzerinden DUT'ya erişmesi için izin verin.
  3. CTS Doğrulayıcı uygulamasını (CtsVerifier.apk) cihaza yükleyin. Daha fazla bilgi için CTS Doğrulayıcı'yı kullanma başlıklı makaleyi inceleyin.

    extract root/out/host/linux-x86/cts-verfier/android-cts-verifier.zip
    cd android-cts-verifier
    adb install -r -g CtsVerifier.apk

Ana makine kurulumu

ITS için ana makinenin DUT'a USB üzerinden bağlanması, cihaz kontrolü ve iletişim için ADB'nin kullanılabilmesi ve gerekli yazılımın yüklü olması gerekir.

Ana makinenizi ayarlamak için aşağıdaki yazılımların yüklü olduğundan emin olun.

Android SDK Platform Tools

Android SDK Platform araçları yüklü olmalı ve ADB, ana makinede çalışan kabuğun veya terminalin yürütülebilir yolunda olmalıdır. Android SDK Platform araçlarının herkese açık sürümüne dair bilgi edinmek için SDK Platform Tools sürüm notlarına bakın.

Python

Python, ana makineye yüklenmiş olmalıdır. Uyumlu sürümlerin desteklenmesini sağlamak için paketlenmiş bir Python dağıtımı kullanmanızı öneririz. Belirli bir sürüm için hangi Python ve paket sürümlerinin yükleneceği hakkında ayrıntılı bilgi edinmek üzere ilgili sürümün Kamera ITS sürüm notlarına bakın.

Mobly

Android 12 ve sonraki sürümlerde Mobly test çerçevesi yüklü olmalıdır. Mobly, its_base_test sınıfında bir DUT ve grafik tableti oluşturmanıza olanak tanır. Mobly test çerçevesini yüklemek için şu komutu çalıştırın:

pip install mobly

Ortam kurulumu

Test ortamını ayarlamak için şu komutu çalıştırın:

cd CameraITS
source build/envsetup.sh

Bu komut, Python kurulumunu kontrol eder, PYTHONPATHortam değişkenini ayarlar ve utils/*.py modüllerinde birim testleri çalıştırır. Terminale hata yazdırılmazsa ortam ITS testlerini çalıştırmaya hazırdır.

Sahne kurulumu

Sahneleri ayarlamak için otomasyonda kolaylık, testte güvenilirlik ve verimlilik sağlamak amacıyla Kamera ITS-in-a-box kurulumunu kullanmanızı öneririz. ITS için tüm aydınlatma, merkezleme ve grafik değiştirme şartlarını destekleyen kutu içinde ITS test aparatları Ayrıca, kamera uzantılarının test edilmesi için kutulu ITS gereklidir.

Manuel test için aşağıdakilerden emin olun:

  • DUT bir tripod üzerindedir.
  • DUT, her test için doğru sahneye yönlendirilir. (ITS test komut dosyası, yeni bir sahnede testleri başlatmadan önce sahne ayarını değiştirmek için istemler sağlar.)
  • DUT, ana makineye USB üzerinden bağlanır.
  • DUT, test çalışması sırasında hareket etmez.
  • Sahne, sabit ve dalgalanmayan bir ışık kaynağıyla aydınlatılmalıdır. (Floresan ışık kullanmayın, aksi takdirde titreşim oluşur.)

ITS test komut dosyası, kullanıcıdan yeni bir sahnede testleri başlatmadan önce sahne kurulumunu değiştirmesini isteyen bir istem görüntüler.

Telefon yönü, kameranın dönmeden resim çekeceği şekilde ayarlanmalıdır. Bunu kontrol etmenin en kolay yolu, 2. sahnedeki yüz sahnelerini kullanmaktır. Çoğu telefonda telefon yatay yöndedir ve arka kamera için saat yönünün tersine, ön kamera için ise saat yönünde döndürülür.

Yapılandırma dosyaları

Mobly test ortamını tanımlamak için Mobly çerçevesini kullanarak bir config.yml yapılandırma dosyası oluşturmanız gerekir. Aşağıda farklı kullanım alanlarına ilişkin örnekler verilmiştir.

Tablet tabanlı sahneler için config.yml dosyası

Aşağıda, tablet tabanlı sahneler için bir örnek config.yml dosyası verilmiştir. Tablete dayalı test için test ortamı adında TABLET anahtar kelimesi bulunmalıdır. İlklendirme sırasında Mobly test çalıştırıcı, dosyadaki parametreleri başlatır ve bunları ayrı testlere iletir.

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

Test yatağını çağırmak için tools/run_all_tests.py komutunu çalıştırın. Kamera veya sahne belirten komut satırı değeri yoksa test, config.yml dosya değerleriyle çalıştırılır. Kameralar veya sahneler için komut satırı değerleri varsa bunlar config.yml dosyasının TestParams bölümündeki değerleri geçersiz kılar. Örnek:

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

sensor_fusion sahnesi config.yml dosyası

Aşağıda, sensor_fusion testleri için bir örnek config_yml dosyası verilmiştir. sensor_fusion testi için test ortamı adında SENSOR_FUSION anahtar kelimesi bulunmalıdır. Android 13 ve sonraki sürümler, önizleme ve video sabitleme testleri nedeniyle sensör füzyonu için yalnızca Arduino denetleyiciyi destekler. Android 12, Arduino ve Canakit kontrol cihazlarını destekler.

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

Sensör birleştirme kutusu ile sensor_fusion testleri çalıştırmak için:

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

Birden çok test ortamı için config.yml dosyası

Aşağıda, birden fazla test ortamı, tablet test ortamı ve sensor_fusion test ortamı içeren örnek bir config.yml dosyası verilmiştir. Doğru test platformu, test edilen sahnelere göre belirlenir.

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

Manuel test için config.yml dosyası

Aşağıda, manuel test için bir config.yml dosyası örneği verilmiştir. Android 14'ten itibaren, scene_extensions testleri dışındaki tüm testler için manuel test desteklenir. Manuel test için test ortamı adında MANUAL anahtar kelimesi bulunmalıdır. Ayrıca, AndroidDevice bölümünde tablet için seri numarası veya etiket bölümü bulunamaz.

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

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

ITS testlerini çalıştırma

Bu bölümde ITS testlerinin nasıl çalıştırılacağı açıklanmaktadır.

Testleri çağırma

Cihaz, ana makine (ortam dahil) ve fiziksel sahne kurulduktan sonra aşağıdaki süreci kullanarak ITS testlerini çalıştırın.

  1. CTS Verifer uygulamasını açın. Testler menüsünde Kamera ITS Testi'ni seçin.

  2. Ana makinede, ITS testlerini CameraITS/ dizininden çalıştırın. Örneğin, ön ve arka kamerası olan bir cihaz için aşağıdaki komutu çalıştırın:

    python tools/run_all_tests.py

    Komut dosyası, config.yml dosyasına göre kameralar ve test sahneleri arasında iterasyon yapar. Kurulumlarda hata ayıklama için en hızlı sonuç almak üzere scene2 sahnelerinden birini tek bir testle çalıştırmanızı öneririz.

    Manuel testte, komut dosyası her sahnede ITS testi grubunu çalıştırmaya başlamadan önce mevcut sahnenin fotoğrafını çeker, JPEG olarak kaydeder, JPEG'nin yolunu konsola yazdırır ve kullanıcıdan resmin iyi olup olmadığını onaylamasını ister. Bu fotoğraf çekme ve onaylama akışı, kullanıcı resmin iyi olduğunu onaylayana kadar döngü yapar. Aşağıda bu akıştaki mesajlar verilmiştir.

    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)
    

    Komut dosyasının her çalıştırması, her ITS testi için PASS, FAIL, FAIL* veya SKIP değerini gösteren bir günlük yazdırır. FAIL*, testin başarısız olduğunu gösterir ancak test henüz zorunlu olmadığından CtsVerifier'a PASS olarak raporlanır. SKIP, cihaz test edilen temel özelliğin reklamını yapmadığı için testin geçtiğini gösterir. Örneğin, bir cihaz kamera arayüzleri aracılığıyla DNG'yi desteklediğini belirtmezse DNG dosyası yakalamayla ilgili testler atlanır ve PASS olarak sayılır.

  3. Testlerin test şartlarını karşıladığını onaylamak için yeşil onay işareti düğmesine dokunun. CTS Doğrulayıcı testleri menüsündeki Kamera ITS Testi girişi yeşile döner ve telefonun Kamera ITS'yi geçtiğini gösterir.

Paralel DUT testi

Android 14 veya sonraki sürümleri çalıştıran cihazlar paralel DUT testini destekler. Bu sayede, genel testi hızlandırmak için DUT'ları birden fazla donanımla paralel olarak test edebilirsiniz. Örneğin, paralel test, bir kamerayı aynı anda bir kamerayı test etmenize olanak tanır. Paralel test oturumlarıyla ilgili tüm testler, referans DUT'taki CTS Doğrulayıcı oturumunda toplanır. Manuel ışık kontrolü paralel testte desteklenmediğinden Arduino ışık kontrolüyle paralel test yapmanız gerekir. Her bir kurulumun aydınlatmasını, aynı Arduino kontrol cihazındaki farklı bir kanalın kontrol ettiğinden emin olun.

Aşağıda, paralel olarak çalışacak üç test platformunu tanımlayan örnek bir config.yml dosyası verilmiştir.

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"

Test ortamlarını paralel olarak çalıştırmak için aşağıdaki komutu kullanın:

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

DNG gürültü modeli

RAW veya DNG çekim özelliğinin reklamını yapan cihazlar, her RAW çekimin çekim sonucu meta verilerinde bir gürültü modeli sağlamalıdır. Bu gürültü modeli, destek iddiasında bulunan cihazdaki her kamera (ör. ön ve arka kameralar) için kamera HAL'ine yerleştirilmelidir.

Gürültü modeli uygulaması

Gürültü modeli uygulamak için aşağıdaki adımları uygulayarak gürültü modeli oluşturun ve modeli kamera HAL'ine yerleştirin.

  1. Her kamera için bir gürültü modeli oluşturmak üzere tools dizininde dng_noise_model.py komut dosyasını çalıştırın. Bu işlem, bir C kod snippet'i oluşturur. Kamerayı ve çekim ortamını ayarlama hakkında daha fazla bilgi için tools dizininde bulunan DngNoiseModel.pdf dokümanlarına bakın.

  2. Cihaz için gürültü modelini uygulamak üzere C kod snippet'ini kesip kamera HAL'ine yapıştırın.

Gürültü modeli doğrulaması

tests/scene1_1/test_dng_noise_model.py otomatik ITS testi, kamera verilerinde sağlanan çekim pozlaması ve kazancı için gürültü değerlerinin doğru olduğunu doğrulayarak gürültü modelini doğrular.