Camera Image Test Suite (ITS) to platforma do przeprowadzania testów na obrazach wytwarzanych przez kamerę z systemem Android. Ogólnym celem każdego testu w ITS jest skonfigurowanie kamery w określony sposób, wykonanie jednego lub większej liczby zdjęć i sprawdzenie, czy zawierają oczekiwane dane obrazu. Wiele testów wymaga skierowania kamery na konkretną tablicę docelową lub oświetlenia z określoną intensywnością.
ITS znajduje się w wiązce testowej CTS Verifier w cts/apps/CameraITS
. Urządzenia muszą przejść testy ITS odpowiadające obsługiwanym funkcjom reklamowanym przez platformę kamer dla aplikacji innych firm jako podzbiór CTS.
Organizować coś
Aby uruchomić testy ITS, należy skonfigurować następujące elementy:
- Testowane urządzenie (DUT)
- Komputer hosta (na przykład komputer stacjonarny lub laptop z systemem Linux)
- Scena, którą fotografuje kamera
Konfiguracja testowanego urządzenia (DUT).
Aby skonfigurować urządzenie DUT, wykonaj następujące kroki:
- Podłącz urządzenie DUT do komputera hosta przez USB.
- Przyznaj hostowi uprawnienia dostępu do urządzenia DUT przez ADB.
Zainstaluj aplikację CTS Verifier (
CtsVerifier.apk
) na urządzeniu. Aby uzyskać więcej informacji, zobacz Korzystanie z weryfikatora CTS .extract root/out/host/linux-x86/cts-verfier/android-cts-verifier.zip
cd android-cts-verifier
adb install -r -g CtsVerifier.apk
Konfiguracja hosta
ITS wymaga, aby maszyna hosta była podłączona do testowanego urządzenia przez USB, mogła używać ADB do sterowania urządzeniem i komunikacji oraz mieć zainstalowane wymagane oprogramowanie.
Aby skonfigurować komputer hosta, upewnij się, że jest zainstalowane następujące oprogramowanie.
Narzędzia platformy Android SDK
Narzędzia platformy Android SDK muszą być zainstalowane, a ADB musi znajdować się w ścieżce wykonywalnej powłoki lub terminala działającego na komputerze hosta. Informacje o udostępnionej publicznie wersji narzędzi platformy SDK systemu Android można znaleźć w uwagach do wersji narzędzi platformy SDK .
Pyton
Python musi być zainstalowany na komputerze hosta. Zalecamy używanie dołączonej dystrybucji języka Python, aby zapewnić obsługę kompatybilnych wersji. Aby uzyskać szczegółowe informacje na temat wersji języka Python i pakietów do zainstalowania dla konkretnego wydania, zobacz uwagi do wydania Camera ITS dla odpowiedniego wydania.
Moby
W przypadku Androida 12 i nowszych wersji należy zainstalować środowisko testowe Mobly. Mobly pozwala skonfigurować DUT i tablet z wykresami w its_base_test
. Aby zainstalować środowisko testowe Mobly, uruchom:
pip install mobly
Konfiguracja środowiska
Aby skonfigurować środowisko testowe, uruchom:
cd CameraITS
source build/envsetup.sh
To polecenie sprawdza instalację języka Python, konfiguruje zmienną środowiskową PYTHONPATH
i uruchamia testy jednostkowe modułów utils/*.py
. Jeśli na terminalu nie zostaną wydrukowane żadne błędy, środowisko jest gotowe do uruchomienia testów ITS.
Jeśli w czasie wykonywania zostanie wyświetlony komunikat o błędzie libtinfo.so.6: no version information available (required by /bin/sh)
, uruchom następującą komendę, aby zmienić nazwę pliku libtinfo.so.6
.
mv $ENV_DIRECTORY/lib/libtinfo.so.6 $ENV_DIRECTORY/lib/libtinfo.so.6.bak
Konfiguracja sceny
Aby skonfigurować sceny, zalecamy skorzystanie z konfiguracji Camera ITS-in-a-box, która ułatwia automatyzację, niezawodność i wydajność testowania. Urządzenia testowe ITS-in-a-box spełniają wszystkie wymagania ITS dotyczące oświetlenia, centrowania i zmiany map. Do testowania rozszerzeń kamer wymagany jest także moduł ITS-in-a-box.
W przypadku testów ręcznych upewnij się, że:
- DUT stoi na statywie
- Testowany test jest wskazywany na właściwą scenę dla każdego testu. (Skrypt testowy ITS wyświetla monity o zmianę konfiguracji sceny przed rozpoczęciem testów w nowej scenie.)
- Urządzenie testowane jest podłączone do komputera hosta przez USB.
- Testowany test nie porusza się podczas przebiegu testowego.
- Scena jest oświetlona stałym, niezmiennym źródłem światła. (Nie używaj światła fluorescencyjnego, ponieważ powoduje to migotanie.)
Skrypt testowy ITS wyświetla monit z prośbą o zmianę konfiguracji sceny przed rozpoczęciem testów w nowej scenie.
Orientację telefonu należy ustawić tak, aby aparat robił zdjęcia bez obrotu. Najłatwiej to sprawdzić, oglądając sceny twarzy w scenie 2. Większość telefonów ma telefon w orientacji poziomej, z telefonem obróconym w kierunku przeciwnym do ruchu wskazówek zegara w przypadku tylnego aparatu i obróconym zgodnie z ruchem wskazówek zegara w przypadku przedniego aparatu.
Pliki konfiguracyjne
Korzystając ze środowiska Mobly, musisz utworzyć plik konfiguracyjny config.yml
, aby zdefiniować środowisko testowe Mobly. Poniżej znajdują się przykłady różnych przypadków użycia.
Plik config.yml scen dla tabletów
Poniżej znajduje się przykładowy plik config.yml
dla scen na tablety. W przypadku testów na tabletach słowo kluczowe TABLET
musi znajdować się w nazwie stanowiska testowego. Podczas inicjalizacji uruchamiający test Mobly inicjuje parametry w pliku i przekazuje je do poszczególnych testów.
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
Aby wywołać środowisko testowe, uruchom tools/run_all_tests.py
. Jeśli w wierszu poleceń nie ma wartości określających kamery lub sceny, test jest uruchamiany z wartościami pliku config.yml
. Jeśli istnieją wartości wiersza poleceń dla kamer lub scen, zastępują one wartości w sekcji TestParams
pliku config.yml
. Na przykład:
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
Plik konfiguracyjny sceny sensor_fusion.yml
Poniżej znajduje się przykładowy plik config_yml
dla testów sensor_fusion
. W przypadku testów sensor_fusion
słowo kluczowe SENSOR_FUSION
musi znajdować się w nazwie stanowiska testowego. Android 13 i nowsze obsługują tylko kontroler Arduino do łączenia czujników ze względu na testy podglądu i stabilizacji wideo. Android 12 obsługuje kontrolery Arduino i Canakit.
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
Aby uruchomić testy sensor_fusion
ze skrzynką sensor fusion , uruchom:
python tools/run_all_tests.py scenes=sensor_fusion
python tools/run_all_tests.py scenes=sensor_fusion camera=0
Plik config.yml wielu stanowisk testowych
Poniżej znajduje się przykładowy plik config.yml
z wieloma stanowiskami testowymi, stanowiskiem testowym tabletu i stanowiskiem testowym sensor_fusion
. Prawidłowe stanowisko testowe zależy od testowanych scen.
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
Ręczne testowanie pliku config.yml
Poniżej znajduje się przykładowy plik config.yml
do testów ręcznych. Od wersji Androida 14 obsługiwane są testy ręczne dla wszystkich testów z wyjątkiem testów scene_extensions
. W przypadku testów ręcznych słowo kluczowe MANUAL
musi znajdować się w nazwie środowiska testowego. Ponadto sekcja AndroidDevice
nie może zawierać sekcji numeru seryjnego ani etykiety tabletu.
TestBeds:
- Name: TEST_BED_MANUAL
Controllers:
AndroidDevice:
- serial: 8A9X0NS5Z
label: dut
TestParams:
debug_mode: "False"
camera: 0
scene: 1
Przeprowadzanie testów ITS
W tej sekcji opisano sposób uruchamiania testów ITS.
Wywoływanie testów
Po skonfigurowaniu urządzenia, komputera hosta (w tym środowiska) i sceny fizycznej uruchom testy ITS, korzystając z poniższego procesu.
Otwórz aplikację CTS Verifer. W menu testów wybierz opcję Test ITS kamery .
Na komputerze hosta uruchom testy ITS z katalogu
CameraITS/
. Na przykład w przypadku urządzenia z kamerą przednią i tylną uruchom następujące polecenie:python tools/run_all_tests.py
Skrypt iteruje po kamerach i testuje sceny w oparciu o plik
config.yml
. W przypadku konfiguracji debugowania zalecamy uruchomienie jednej ze scenscene2
z pojedynczym testem, aby uzyskać najszybszą realizację.W przypadku testów ręcznych, przed rozpoczęciem wykonywania zestawu testów ITS dla każdej sceny, skrypt wykonuje obraz bieżącej sceny, zapisuje go jako plik JPEG, wypisuje ścieżkę do pliku JPEG na konsoli i prosi użytkownika o potwierdzenie, czy obraz jest w porządku. To przechwytywanie i potwierdzanie pętli przepływu, dopóki użytkownik nie potwierdzi, że obraz jest w porządku. Poniżej znajdują się komunikaty w tym przepływie.
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)
Każde uruchomienie skryptu powoduje wyświetlenie dziennika zawierającego PASS, FAIL lub SKIP dla każdego testu ITS, gdzie SKIP wskazuje, że test został zaliczony, ponieważ urządzenie nie ogłosiło testowanej możliwości. Na przykład, jeśli urządzenie nie ogłasza się za pośrednictwem interfejsów aparatu, że obsługuje format DNG, testy związane z przechwytywaniem plików DNG są pomijane i liczone jako zaliczone.
Aby potwierdzić, że testy spełniły wymagania testu, dotknij przycisku z zielonym znacznikiem wyboru. Pozycja Test ITS aparatu w menu testów CTS Verifier zmieni kolor na zielony, co oznacza, że telefon przeszedł pomyślnie test ITS aparatu.
Równoległe testowanie DUT
Urządzenia z systemem Android 14 lub nowszym obsługują równoległe testy DUT. Umożliwia to testowanie testowanych urządzeń równolegle na wielu platformach, co przyspiesza ogólne testowanie. Na przykład testowanie równoległe umożliwia jednoczesne testowanie kamery 0 w jednym urządzeniu i kamery 1 w innym urządzeniu. Wszystkie testy równoległych sesji testowych są agregowane w sesji CTS Verifier na referencyjnym urządzeniu DUT. Należy przeprowadzić testy równoległe ze sterowaniem oświetleniem Arduino, ponieważ ręczne sterowanie oświetleniem nie jest obsługiwane w przypadku testów równoległych. Upewnij się, że inny kanał na tym samym kontrolerze Arduino steruje oświetleniem każdego zestawu.
Poniżej znajduje się przykładowy plik config.yml
, który definiuje trzy środowiska testowe do równoległego działania.
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"
Aby uruchomić środowiska testowe równolegle, użyj następującego polecenia:
for i in 0 1 2; do python3 tools/run_all_tests.py testbed_index=$i num_testbeds=3 & done; wait
Model hałasu DNG
Urządzenia reklamujące możliwość przechwytywania plików RAW lub DNG muszą udostępniać model szumów w metadanych wyników przechwytywania każdego nieprzetworzonego zdjęcia. Ten model szumu musi być osadzony w warstwie HAL kamery dla każdej kamery (na przykład kamery przedniej i tylnej) na urządzeniu, które twierdzi, że jest obsługiwane.
Implementacja modelu szumu
Aby zaimplementować model szumu, wykonaj poniższe kroki, aby wygenerować model szumu i osadzić model w warstwie HAL kamery.
Aby wygenerować model szumu dla każdej kamery, uruchom skrypt
dng_noise_model.py
w katalogutools
. Spowoduje to wyświetlenie fragmentu kodu C. Więcej informacji na temat konfigurowania kamery i środowiska przechwytywania można znaleźć w dokumencieDngNoiseModel.pdf
w katalogutools
.Aby zaimplementować model szumu dla urządzenia, wytnij i wklej fragment kodu C do warstwy HAL kamery.
Walidacja modelu hałasu
Zautomatyzowany test ITS tests/scene1_1/test_dng_noise_model.py
sprawdza model hałasu, sprawdzając, czy wartości szumu dla ekspozycji i wzmocnienia zdjęcia podane w danych kamery są prawidłowe.