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:
- DUT'u USB üzerinden bir ana makineye bağlayın.
- Ana bilgisayarın ADB üzerinden DUT'a erişmesine izin verin.
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 bilgisayar 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 yatay konumdadır; arka kamera için telefon 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 ç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.
CTS Verifer uygulamasını açın. Testler menüsünde Kamera ITS Testi öğesini seçin.
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çinscene2
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.
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.
Her kamera için bir gürültü modeli oluşturmak amacıyla,
tools
dizinindekidng_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çintools
dizinindekiDngNoiseModel.pdf
belgesine bakın.Cihazın gürültü modelini uygulamak için C kod 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.