Kamera Görüntü Test Paketi (ITS), Android kamera tarafından üretilen görüntüler üzerinde test çalıştırmaya yönelik 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 ayarlamak için aşağıdaki adımları uygulayın:
- DUT'u USB üzerinden bir ana makineye bağlayın.
- Ana makinenin ADB üzerinden DUT'ya erişmesi için izin verin.
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 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, 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 göz atmak için SDK Platform Tools sürüm notlarına bakın.
Python
Ana makinede Python yüklü 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.
Mobil
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:
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, PYTHONPATH
ortam değişkenini ayarlar ve utils/*.py
modüllerinde birim testleri çalıştırır. Terminalde hata yazdırılmadıysa 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 kutulu kamera ITS kurulumunu kullanmanızı öneririz. ITS için tüm aydınlatma, merkezleme ve grafik değiştirme şartlarını destekleyen kutulu 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 tripoda yerleştirilmiştir.
- DUT, her test için doğru sahneye yönlendirilir. (ITS test komut dosyası, testleri yeni bir sahnede başlatmadan önce sahne kurulumunu değiştirme istemleri 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ı, yeni bir sahnede testleri başlatmadan önce kullanıcıdan 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 platformunu 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 yönelik ö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. Mobly test çalıştırıcı, başlatma sırasında 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. Kameraları veya sahneleri belirten bir 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 füzyon kutusu ile sensor_fusion
testleri yapmak için şu komutu ç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 ç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 amaçlı 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 hariç 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 ayarlandıktan sonra, aşağıdaki işlemi kullanarak ITS testlerini çalıştırın.
CTS Verifer uygulamasını açın. Testler menüsünde Kamera ITS Testi'ni seçin.
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 sahnelerini iteratif olarak işler. Kurulumlarda hata ayıklama için en hızlı geri dönüş süresi içinscene2
sahnelerinden birini tek bir testle çalıştırmanızı öneririz.Manuel testte komut dosyası, her sahnede ITS testleri 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ı her çalıştırıldığında, her bir ITS testi için
PASS
,FAIL
,FAIL*
veyaSKIP
gösteren bir günlük yazdırılır.FAIL*
değeri, testin başarısız olduğunu gösterir ancak test henüz zorunlu kılınmadığından CtsVerifier'aPASS
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 vePASS
olarak sayılır.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 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 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 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 yakalama 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ı izleyerek gürültü modeli oluşturun ve modeli kamera HAL'sine yerleştirin.
Her kamera için bir gürültü modeli oluşturmak amacıyla
tools
dizinindedng_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çintools
dizininde bulunanDngNoiseModel.pdf
dokümanlarına bakın.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.