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:
- Test edilen cihazı USB üzerinden bir ana makineye bağlayın.
- Ana makinenin ADB üzerinden test cihazına erişmesi için izin verin.
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
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.
CTS Verifier uygulamasını açın. Testler menüsünde Camera ITS Test'i seçin.
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ıylascene2
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*
veyaSKIP
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'aPASS
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 vePASS
olarak sayılır.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.
Her kamera için bir gürültü modeli oluşturmak üzere
tools
dizinindedng_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çinDngNoiseModel.pdf
dizinindekitools
belgesine bakın.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.