Kamera ITS'ye genel bakış

Kamera Görüntüsü Test Paketi (ITS), Android kamera tarafından üretilen görüntüler üzerinde testler ç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 çekim yapmak ve çekimlerde beklenen görüntü verilerinin bulunup bulunmadığını incelemektir. 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 konumundaki CTS Verifier test düzeneğinde yer alır. Cihazlar, üçüncü taraf uygulamaları için kamera çerçevesi tarafından CTS'nin bir alt kümesi olarak tanıtılan desteklenen özelliklere karşılık gelen ITS testlerini geçmelidir.

Kurulum

ITS testlerini çalıştırmak için aşağıdakilerin ayarlanması gerekir:

  • Test edilen cihaz (DUT)
  • Bir ana makine (örneğin, Linux masaüstü veya dizüstü bilgisayar)
  • Kameranın fotoğrafını çektiği sahne

Test edilen cihaz (DUT) kurulumu

DUT'u ayarlamak için aşağıdaki adımları uygulayın:

  1. Test edilen cihazı USB üzerinden bir ana makineye bağlayın.
  2. Ana makinenin ADB üzerinden test cihazına erişmesi için izin verin.
  3. Cihaza CTS Verifier uygulamasını (CtsVerifier.apk) yükleyin. Daha fazla bilgi için CTS Verifier'ı 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
  4. DUT'ta varsayılan kamera uygulamasını başlatın ve test sırasında müdahaleyi önlemek için başlatma sırasında görünen tüm pencereleri temizleyin.

Ana makine kurulumu

ITS, ana makinenin USB üzerinden DUT'ye bağlı olmasını, cihaz kontrolü ve iletişimi için ADB'yi kullanabilmesini ve gerekli yazılımın yüklü olmasını gerektirir.

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

Android SDK Platform Araçları

Android SDK Platform Tools'un yüklü olması ve ADB'nin, ana makinede çalışan kabuğun veya terminalin yürütülebilir yolunda olması gerekir. Android SDK Platform Araçları'nın herkese açık olarak yayınlanan sürümü için SDK Platform Araçları sürüm notlarına bakın.

Python

Python, ana makineye yüklenmiş olmalıdır. Uyumlu sürümlerin desteklenmesi 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 için 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 tablet ayarlamanı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 yüklemesini kontrol eder, PYTHONPATH ortam değişkenini ayarlar ve utils/*.py modüllerinde birim testleri çalıştırır. Terminalde hata mesajı yoksa ortam ITS testlerini çalıştırmaya hazırdır.

Sahne kurulumu

Sahneleri ayarlamak için otomasyon kolaylığı, güvenilirlik ve test verimliliği açısından Camera ITS-in-a-box kurulumunu kullanmanızı öneririz. ITS-in-a-box test düzenekleri, ITS için tüm aydınlatma, ortalama ve grafik değiştirme gereksinimlerini destekler. Ayrıca, kamera uzantıları testleri için ITS-in-a-box gereklidir.

Manuel test için şunlardan emin olun:

  • DUT, tripoda yerleştirilmiş olmalıdır.
  • DUT, her test için doğru sahneye yönlendirilir. (ITS test komut dosyası, yeni bir sahnede testlere başlamadan önce sahne kurulumunu değiştirme istemleri sağlar.)
  • DUT, USB üzerinden ana makineye bağlı olmalıdır.
  • Test çalıştırılırken DUT hareket etmez.
  • Sahne, sabit ve dalgalanmayan bir ışık kaynağıyla aydınlatılıyor. (Titremeye neden olacağından floresan ışık kullanmayın.)

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

Telefonun yönü, kameranın döndürme işlemi yapmadan fotoğraf çekecek şekilde ayarlanmalıdır. Bunu kontrol etmenin en kolay yolu, sahne 2'deki yüz sahnelerini kullanmaktır. Çoğu telefonda, arka kamera için telefon saat yönünün tersine, ön kamera için ise saat yönünde döndürülerek yatay yönde tutulur.

Yapılandırma dosyaları

Mobly test yatağı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 örnek bir config.yml dosyası verilmiştir. Tablet tabanlı testlerde, test yatağı adında TABLET anahtar kelimesi bulunmalıdır. Başlatma sırasında Mobly test çalıştırıcısı, dosyadaki parametreleri başlatır ve bunları tek tek 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. Kameraları veya sahneleri belirten komut satırı değerleri 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. Örneğin:

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=0 scenes=scene_tele
python tools/run_all_tests.py camera=0.4 scenes=4,scene6_tele

sensor_fusion scene config.yml dosyası

Aşağıda, config_yml testleri için bir sensor_fusion dosyası örneği verilmiştir. sensor_fusion testi için SENSOR_FUSION anahtar kelimesi test yatağı adında olmalıdır. Android 13 ve sonraki sürümlerde, önizleme ve video sabitleme testleri nedeniyle yalnızca sensör füzyonu için Arduino denetleyici desteklenir. 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

sensor_fusion testlerini sensör füzyon kutusu ile çalıştırmak için şunu çalıştırın:

python tools/run_all_tests.py scenes=sensor_fusion
python tools/run_all_tests.py scenes=sensor_fusion camera=0
python tools/run_all_tests.py scenes=scene_flash,feature_combination
python tools/run_all_tests.py scenes=checkerboard camera=1

Birden çok test yatağı config.yml dosyası

Aşağıda, birden fazla test yatağı, bir config.yml test yatağı ve bir sensor_fusion test yatağı içeren bir örnek config.yml dosyası verilmiştir. Doğru test yatağı, test edilen sahnelerle 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

config.yml dosyasını manuel olarak test etme

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

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

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

Gen2 rig testing config.yml dosyası

Aşağıda, bir config.yml test yatağına ait TEST_BED_GEN2 dosyası örneği verilmiştir. Bu test yatağı, scene_ip testleri için kullanılır. Bu testlerde Gen2 düzeneği kullanılır. Aşağıdaki örnekte, 2. nesil ekipman kullanılabildiğinde ve scene_ip testleri atlanmadığında test yatağı parametreleri gösterilmektedir.

Testbeds
  - Name: TEST_BED_GEN2
    # Test configuration for scene_ip/test_default_jca_ip.py
    Controllers:
        AndroidDevice:
          - serial: <device-id>  # quotes needed if serial id entirely numeric
            label: dut
    TestParams:
      debug_mode: "False"  # quotes are needed here
      chart_distance: 30
      rotator_cntl: gen2_rotator   # gen2 rig specific. "None" if gen2 rig not available
      rotator_ch: 0
      camera: <camera-id>
      foldable_device: "False"  # "True" if testing foldable device
      tablet_device: "False"  # "True" if testing tablet device
      lighting_cntl: gen2_lights  # gen2 rig specific. "None" if gen2 rig not available
      lighting_ch: 1
      scene: scene_ip

Aşağıdaki örnekte, 2. nesil test düzeneği kullanılamadığında ve scene_ip testleri atlandığında test yatağı parametreleri gösterilmektedir.

Testbeds
  - Name: TEST_BED_GEN2
    # Test configuration for scene_ip/test_default_jca_ip.py
    Controllers:
        AndroidDevice:
          - serial: <device-id>  # quotes needed if serial id entirely numeric
            label: dut
    TestParams:
      debug_mode: "False"  # quotes are needed here
      chart_distance: 30
      rotator_cntl: "None"   # gen2 rig specific. "None" if gen2 rig not available
      rotator_ch: <controller-channel>
      camera: <camera-id>
      foldable_device: "False"  # "True" if testing foldable device
      tablet_device: "False"  # "True" if testing tablet device
      lighting_cntl: "None"  # gen2 rig specific. "None" if gen2 rig not available
      lighting_ch: <controller-channel>
      scene: scene_ip

scene_ip testini çalıştırmak için aşağıdaki komutlardan birini kullanın:

python tests/scene_ip/test_default_jca_ip.py -c config.yml
python tools/run_all_tests.py camera=<camera-id> scenes=scene_ip

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 işlemi kullanarak ITS testlerini çalıştırın.

  1. CTS Verifier uygulamasını açın. Testler menüsünde Camera ITS Test'i seçin.

  2. ITS testlerini ana makinede CameraITS/ dizininden çalıştırın. Örneğin, ön ve arka kameraları 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 geçiş yapar. Hata ayıklama kurulumları için en hızlı sonuçları elde etmek amacıyla scene2 sahnelerinden birini tek bir testle çalıştırmanızı öneririz.

    Manuel test için, her sahnede ITS testleri grubunu çalıştırmaya başlamadan önce komut dosyası mevcut sahnenin fotoğrafını çeker, JPEG olarak kaydeder, JPEG'in yolunu konsola yazdırır ve kullanıcıdan görüntünün iyi olup olmadığını onaylamasını ister. Bu yakalama ve onaylama akışı, kullanıcı görüntünün iyi olduğunu onaylayana kadar döngüde kalır. 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ının her çalıştırılmasında, her ITS testi için PASS, FAIL, FAIL* veya SKIP gösteren bir günlük yazdırılır. FAIL*, testin başarısız olduğunu gösterir ancak test henüz zorunlu olmadığından CtsVerifier'a PASS olarak bildirilir. SKIP, cihaz test edilen temel özelliği duyurmadığı için testin başarılı olduğunu gösterir. Örneğin, bir cihaz kamera arayüzleri üzerinden DNG'yi desteklediğini duyurmuyorsa 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 Verifier test menüsündeki Camera ITS Test girişi yeşile döner ve telefonun Camera ITS'yi geçtiğini gösterir.

Paralel DUT testi

Android 14 veya sonraki sürümlerin yüklü olduğu cihazlarda paralel DUT testi desteklenir. Bu sayede, genel test sürecini hızlandırmak için birden fazla test düzeneğiyle birlikte DUT'ları paralel olarak test edebilirsiniz. Örneğin, paralel test sayesinde aynı anda bir ekipmanda kamera 0'ı, başka bir ekipmanda ise kamera 1'i test edebilirsiniz. Paralel test oturumlarıyla ilgili tüm testler, referans DUT'taki CTS Verifier oturumunda toplanır. Manuel aydınlatma kontrolü, paralel testle desteklenmediğinden Arduino aydınlatma kontrolü ile paralel test yapmanız gerekir. Aynı Arduino denetleyicisindeki farklı bir kanalın her bir düzeneğin aydınlatmasını kontrol ettiğinden emin olun.

Aşağıda, paralel olarak çalıştırılacak üç test yatağını 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 yakalama özelliğini tanıtan cihazlar, her bir RAW çekimin yakalama sonucu meta verilerinde bir gürültü modeli sağlamalıdır. Bu gürültü modeli, desteklediği iddia edilen cihazdaki her kamera (ör. ön ve arka kameralar) için kamera HAL'sine yerleştirilmelidir.

Gürültü modeli uygulama

Gürültü modeli uygulamak için aşağıdaki adımları uygulayarak gürültü modeli oluşturun ve modeli kamera HAL'ına 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, bir C kodu snippet'i oluşturur. Kamerayı ayarlama ve ortamı yakalama hakkında daha fazla bilgi için DngNoiseModel.pdf dizinindeki tools belgesine bakın.

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

Gürültü modeli doğrulama

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