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 adresindeki 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 altındaki cihaz (DUT)
  • Ana makine (ör. Linux masaüstü veya dizüstü bilgisayar)
  • Kameranın fotoğrafını çektiği bir sahne

Cihaz test ediliyor (DUT) kurulumu

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

  1. DUT'u USB üzerinden bir ana makineye bağlayın.
  2. Ana makinenin ADB üzerinden DUT'ya erişmesi için izin verin.
  3. Cihaza CTS Doğrulayıcı uygulamasını (CtsVerifier.apk) 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
    android-cts-verifier

Ana makine kurulumu

ITS, ana makinenin USB üzerinden DUT'ye bağlanmasını gerektirir. cihaz kontrolü ve iletişim için ADB'yi kullanabilmeli ve gerekli yüklü olması gerekir.

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

Android SDK Platform Araçları

Android SDK Platform araçları yüklenmeli ve ADB'nin içinde olması gerekir ana makinede çalışan kabuğun veya terminalin yürütülebilir yolu üretiliyor. Android SDK Platformu araçlarının herkese açık olarak yayınlanan sürümleri için bkz. SDK Platformu Araçları sürüm notları

Python

Python, ana makineye yüklenmiş olmalıdır. Paket halinde sunulan bir Uyumlu sürümlerin desteklenmesini sağlamak için Python dağıtımı. 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.

Mobil

Android 12 ve sonraki sürümlerde Mobly test çerçevesi yüklü olmalıdır. Mobly, DUT ve grafik tableti kurmanızı sağlar. its_base_test sınıf. Mobly test çerçevesini yüklemek için:

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. Yanıt hayır ise: terminale yazdırılırsa ortam, ITS'yi çalıştırmaya hazırdır testler.

Sahne kurulumu

Sahneleri oluşturmak için Kamera ITS-in-a-box kurulumu otomasyon kolaylığı, güvenilirlik ve verimlilik. ITS için tüm aydınlatma, merkezleme ve grafik değiştirme şartlarını destekleyen kutulu ITS test aparatları Ayrıca kutu içinde ITS gerekir. kamera uzantıları teşvik etmek anlamına gelir.

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

  • DUT bir tripod üzerinde
  • DUT, her test için doğru sahneye yönlendirilir. (ITS test komut dosyası, yeni bir modda test başlatmadan önce, sahne ayarının değiştirilmesini sahne.)
  • DUT, ana makineye USB üzerinden bağlanır.
  • Test çalıştırması sırasında DUT 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ü, kamera arka plan rengi olmadan sağlayabilir. Bunu kontrol etmenin en kolay yolu, 2. sahnedeki yüz sahnelerini kullanmaktır. Çoğu telefonda telefon, telefon arka kamera için saat yönünün tersine döndürüldü ve arka kamera için saat yönünde döndürüldü ön kamera.

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 config.yml dosyası

Aşağıda, tablet tabanlı sahneler için bir örnek config.yml dosyası verilmiştir. Örneğin, tablet tabanlı test için, TABLET anahtar kelimesinin test platformu adında olması gerekir. İ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ılın. Ö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 örnek bir config_yml dosyası gösterilmektedir. sensor_fusion testi için SENSOR_FUSION anahtar kelimesi test ortamında olmalıdır dokunun. 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

Şununla sensor_fusion testleri: sensor fusion Box'ı (sensör füzyon kutusu) çalıştırın:

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

Birden fazla testbeds config.yml dosyası

Aşağıda birden çok test yatağı içeren bir config.yml dosya örneği, tablet test platformu ve sensor_fusion test yatağı. Doğru test ortamı, 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 örnek bir config.yml dosyası gösterilmektedir. Android 14'ten itibaren, scene_extensions testleri dışındaki tüm testler için manuel test desteklenir. Manuel test için MANUAL anahtar kelimesi test platformu adında olmalı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 kameraları olan bir cihazda şu komutu kullanın:

    python tools/run_all_tests.py

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

    Manuel test için her sahnede bir grup ITS testi çalıştırmaya başlamadan önce komut dosyası geçerli sahnenin resmini çeker, bunu JPEG olarak kaydeder, JPEG'nin konsola giden yolunu izler ve kullanıcıdan resmin doğru olup olmadığını kontrol etmesini ister. tamam. Bu yakalama ve onaylama akışı, kullanıcı ilk kez resmin normal olduğunu onaylar. Bu akıştaki mesajlar aşağıda 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ı her çalıştırıldığında PASS, FAIL ve Her bir ITS testi için FAIL* veya SKIP. FAIL*, testin başarısız olduğunu gösterir ancak test henüz zorunlu kılınmadığı için test, PASS olarak raporlanır. CtsVerifier'a gönderin. SKIP, cihaz test edilen temel özelliğin reklamını yapmadığı için testin geçtiğini gösterir. Örneğin, Örneğin, bir cihaz reklamı yapılan kamera arayüzleri aracılığıyla reklam yapmıyorsa DNG'yi destekler, DNG dosyası yakalamayla ilgili testler atlanır ve sayılır PASS olarak.

  3. Testlerin test şartlarını karşıladığını onaylamak için yeşil onay işareti düğmesi. 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 video desteği sunuyor DUT testi. Bu sayede DUT'leri birden fazla donanımla paralel olarak test edebilirsiniz. yardımcı olabilir. Örneğin, paralel test ile kamera 0'ı tek bir cihazda test edebilirsiniz düzenek ile kamera 1'i aynı anda kullanmanız gerekiyor. Paralel için tüm testler test oturumları, referans DUT'deki CTS Doğrulayıcı oturumunda toplanır. Manuel aydınlatma olarak Arduino ışıklandırma kontrolü ile paralel test yapmanız gerekir. kontrolü desteklenmez. Farklı bir her cihaz için ışıklandırmayı kontrol eder.

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 yatakları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 bir 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. Örneğin, kamera ve çekim ortamının nasıl kurulacağı hakkında daha fazla bilgi için bkz. tools dizinindeki DngNoiseModel.pdf dokümanı.

  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.