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 dzielą się na te kategorie:

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 określany 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 dokumentach:RFoV box (rev1a)WFoV box (rev2.9).

Więcej opcji tabletów

Do listy zalecanych tabletów dodaliśmy m.in. Samsung 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 przechwytywanych 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. Na rysunku 1 pokazano osłonę, a na rysunku 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 przez złącze 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ę Arduino

Projektowanie obudów

Rysunek 2. Projektowanie obudów

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. NOT_YET_MANDATED testy mogą się nie powieść, ale w raportach weryfikatora CTS 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 zapisany jako PASS.

Na 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, a testowanie kończy się niepowodzeniem.

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 skracany przez podzielenie sceny 1 na dwie sceny: scena1_1 i scena1_2.

W tabeli poniżej znajdziesz czasy 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ępuje oczyszczenie nazw. Scena 2 jest podzielona literami, a scena 1 – cyframi. Nazewnictwo poszczególnych rozszerzeń jest następujące:

  • Sceny z tym samym wykresem, ale różnymi testami: *_1,2,3
  • Sceny z różnymi wykresami, ale tymi samymi testami: *_a,b,c
Oświetlenie Liczba testów Czas pracy Pixela 4 (min:s)
0 11 1:12
1_1 22 5: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

Testowanie zmian

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 korzystają z pierwszego poziomu interfejsu API 29, z wyjątkiem testu test_tonemap_curve, który korzysta z pierwszego poziomu interfejsu API 30.

Oświetlenie 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 obrazem wejściowym (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, 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.

Oświetlenie 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 OGRANICZONYCH.
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 aparatu, aby uwzględniała systemy z 3 i 4 aparatami, oraz pomijanie aparatów monochromatycznych, działających tylko w trybie głębi i na podczerwień.

Nowe testy

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

Oświetlenie 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 Test 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 w formacie 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 dwie 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. Wartości macierzy znacznie rosną (co oznacza zwiększoną kompresję) w przypadku ustawienia niższej jakości. Te macierze 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 poziom kompresji (średnia macierzy DQT luminancji/chrominancji) maleje.

Średnie wartości matrycy 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] średnie wartości macierzy kwantyzacji przy jakości +20 są o 20% niższe.
  • Ł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 kilku kamer najtrudniejsza do rozpoznania twarz powinna być twarzą po lewej stronie w scenie scene2_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 rejestrowania 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ę2_e, ale znajduje się w osobnej scenie ze względu na wymagane sterowanie tabletem.

W przypadku testów ręcznych zmianę sceny można uzyskać, machając dłonią przed aparatem.

Rysunek 7 przedstawia diagram czasowy testu. Czas między wyłączeniem ekranu a zrzutem ekranu jest dostosowywany na podstawie wyników zdarzeń z 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 wartość 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 FAIL.
  • Jeśli nie ma zmiany sceny i afSceneChange == 0, zmiana sceny przesuwa się o 30 klatek wcześniej, aby uzyskać zmianę sceny podczas nagrywania.

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 ciągu 6 prób, przy czym czas jest dostosowywany na podstawie poprzednich wyników.

scene6/test_zoom

Metoda

Do testowania android.control.zoomRatioRange potrzebna jest nowa scena, ponieważ dotychczasowe sceny albo nie mają wystarczająco małego elementu, który można powiększyć (sceny [1, 2, 4]), albo zawierają 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 tym obrazie 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 okręgów 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 wskazujący znaleziony telefon Pixel 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 zarówno przedniego, jak 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ż 8-krotne.

Znajdowanie kręgów

Test obejmuje metodę find_circle() wykorzystującą findContours, która znajduje wszystkie kontury i zawęża wyszukiwanie do odpowiednich okręgów, sprawdzają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 wstrzymane, jeśli znalezione kółko dotknie krawędzi obrazu. Podczas testu sprawdzamy, czy osiągnięto odpowiedni poziom powiększenia (10x).

Asserts

  • Przy każdym ustawieniu powiększenia znajduje się co najmniej 1 okrąg.
  • Testowane jest 10-krotne powiększenie lub maksymalne powiększenie wynoszące 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 jest skalowane wraz z powiększeniem (RTOL 10% od oczekiwanej wartości).
  • Osiągnięto odpowiedni poziom powiększenia (2x).

Zwiększone testowanie kamery w trybie OGRANICZONYM

W Androidzie 11 testy w tej tabeli 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.

Oświetlenie 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 pierścień dekodera ITS w Androidzie 11. Dekoder pokazuje, jakie ustawienia testu są powiązane z poszczególnymi testami. Bramkowanie jest oznaczone kolorami, co ułatwia przeglądanie. Główne elementy blokujące 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 LIMITED urządzeniach, są wyróżnione jasnym kolorem zielonym.

pierścień do dekodowania tajnych wiadomości,

Rysunek 10. Pierścień dekodujący tajemnice Androida 11