Informacje o wersji Androida 11 Camera Image Test Suite

Na tej stronie znajdziesz podsumowanie zmian w pakiecie testów obrazu z aparatu (ITS) w Androidzie 11. Zmiany należą do tych kategorii:

Zmiany sprzętowe

Android 11 wprowadza kilka zmian w sprzęcie, aby obniżyć koszty i zwiększyć dostępność. Zmiany te należą do tych kategorii:

Dodatkowy producent

Firma Rahi Systems może produkować obudowy testowe ITS, podobnie jak nasz dotychczasowy dostawca, MYWAY design. Informacje o firmie w przypadku kwalifikujących się dostawców są następujące:

Ujednolicone metody produkcji

Obudowa testowa ITS-in-a-box rev1 o normalnym polu widzenia (RFoV) została przeprojektowana tak, aby korzystać z metod produkcji stosowanych w przypadku obudów testowych o szerokim polu widzenia (WFoV)z fuzją czujników. Funkcjonalność jest identyczna, a dla uproszczenia projekt jest oznaczany jako rev1a. Nowa konstrukcja umożliwia producentom przechowywanie jednego rodzaju plastiku do produkcji wszystkich obudów testowych. Dodatkowo uchwyty na tablet i lampę zostały przeprojektowane, aby można było w nich umieszczać różne tablety i listwy świetlne LED.

Najnowsze opisy i rysunki techniczne znajdziesz w tych artykułach: RFoV box (rev1a)WFoV box (rev2.9).

Więcej opcji tabletów

Do listy zalecanych tabletów dodaliśmy m.in. Samsunga Galaxy Tab A 10.1 i Chuwi Hi9 Air 10.1. Ważne jest, aby tablet nie miał modulacji szerokości impulsu (PWM) do regulacji jasności ekranu, co pozwoli wyeliminować pasmowanie na zarejestrowanych obrazach.

Najnowsze informacje o zalecanych tabletach znajdziesz w wymaganiach dotyczących tabletów.

Ograniczone otwieranie tabletu

Aby umożliwić korzystanie z tabletu Galaxy Tab A 10.1, otwór na tablet w obudowach testowych RFoV (rev1a) i WFoV (rev2) został nieznacznie zmniejszony. Wersje, które odzwierciedlają te zmiany, to rev1a.1 i rev2.9. Rysunki te znajdziesz w sekcjach RFoV box (rev1a)WFoV box (rev2.9).

Nowy kontroler fuzji czujników

Sprzęt kontrolera fuzji czujników został przeprojektowany, aby ułatwić produkcję. Nowy kontroler jest oparty na Arduino i ma niestandardową płytkę shield, która jest montowana na Arduino. Rysunek 1 przedstawia osłonę, a rysunek 2 – rysunek techniczny obudowy. Nowy sterownik jest zasilany pojedynczym zasilaczem 5 V, który zasila silnik bezpośrednio. Elektronika jest sterowana w całości za pomocą złącza USB. Oddzielny zasilacz zapewnia całkowitą izolację między elektroniką sterującą a serwomotorem. Dodatkowo jeden kontroler może sterować maksymalnie 6 serwomotorami.

Widok z góry na Arduino

Rysunek 1. Widok z góry na płytkę rozszerzającą Arduino

Projektowanie ogrodzeń

Rysunek 2. Projektowanie ogrodzeń

Android 11 jest wstecznie zgodny z obecnymi kontrolerami. Aby wywołać testowanie za pomocą kontrolera opartego na Arduino, użyj tego polecenia:

python tools/run_all_tests.py device=# camera=# rot_rig=arduino:1 scenes=sensor_fusion

Pierwszy poziom interfejsu API

W Androidzie 10 testy ITS są oznaczone symbolami MANDATEDNOT_YET_MANDATED. Aby urządzenie mogło zostać wprowadzone na rynek jako urządzenie z Androidem 10, musi przejść wszystkie MANDATED testy. Testy NOT_YET_MANDATED mogą się nie powieść, ale w raportach narzędzia CTS Verifier są traktowane jako PASS. Wymaganie dotyczące MANDATEDtestówMANDATED dotyczy też uaktualnionych urządzeń. Wymóg, aby uaktualnione urządzenia przechodziły wszystkie MANDATED testy, spowodował opóźnienie w przekształcaniu testów w MANDATED testy, ponieważ starsze urządzenia również muszą je przejść.

W Androidzie 11 testy MANDATED są ograniczone przez flagę pierwszego poziomu interfejsu API z właściwości telefonu. W przypadku urządzeń, które przechodzą na Androida 11, testy są przeprowadzane jako NOT_YET_MANDATED, co oznacza, że test może się nie powieść, ale w CtsVerifier.apk zostanie zarejestrowany jako PASS.

Przykład:

  • W Androidzie 11 test test_channel_saturation jest MANDATED na urządzeniach z interfejsem API na poziomie wyższym niż 29.
  • W Androidzie 10 test test_channel_saturation jest MANDATED na wszystkich urządzeniach.

Sprawdzanie oświetlenia sceny

W Androidzie 11 oświetlenie sceny jest weryfikowane przez analizę jasności w rogach sceny. Wszystkie sceny ręczne są sprawdzane pod kątem oświetlenia, a sceny na tabletach są sprawdzane pod kątem kamer RFoV na stanowisku testowym RFoV i kamer WFoV na stanowisku testowym WFoV. Jeśli poziom oświetlenia jest niewystarczający, zgłaszany jest błąd i testowanie się nie powiedzie.

Zmiany nazw scen

W Androidzie 10 scena 1 stanowi większość testów i duży odsetek całkowitego czasu testowania. Jeśli którykolwiek test w scenie 1 się nie powiedzie, całą scenę należy uruchomić ponownie. Ponowne uruchomienie całej sceny z założenia zmniejsza liczbę testów granicznych. W Androidzie 11 czas ponownego uruchomienia jest krótszy, ponieważ scena 1 jest podzielona na dwie sceny: scena1_1 i scena1_2.

W tabeli poniżej znajdziesz zestawienie czasów testów tylnego aparatu Pixela 4 w różnych scenach. Liczba testów jest dzielona w celu wyrównania czasu testowania, a nie liczby testów.

Dodatkowo nastąpi oczyszczenie nazw. Scena 2 jest podzielona literami, a scena 1 – cyframi. Nazewnictwo różnych rozszerzeń:

  • Sceny z tym samym wykresem, ale różnymi testami: *_1,2,3
  • Sceny z różnymi wykresami, ale tymi samymi testami: *_a,b,c
Sceneria Liczba testów Czas pracy Pixela 4 (min:s)
0 11 1:12
1_1 22 17:12
1_2 13 5:20
2_a 5 3:22
2_b 1 0:24
2_c 1 0:24
3 6 2:04
4 2 2:46

Sprawdź zmiany

Testy zaktualizowane do korzystania z pierwszego poziomu interfejsu API

W Androidzie 11 testy w tabeli poniżej zostały zaktualizowane, aby używać flagi pierwszego poziomu API. Wszystkie te testy używają pierwszego poziomu interfejsu API 29, z wyjątkiem testu test_tonemap_curve, który używa pierwszego poziomu interfejsu API 30.

Sceneria Nazwa testu Pierwszy poziom interfejsu API Opis
0 test_tonemap_curve 30 Upewnij się, że potok ma odpowiednie dane wyjściowe kolorów z liniowym mapowaniem tonalnym i idealnym wejściem obrazu (zależy od test_test_patterns).
1 test_ae_precapture_trigger 29 Testowanie automatu stanu AE podczas korzystania z wyzwalacza wstępnego przechwytywania. Sprawdź, czy wyłączone wyzwalanie wstępnego przechwytywania AE nie ma wpływu.
test_channel_saturation 29 Upewnij się, że kanały RGB osiągają podobne wartości nasycenia, aby wyeliminować odcień w nasyconych regionach.
2_a/b/c test_num_faces 29 Zwiększanie różnorodności wieku w scenach z twarzami.

Testy ze zmianami

Testy w tej tabeli zostały zaktualizowane w Androidzie 11. Zmiany są opisane w kolumnie Opis zmian.

Sceneria Nazwa testu Pierwszy poziom interfejsu API Opis zmian
1 test_burst_sameness_manual 30 Zmniejsz tolerancję do 2%.
4 test_aspect_ratio_and_crop 30 Zmień, aby działać na urządzeniach z ograniczeniami.
test_multi_camera_alignment 30 Jeśli nagrywanie z wielu kamer nie jest obsługiwane, przełączaj się między kamerami pojedynczo. Zmiana logiki wyboru kamery, aby uwzględniała systemy z 3 i 4 aparatami, oraz pomijanie aparatów monochromatycznych, głębi i IR.

Nowe testy

Testy w tabeli poniżej są włączone w Androidzie 11. Podsumowanie testów znajdziesz w tabeli, a szczegółowe opisy w kolejnych sekcjach.

Sceneria Nazwa testu Pierwszy poziom interfejsu API Opis
0 test_vibration_restrictions 30 Upewnij się, że podczas robienia zdjęć nie są aktywowane alerty ani wibracje.
2_a test_jpeg_quality 30 Sprawdź, czy tabele kwantyzacji zmniejszają kompresję, aby zwiększyć jakość JPEG.
2_d/2_e test_num_faces 30 Zwiększ różnorodność wieku osób.
2_e test_continuous_picture 30 Upewnij się, że 3A jest w android.control.afAvailableModes = CONTINUOUS_PICTURE.
zmień test_scene_change 31 android.control.afSceneChange potwierdzane po zmianie sceny.
6 test_zoom 30 Testuj „android.control.zoomRatioRange”.

scene0/test_vibration_restriction

Ten test nie wymaga konkretnej sceny, ale testowane urządzenie musi być umieszczone na twardej powierzchni lub zamontowane na niej. Obejmuje to montaż w obudowach testowych ITS-in-a-box.

Asserts

  • Brak wibracji podczas korzystania z aparatu

scene2_a/test_jpeg_quality

Metoda

Poszczególne części pliku JPEG są definiowane przez 2-bajtowe znaczniki. Więcej informacji znajdziesz w artykule JPEG.

Test wyodrębnia macierze kwantyzacji z obrazu JPEG. Znacznik macierzy kwantyzacji w pliku JPEG to sekwencja [255, 219]. Gdy znacznik zostanie znaleziony, dwa następne elementy listy będą miały ten rozmiar. Marker rozmiaru DQT JPEG ma zwykle wartość [0, 132] = 256*0+132 = 132, co odpowiada rozmiarowi danych DQT w pliku JPEG. Osadzone dane mają postać: [255, 219, 0, 132, 0 (znacznik luminancji), macierz luminancji 8x8, 1 (znacznik chrominancji), macierz chrominancji 8x8].

Znacznik 0 dla macierzy luminancji i znacznik 1 dla macierzy chrominancji są wyświetlane w sposób spójny na wielu urządzeniach, w tym na telefonach, które rozdzielają te 2 macierze na osobne sekcje DQT w pliku JPEG. Macierze luminancji mają zwykle większą różnorodność wartości niż macierze chrominancji, ponieważ ludzkie oko jest bardziej wrażliwe na luminancję niż na chrominancję, a obrazy JPEG uwzględniają tę różnicę.

Przykładowe wyodrębnione macierze luminancji i chrominancji dla współczynników jakości 85 i 25 w przypadku tylnego aparatu Pixela 4 rejestrującego scenę2_a za pomocą platformy testowej ITS są pokazane poniżej. Wartości macierzy znacznie rosną (co oznacza zwiększoną kompresję) w przypadku ustawienia niższej jakości. Te matryce są drukowane ze skryptem tylko wtedy, gdy zastosowana jest flaga debug=True. Zwróć uwagę na większe różnice w wartościach w macierzach luminancji w porównaniu z macierzami chrominancji.

    luma matrix (quality = 85)    chroma matrix (quality = 85)

    [[ 5  3  4  4  4  3  5  4]    [[ 5  5  5  7  6  7 14  8]
     [ 4  4  5  5  5  6  7 12]     [ 8 14 30 20 17 20 30 30]
     [ 8  7  7  7  7 15 11 11]     [30 30 30 30 30 30 30 30]
     [ 9 12 17 15 18 18 17 15]     [30 30 30 30 30 30 30 30]
     [17 17 19 22 28 23 19 20]     [30 30 30 30 30 30 30 30]
     [26 21 17 17 24 33 24 26]     [30 30 30 30 30 30 30 30]
     [29 29 31 31 31 19 23 34]     [30 30 30 30 30 30 30 30]
     [36 34 30 36 28 30 31 30]]     [30 30 30 30 30 30 30 30]]

    luma matrix (quality = 25)            chroma matrix (quality = 25)

    [[ 32  22  24  28  24  20  32  28]    [[ 34  36  36  48  42  48  94  52]
     [ 26  28  36  34  32  38  48  80]     [ 52  94 198 132 112 132 198 198]
     [ 52  48  44  44  48  98  70  74]     [198 198 198 198 198 198 198 198]
     [ 58  80 116 102 122 120 114 102]     [198 198 198 198 198 198 198 198]
     [112 110 128 144 184 156 128 136]     [198 198 198 198 198 198 198 198]
     [174 138 110 112 160 218 162 174]     [198 198 198 198 198 198 198 198]
     [190 196 206 208 206 124 154 226]     [198 198 198 198 198 198 198 198]
     [242 224 200 240 184 202 206 198]]     [198 198 198 198 198 198 198 198]]

Ilustracja 3 przedstawia średnie wartości macierzy dla tylnego aparatu Pixela 4 w porównaniu z jakością JPEG. Wraz ze wzrostem jakości JPEG zmniejsza się poziom kompresji (średnia macierzy DQT luminancji/chrominancji).

Średnie wartości matryc Pixela 4

Rysunek 3. Średnie wartości macierzy DQT luminancji/chrominancji tylnego aparatu Pixela 4 w porównaniu z jakością JPEG

Asserts

  • W przypadku wartości [25, 45, 65, 86] wzrost jakości o 20 jednostek powoduje zmniejszenie kwantyzacji o 20% w przypadku średnich macierzy.
  • Ładunki macierzy DQT to liczby kwadratowe.

Na ilustracji 4 widać przykład telefonu, który nie przeszedł testu. Pamiętaj, że w przypadku obrazów o bardzo niskiej jakości (jpeg.quality < 50) nie następuje zwiększenie kompresji w macierzy kwantyzacji.

Przykład nieudanego testu

Rysunek 4. Przykład nieudanego testu

scene2_d/e test_num_faces

Dodaliśmy 2 nowe sceny wykrywania twarzy, aby zwiększyć różnorodność twarzy w sprawdzaniu algorytmu wykrywania twarzy. Po wielokrotnym przetestowaniu wielu kamer najtrudniejsza do rozpoznania twarz powinna być twarzą po lewej stronie w scenie2_d. W szczególności model ma kapelusz i brodę, co jest nowością w scenach z twarzami. Nowe sceny są widoczne na rysunkach 5 i 6.

scene2_d

Rysunek 5. scene2_d

scene2_e

Rysunek 6. scene2_e

Asserts

  • num_faces == 3

scene2_e/test_continuous_picture

Metoda

Test test_continuous_picture korzysta ze sceny scene2_e, ale można go włączyć w przypadku dowolnej sceny z twarzami. W tym teście rejestrowanych jest 50 klatek w rozdzielczości VGA. W żądaniu przechwytywania najpierw ustawiana jest wartość android.control.afMode = 4 (CONTINUOUS_PICTURE).

Oczekuje się, że system 3A ustabilizuje się po 50 klatkach.

Asserts

  • 3A jest w stanie zbieżnym na końcu rejestrowania.

scene_change/test_scene_change

Metoda

Włączono nowy test, aby sprawdzić, czy flaga android.control.afSceneChange jest potwierdzana przy zmianie sceny. Zmiana sceny polega na wyświetleniu sceny z twarzą na tablecie, a następnie włączeniu i wyłączeniu tabletu. Scena ponownie wykorzystuje scenę scene2_e, ale znajduje się w osobnej scenie ze względu na wymagane sterowanie tabletem.

W przypadku testowania ręcznego zmianę sceny można uzyskać, machając dłonią przed aparatem.

Rysunek 7 przedstawia diagram czasowy testu. Czas między wyłączeniem ekranu a zrobieniem zrzutu ekranu jest dostosowywany na podstawie wyników poprzednich zrzutów.

Diagram czasowy dla test_scene_change

Rysunek 7. Diagram czasowy dla test_scene_change

Warunki przesunięcia:

  • Jeśli nastąpi zmiana sceny i afSceneChange == 1, test zwróci PASS.
  • Jeśli nastąpi zmiana sceny i afSceneChange == 0, zmiana sceny przesunie się o 5 klatek wcześniej, aby dać więcej czasu na potwierdzenie afSceneChange.
  • Jeśli nie ma zmiany sceny i afSceneChange == 1, test zwraca wartość FAIL.
  • Jeśli nie ma zmiany sceny i afSceneChange == 0, zmiana sceny przesuwa się o 30 klatek wcześniej, aby uzyskać zmianę sceny podczas rejestrowania.

Asserts

  • Przełączniki ekranu (sceny).
  • Wartość flagi afSceneChange mieści się w zakresie [0, 1].
  • Jeśli nie ma zmiany sceny, 3A zbiega się (funkcjonalnie identyczne z test_continuous_picture).
  • Jeśli afSceneChange == 1, jasność musi się zmieniać w scenie.
  • PASS w 6 próbach, przy czym czas jest dostosowywany na podstawie poprzednich wyników.

scene6/test_zoom

Metoda

Do testowania android.control.zoomRatioRange potrzebna jest nowa scena, ponieważ w dotychczasowych scenach nie ma wystarczająco małego obiektu, który można by powiększyć (sceny [1, 2, 4]), lub scena zawiera wiele obiektów, których nie można łatwo zidentyfikować, co utrudnia wyodrębnianie cech (scena 3).

Ilustracja 8 przedstawia nową scenę z regularną siatką kół. Układ okręgów zmniejsza wymagania dotyczące wyśrodkowania urządzenia/tabeli i umożliwia umieszczenie okręgu zawsze w pobliżu środka zarejestrowanego obrazu. Na tej scenie tablicę w całości pokrywa siatka 9 x 5 okręgów z czarnym obramowaniem. Jeden z nich jest zastąpiony kwadratem w prawym górnym rogu, aby wskazać orientację. Rozmiary kół mają cechę o powierzchni około 7500 pikseli (radius=50pixels) w przypadku czujnika 4000 x 3000 pikseli, który rejestruje obraz z polem widzenia (FoV) około 80 stopni.

test_zoom scene

Rysunek 8. Scena test_zoom

Okrąg wyszukiwania na Pixelu 4

Rysunek 9. Pixel 4 cam[0] zoom = [1, 3.33, 5.67, 8] images with found circle

Ilustracja 9 przedstawia zdjęcia zrobione tylnym aparatem Pixela 4, gdy zoom zwiększa się od 1 do 8x w 4 krokach. Ten zestaw zdjęć został zrobiony bez szczególnej dbałości o wyśrodkowanie, z wyjątkiem użycia otworu testowego telefonu z 2 otworami, aby umożliwić testowanie przedniego i tylnego aparatu. Odsunięcie od środka jest oczekiwane i widoczne, ponieważ tablet z wykresem znajduje się nieco na lewo od środka. Dodatkowo wykres wydaje się wystarczający do testowania przy powiększeniu większym niż 8x.

Znajdowanie kręgów

Test obejmuje metodę find_circle(), która za pomocą findContours znajduje wszystkie kontury i zawęża wyszukiwanie konturów do wybranych okręgów, testując:

  • Kontury muszą mieć obszar większy niż 10 pikseli.
  • Kontury muszą mieć NUM_PTS >= 15.
  • Kontury muszą mieć czarne środki.
  • Kontury muszą przypominać okrąg, czyli ich powierzchnia musi być zbliżona do powierzchni konturu pi*r2.

Zakres testu

android.control.zoomRatioRange dzieli się na 10 kroków.

  • [1, 7] testuje [1, 1.67, 2.33, 3, 3.67, 4.33, 5, 5.67, 6.33, 7]

Powiększanie zostanie zatrzymane, jeśli znalezione kółko dotknie krawędzi obrazu. Sprawdzamy, czy podczas testu osiągnięto odpowiedni poziom powiększenia (10-krotny).

Asserts

  • Przy każdym ustawieniu powiększenia znajduje się co najmniej 1 okrąg.
  • Testowane jest 10-krotne powiększenie lub maksymalnie android.control.zoomRatioRange.
  • Promień okręgu skaluje się wraz z powiększeniem (RTOL 10% od oczekiwanej wartości).
  • Odsunięcie środka okręgu od środka skaluje się wraz z powiększeniem (RTOL 10% od oczekiwanego).
  • Osiągnięto odpowiedni poziom powiększenia (2x).

Zwiększone testowanie kamer w trybie OGRANICZONYM

W Androidzie 11 testy w tabeli poniżej sprawdzają LIMITED kamery. Oprócz nowych testów test scene4/test_aspect_ratio_and_crop został zaktualizowany, aby umożliwić testowanie LIMITED urządzeń z interfejsem API na poziomie 30 lub wyższym.

Sceneria Nazwa testu
0 test_vibration_restrictions
2_a test_jpeg_quality
2_d/2_e test_num_faces
4 test_aspect_ratio_and_crop
6 test_zoom

Na rysunku 10 przedstawiono tajny dekoder ITS w Androidzie 11. Dekoder tajnych kodów pokazuje, jakie ustawienia testowe są wymagane w przypadku poszczególnych testów. Bramkowanie jest oznaczone kolorami, co ułatwia przeglądanie. Główne wymagania to:

  • MANUAL_SENSOR
  • READ_3A *wymaga MANUAL SENSOR
  • COMPUTE_TARGET_EXPOSURES *wymaga MANUAL SENSOR
  • PER_FRAME_CONTROL
  • RAW
  • SENSORS *REALTIME
  • MULTI_CAMERA

MANUAL SENSOR, READ_3A, COMPUTE_TARGET_EXPOSURESPER_FRAME_CONTROL są bramą do większości testów. Dodatkowo testy, które są włączone na urządzeniach LIMITED, są wyróżnione jasną zielenią.

tajny pierścień do dekodowania,

Rysunek 10. Dekoder Androida 11