Kamera ITS

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:

  1. Podłącz urządzenie DUT do komputera hosta przez USB.
  2. Przyznaj hostowi uprawnienia dostępu do urządzenia DUT przez ADB.
  3. 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 z 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.

  1. Otwórz aplikację CTS Verifer. W menu testów wybierz opcję Test ITS kamery .

  2. 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 scen scene2 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.

  3. 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.

  1. Aby wygenerować model szumu dla każdej kamery, uruchom skrypt dng_noise_model.py w katalogu tools . Spowoduje to wyświetlenie fragmentu kodu C. Więcej informacji na temat konfigurowania kamery i środowiska przechwytywania można znaleźć w dokumencie DngNoiseModel.pdf w katalogu tools .

  2. 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.