Kamera

Kamera Görüntüsü Test Paketi (ITS), bir Android kamera tarafından üretilen görüntüler üzerinde testler yapmaya yönelik bir çerçevedir. ITS'deki her testin genel amacı, kamerayı belirli bir şekilde yapılandırmak, bir veya daha fazla çekim yapmak ve beklenen görüntü verilerini içerip içermediğini görmek için çekimleri incelemektir. Testlerin çoğu, kameranın belirli bir hedef grafiğine yönlendirilmesini veya belirli bir yoğunlukta aydınlatılmasını gerektirir.

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

Kurmak

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

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

Test altındaki cihaz (DUT) kurulumu

Bir DUT ayarlamak için şu adımları izleyin:

  1. DUT'u USB üzerinden bir ana makineye bağlayın.
  2. Ana bilgisayarın ADB üzerinden DUT'a erişmesine izin verin.
  3. CTS Verifier uygulamasını ( CtsVerifier.apk ) cihaza yükleyin. Daha fazla bilgi için bkz. CTS Doğrulayıcıyı Kullanma .

    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, ana makinenin USB üzerinden DUT'a bağlanmasını, cihaz kontrolü ve iletişim için ADB'yi kullanabilmesini ve gerekli yazılımın kurulu olmasını gerektirir.

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

Android SDK Platform Araçları

Android SDK Platform araçları kurulmalı 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ü için bkz. SDK Platform Araçları sürüm notları .

Python

Python'un ana makineye kurulu olması gerekir. Uyumlu sürümlere destek 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ğine ilişkin ayrıntılar için ilgili sürümün Camera ITS sürüm notlarına bakın.

Hareketli

Android 12 ve üzeri için Mobly test çerçevesi kurulmalıdır. Mobly, its_base_test sınıfında bir DUT ve grafik tableti kurmanıza olanak tanır. Mobly test çerçevesini yüklemek için şunu çalıştırın:

pip install mobly

Ortam kurulumu

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

cd CameraITS
source build/envsetup.sh

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

libtinfo.so.6: no version information available (required by /bin/sh) hata mesajını görürseniz, libtinfo.so.6 dosyasını yeniden adlandırmak için aşağıdaki komutu çalıştırın.

mv $ENV_DIRECTORY/lib/libtinfo.so.6 $ENV_DIRECTORY/lib/libtinfo.so.6.bak

Sahne kurulumu

Sahneleri ayarlamak için otomasyon kolaylığı, güvenilirlik ve test verimliliği açısından Kutuda Kamera ITS kurulumunu kullanmanızı öneririz. Kutuda ITS test donanımları, ITS'nin tüm aydınlatma, merkezleme ve grafik değiştirme gereksinimlerini destekler. Ayrıca, kamera uzantılarının testi için ITS-in-a-box 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 testlere başlamadan önce sahne kurulumunu değiştirmek için istemler sağlar.)
  • DUT, ana makineye USB üzerinden bağlanır.
  • DUT, test çalıştırması sırasında hareket etmiyor.
  • Sahne sabit, dalgalanmayan bir ışık kaynağıyla aydınlatılır. (Floresan ışık kullanmayın çünkü bu, titremeye neden olur.)

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

Telefonun yönü, kameranın dönmeden resim çekmesini sağlayacak şekilde ayarlanmalıdır. Bunu kontrol etmenin en kolay yolu sahne2'deki yüz sahneleridir. Çoğu telefonda, telefon arka kamera için saat yönünün tersine, ön kamera için ise saat yönünde döndürülmüş şekilde yatay konumda bulunur.

Yapılandırma dosyaları

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

Tablet tabanlı sahneler config.yml dosyası

Aşağıda tablet tabanlı sahneler için örnek bir config.yml dosyası bulunmaktadır. Tablet tabanlı testler için TABLET anahtar sözcüğünün test ortamı adında olması gerekir. Başlatma sırasında Mobly test çalıştırıcısı dosyadaki parametreleri başlatır ve bunları bireysel testlere aktarır.

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 ç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=1 scenes=2,1,0

sensör_füzyon sahnesi yapılandırması.yml dosyası

Aşağıda, sensor_fusion testleri için örnek bir config_yml dosyası bulunmaktadır. sensor_fusion testi için SENSOR_FUSION anahtar sözcüğünün test ortamı adında olması gerekir. Android 13 ve üzeri, önizleme ve video stabilizasyon testleri nedeniyle sensör füzyonu için yalnızca Arduino denetleyicisini destekler. Android 12, Arduino ve Canakit denetleyicilerini 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 kutusuyla ç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

Çoklu test ortamı config.yml dosyası

Aşağıda birden fazla test ortamı, bir tablet test ortamı ve bir sensor_fusion test ortamı içeren örnek bir config.yml dosyası bulunmaktadır. 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

config.yml dosyasını manuel olarak test etmek

Aşağıda manuel test için örnek bir config.yml dosyası bulunmaktadır. Android 14'ten itibaren, scene_extensions testleri dışındaki tüm testler için manuel test desteklenmektedir. Manuel test için test ortamı adında MANUAL anahtar kelimesi bulunmalıdır. Ayrıca AndroidDevice bölümü bir tablet için seri numarası 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

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 Verifer uygulamasını açın. Testler menüsünde Kamera ITS Testi öğesini seçin.

  2. Ana makinede, CameraITS/ dizininden ITS testlerini ç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 dayalı olarak kameralar ve test sahneleri boyunca yinelenir. Hata ayıklama kurulumlarında, en hızlı geri dönüş için scene2 sahnelerinden birini tek bir testle çalıştırmanızı öneririz.

    Manuel test için, her sahnede bir dizi ITS testini çalıştırmaya başlamadan önce, komut dosyası mevcut sahnenin bir resmini çeker, bunu JPEG olarak kaydeder, JPEG yolunu konsola yazdırır ve kullanıcıdan, eğer varsa onaylamasını ister. görüntü tamam. Bu, kullanıcı görüntünün iyi olduğunu onaylayana kadar akış döngülerini yakalar ve onaylar . Bu akıştaki mesajlar aşağıdadır.

    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ı, her ITS testi için PASS, FAIL veya SKIP'i gösteren bir günlük yazdırır; burada SKIP, cihazın test edilmekte olan temel özelliği duyurmaması nedeniyle testin geçildiğini belirtir. Örneğin, bir cihaz kamera arayüzleri aracılığıyla DNG'yi desteklediğini bildirmezse DNG dosya yakalamayla ilgili testler atlanır ve geçiş olarak sayılır.

  3. Testlerin test gereksinimlerini 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 üzerini çalıştıran cihazlar paralel DUT testini destekler. Bu, genel testi hızlandırmak için DUT'ları birden fazla donanımla paralel olarak test etmenize olanak tanır. Örneğin, paralel test, aynı anda bir donanımdaki kamera 0'ı ve başka bir donanımdaki kamera 1'i test etmenize olanak tanır. Paralel test oturumlarına yönelik tüm testler, referans DUT'taki CTS Doğrulayıcı oturumunda toplanır. Manuel aydınlatma kontrolü paralel testle desteklenmediğinden, Arduino aydınlatma kontrolüyle paralel test yapmalısınız. Aynı Arduino denetleyicisindeki farklı bir kanalın her donanımın aydınlatmasını kontrol ettiğinden emin olun.

Aşağıda paralel olarak çalıştırılacak üç test ortamını tanımlayan örnek bir config.yml dosyası bulunmaktadır.

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 yakalama yeteneğinin reklamını yapan cihazların, her ham çekimin yakalama sonucu meta verilerinde bir gürültü modeli sağlaması gerekir. Bu gürültü modelinin, destek talep eden cihazdaki her bir kamera (örneğin, ön ve arka kameralar) için kamera HAL'sine yerleştirilmesi gerekir.

Gürültü modeli uygulaması

Bir gürültü modeli uygulamak için, bir gürültü modeli oluşturmak ve modeli kamera HAL'sine eklemek için aşağıdaki adımları izleyin.

  1. Her kamera için bir gürültü modeli oluşturmak üzere tools dizinindeki dng_noise_model.py komut dosyasını çalıştırın. Bu, bir C kod pasajının çıktısını alır. Kameranın ve yakalama ortamının nasıl kurulacağı hakkında daha fazla bilgi için tools dizinindeki DngNoiseModel.pdf belgesine bakın.

  2. Cihazın gürültü modelini uygulamak için C kodu pasajını kesip kamera HAL'sine 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 kazanç için gürültü değerlerinin doğru olduğunu doğrulayarak gürültü modelini doğrular.