Na tej stronie znajduje się obszerna lista testów przeprowadzanych w ramach pakietu ITS Camera Image Test Suite (ITS), który jest częścią weryfikatora zgodności z Androidem (CTS). Testy ITS to testy funkcjonalne. Oznacza to, że nie mierzą one jakości obrazu, ale wszystkie reklamowane funkcje aparatu działają zgodnie z oczekiwaniami. Ten dokument pozwala programistom i testerom zrozumieć, jak działają poszczególne testy i jak debugować niepowodzenia.
System ITS ogranicza testy kamery według wymaganych właściwości kamery, poziomu interfejsu API i poziomu klasy wydajności multimediów (MPC). Na poziomie interfejsu API ITS używa ro.product.first_api_level
do brania testów dodanych na określonym poziomie interfejsu API, które sprawdzają korzystanie z funkcji na niższych poziomach interfejsu API pod kątem negatywnych wrażeń użytkownika. ITS używa interfejsu ro.vendor.api_level
do ograniczania testów funkcji dodanych na określonym poziomie interfejsu API, które wymagają nowych możliwości sprzętowych. Jeśli dla urządzenia zdefiniowano ro.odm.build.media_performance_class
, ITS wymaga przeprowadzenia określonych testów w zależności od poziomu MPC.
Testy są pogrupowane według sceny:
- scene0: rejestrowanie metadanych, zakłóceń, żyroskopu, wibracji
- scene1: ekspozycja, czułość, kompensacja EV, YUV a JPEG/RAW
- scene2: wykrywanie twarzy i testy wymagające włączenia scen kolorowych lub całkowitej ciemności
- scene3: ulepszanie krawędzi, ruch obiektywu
- scene4: format obrazu, przycinanie, pole widzenia.
- scene5: cieniowanie obiektywu
- scene6: Powiększenie
- scene_extensions: rozszerzenia aparatu;
- sensor_fusion: przesunięcie czasu aparatu/żyroskopu
Opisy poszczególnych scen znajdziesz w poszczególnych sekcjach.
scena0
Testy sceny 0 nie wymagają żadnych konkretnych informacji o scenie. Jednak aby można było przeprowadzić testy żyroskopowe i wibracyjne, telefon musi być nieruchomy.
przechwyt_z_testu_serii
Sprawdza, czy cały potok przechwytywania jest w stanie dotrzymać tempa przechwytywania pełnowymiarowych plików i czasu pracy procesora.
Przetestowane interfejsy API:
Pass: rejestruje serię zdjęć w pełnym rozmiarze, a kamera jest wystarczająco szybka, by ominąć czas oczekiwania.
test_capture_result_dump
Sprawdza, czy wynik skanowania ręcznego jest zwracany, a następnie zrzuca go.
Przetestowane interfejsy API:
Powodzenie: pozwala na zakończenie przechwytywania i zapis wyników.
test_żyroskopu
Sprawdza, czy żyroskop ma stabilne wyjście, gdy urządzenie jest nieruchome. Dane są przedstawione jako średnia z 20 punktów danych.
Przetestowane interfejsy API:
Prawidłowo: delta odczytu żyroskopu jest mniejsza niż 0,01 w czasie.
test_gyro-bias_plot.png
zakłócenia_testowe
Mierzy zakłócenia w sygnaturach czasowych kamery.
Przetestowane interfejsy API:
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP
android.hardware.camera2.CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE
Powodzenie: różnica między klatkami wynosi co najmniej 30 ms.
test_jitter_plot.png (Zwróć uwagę na mały zakres osi Y. Na tym wykresie zakłócenia są naprawdę niewielkie).
metadane_testowe
Sprawdza poprawność wpisów metadanych. Analizuje wyniki
i obiekt kamery. W tym teście wykorzystano ekspozycję auto_capture_request
i zyskuje wartości, ponieważ treść zdjęcia nie jest ważna.
Przetestowane interfejsy API:
android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
android.hardware.camera2.CameraCharacteristics#SCALER_CROPPING_TYPE
android.hardware.camera2.CameraCharacteristics#SENSOR_BLACK_LEVEL_PATTERN
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_TIMESTAMP_SOURCE
android.hardware.camera2.CaptureRequest#SENSOR_FRAME_DURATION
android.hardware.camera2.CaptureResult#SENSOR_ROLLING_SHUTTER_SKEW
Pass: poziom sprzętowy, rollingShutterSkew
, tagi frameDuration
, timestampSource
, croppingType
, blackLevelPattern
, pixel_pitch
, FoV, odległość hiperogniskowa są obecne i mają prawidłowe wartości.
rozbłysk_czułości_testowej
Sprawdza, czy parametr android.sensor.sensitivity
jest prawidłowo stosowany w trybie burtowym. Sprawdza tylko metadane wyjściowe.
Przetestowane interfejsy API:
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Prawidłowo: tolerancja błędów jest mniejsza niż 0,2%.
test_read_write
Sprawdza, czy urządzenie zapisuje prawidłową ekspozycję i wartości wzmocnienia, odczytując metadane przechwytywania.
Przetestowane interfejsy API:
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_EXPOSURE_TIME_RANGE
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
android.hardware.camera2.CaptureResult#SENSOR_EXPOSURE_TIME
android.hardware.camera2.CaptureResult#SENSOR_SENSITIVITY
Powodzenie: odczytu i zapisu są takie same we wszystkich ujęciach.
zdarzenia_testowe_sensora
Testuje, czy urządzenie wysyła zapytania i wyświetla zdarzenia z czujnika w przypadku urządzeń, które reklamują obsługę czujnika Fusion. Oczekiwane czujniki to akcelerometr, żyroskop i magnetometr. Ten test działa tylko wtedy, gdy ekran jest włączony, czyli urządzenie nie jest w trybie gotowości.
Przetestowane interfejsy API:
Pomyślne: odebrano zdarzenia z każdego czujnika.
wzór_testowy_koloru_solidnego
Służy do sprawdzania, czy wzorce testowe jednolitych kolorów są prawidłowo generowane na potrzeby wyciszania kamery. Jeśli wyciszanie kamery jest obsługiwane, muszą być obsługiwane wzorce testowe dla jednolitych kolorów. Jeśli wyciszanie kamery nie jest obsługiwane, wzorce testu jednolitego koloru są testowane tylko wtedy, gdy ta funkcja jest reklamowana.
Jeśli obrazy RAW są obsługiwane, testowane jest też przypisywanie kolorów. Testowane kolory to czarny, biały, czerwony, niebieski i zielony. W przypadku aparatów, które nie obsługują obrazów RAW, sprawdzany jest tylko czarny.
Przetestowane interfejsy API:
android.hardware.camera2.CameraCharacteristic#SENSOR_AVAILABLE_TEST_PATTERN_MODES
android.hardware.camera2.CaptureResult#SENSOR_TEST_PATTERN_DATA
android.hardware.camera2.CaptureResult#SENSOR_TEST_PATTERN_MODE
Powodzenie: obsługiwane wzorce testów stałych mają prawidłowy kolor i są niewielkie różnice w obrazie.
wzorzec_testu
Testowanie parametru android.sensor.testPatternMode
w celu przechwytywania klatek dla każdego prawidłowego wzorca testowego i sprawdzenie, czy klatki są prawidłowo generowane w przypadku jednolitych kolorów i pasków kolorów. Ten test obejmuje te czynności:
- Przechwytuje obrazy pod kątem wszystkich obsługiwanych wzorców testowych.
- Przeprowadza proste sprawdzenie poprawności wzoru testu jednolitego koloru i słupków kolorów.
Przetestowane interfejsy API:
android.hardware.camera2.CameraCharacteristic#SENSOR_AVAILABLE_TEST_PATTERN_MODES
android.hardware.camera2.CaptureResult#SENSOR_TEST_PATTERN_MODE
Powodzenie: obsługiwane wzorce testowe są generowane prawidłowo.
wzory_testowe_2.jpg
krzywa_testu_tone_mapa
Testowanie konwersji wzorca testowego z RAW na YUV z użyciem liniowej mapy tonalnej. Ten test wymaga funkcji android.sensor.testPatternMode = 2
(COLOR_BARS) do wygenerowania idealnego wzorca obrazu do konwersji tonema. Zapewnia to, że potok ma odpowiednie kolory z liniowy tonemapem i idealne wprowadzanie obrazu (wymaga zasady test_test_patterns
).
Przetestowane interfejsy API:
android.hardware.camera2.CaptureRequest#DISTORTION_CORRECTION_MODE
android.hardware.camera2.CaptureRequest#SENSOR_TEST_PATTERN_MODE
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
Powodzenie: YUV i RAW są do siebie podobne.
test_tonemap_curve_raw_2.jpg
test_tonemap_curve_yuv_2.jpg
test_unified_timestamp
Sprawdza, czy zdarzenia obrazu i czujnika ruchu znajdują się w tej samej domenie czasu.
Przetestowane interfejsy API:
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP
android.hardware.Sensor
android.hardware.SensorEvent
android.hardware.Sensor#TYPE_ACCELEROMETER
android.hardware.Sensor#TYPE_GYROSCOPE
Pass:sygnatury czasowe animacji znajdują się między 2 sygnałami czasowymi obrazu.
ograniczenie_wibracji_testowej
Pozwala sprawdzić, czy wibracje urządzenia działają zgodnie z oczekiwaniami.
Przetestowane interfejsy API:
android.hardware.Sensor
android.hardware.SensorEvent
android.hardware.Sensor#TYPE_ACCELEROMETER
android.os.Vibrator
android.hardware.camera2.CameraDevice#setCameraAudioRestriction
Przekazywanie: urządzenie nie wibruje po wyciszeniu przez interfejs API ograniczania dźwięku kamery.
scena1
scena1 to szary wykres. Szary wykres musi pokrywać środkowe 30% pola widzenia kamery. Szary wykres powinien w umiarkowanym stopniu utrudniać 3A (automatyczna ekspozycja, automatyczny balans bieli, autofokus), ponieważ w środkowej części ekranu nie ma żadnych funkcji. Żądanie przechwytywania określa jednak całą scenę, która obejmuje wystarczającą liczbę funkcji, by umożliwić 3A zgodność.
Kamery RFoV można testować w urządzeniu do testowania WFoV lub urządzeń do testowania RFoV. Jeśli kamera RFoV została przetestowana w urządzeniu testowym WFoV, wykres jest skalowany o 2⁄3, aby zapewnić pewne granice szarego wykresu w FoV i umożliwić osiągnięcie zgodności 3A. Bardziej szczegółowe opisy urządzeń testowych z kamerą znajdziesz w artykule [GA4] Kamera z zestawu.
scena1: wykres w pełnym rozmiarze (po lewej). Wykres przeskalowany do 2⁄3 (po prawej).
test_3a
Testowanie zbieżności 3 A z celem o umiarkowanej trudności.
Przetestowane interfejsy API:
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
Powodzenie: zbiegi 3A i zwracane wartości 3A są prawidłowe.
test_ae_af
Testuje poszczególne algorytmy automatycznej ekspozycji (AE) i autofokusu (AF).
Przetestowane interfejsy API:
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
Powodzenie: zbieżność 3A i zwracane wartości 3A są legalne.
test_ae_precapture_trigger
Sprawdza maszynę stanu AE podczas korzystania z aktywatora wstępnego przechwytywania. Przechwytuje 5 ręcznych żądań z wyłączonym AE. Ostatnie żądanie zawiera aktywator wstępnego przechwytywania AE, który należy zignorować, ponieważ jest wyłączona.
Przetestowane interfejsy API:
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
Pass (AE) jest zbieżny.
test_automatyczna_vs_ręczna
Testy, w ramach których zostały wykonane zdjęcia automatyczne i ręczne, wyglądają tak samo.
Przetestowane interfejsy API:
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
android.hardware.camera2.CaptureResult#TONEMAP_CURVE
android.hardware.camera2.CaptureResult#TONEMAP_MODE
Prawidłowy: ręczne zwiększanie i przekształcanie balansu bieli rejestrowane w każdym dopasowaniu wyniku nagrywania z automatycznym balansem bieli estimate
generowanym przez algorytm 3A kamery.
test_auto_vs_manual_auto.jpg
test_auto_vs_manual_wb.jpg
test_auto_vs_manual_manual_wb_tm.jpg
test_czarna_biała
Sprawdza, czy urządzenie generuje pełne, czarno-białe obrazy. Robi 2 zdjęcia, pierwszy z bardzo niskim wzmocnieniem i krótką ekspozycją w celu uzyskania czarnego zdjęcia, a drugi z bardzo dużym wzmocnieniem i długim czasem naświetlania, co daje białe zdjęcie.
Przetestowane interfejsy API:
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Pass: generuje obrazy czarno-białe. Kanały nasycone białych obrazów mają wartości RGB [255, 255, 255] z marginesem błędu niższym niż 1%.
test_czarna_biała_czarna.jpg | test_czarna_biała_biała.jpg |
test_czarna_biała_plotka.png
ręczna_wersja_testowa_sameness
Robi 5 serii po 50 zdjęć przy ręcznym ustawieniu przechwytywania i sprawdza, czy wszystkie zdjęcia są identyczne. Ten test pozwala sprawdzić, czy występują sporadyczne klatki, które są przetwarzane w inny sposób lub mają artefakty.
Przetestowane interfejsy API:
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR
android.hardware.camera2.CameraMetadata#SYNC_MAX_LATENCY_PER_FRAME_CONTROL
Prawidłowo: obrazy są identyczne wizualnie i w wartościach RGB.
Niepowodzenie:pokazuje wzrost lub spadek średniej RGB na początku każdej serii.
- Tolerancja wynosi 3% dla
first_API_level
< 30 - Tolerancja wynosi 2% dla
first_API_level
>= 30
test_burst_sameness_manual_mean.jpg
test_sam_samodzielna_ręczna_plot_means.png
wynik_przechwycenia_testu
Testy, czy prawidłowe dane wracają w obiektach CaptureResult
. Robi zdjęcia automatyczne,
ręczne i automatyczne.
Przetestowane interfejsy API:
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AE_REGIONS
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AF_REGIONS
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AWB_REGIONS
android.hardware.camera2.CaptureRequest#CONTROL_MODE
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
android.hardware.camera2.CaptureResult#STATISTICS_LENS_SHADING_CORRECTION_MAP
android.hardware.camera2.CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
Prawidłowo: metadane są prawidłowe we wszystkich zapisach, a ustawienia ręczne nie wyciekają do drugiego przechwytywania automatycznego. Wyznacza korektę cieniowania obiektywu na zdjęciach.
test_capture_result_plot_lsc_auto_ch0.png
test_przycięcia_regionu_nieprzetworzonego
Sprawdza, czy strumieni RAW nie można przyciąć.
Przetestowane interfejsy API:
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
android.hardware.camera2.CaptureResult#SCALER_CROP_REGION
android.hardware.camera2.CaptureRequest#SCALER_CROP_REGION
Prawidłowy: obrazy YUV są wyśrodkowane, ale nie RAW.
test_crop_region_raw_comp_raw_crop.jpg
test_crop_region_raw_comp_raw_full.jpg
test_crop_region_raw_comp_yuv_crop.jpg
test_crop_region_raw_yuv_full.jpg
testowe_regiony przycięcia
Testy działania regionów przycięcia. Podczas wykonywania pełnego zdjęcia tworzy plamy 5 różnych regionów (na rogach i w środku). Robi zdjęcia z przycięciem ustawionym dla 5 regionów. Porównuje wartości poprawki i przycięcia obrazu.
Przetestowane interfejsy API:
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
android.hardware.camera2.CaptureRequest#SCALER_CROP_REGION
Prawidłowo: obraz przyciętego obszaru odpowiada poprawce odpowiadającej obrazowi przycięcia.
testowy_model_szumu_dng
Sprawdza, czy parametry nieprzetworzonego modelu DNG są prawidłowe. Wykres przedstawia zmierzoną wariancję środkowej części szarej karty w nieprzetworzonych ujęciach rejestrowanych w różnych czułościach i porównuje te wartości z wariancją dla każdej czułości przez model szumu DNG w HAL kamery (na podstawie parametrów O,S zwracanych w obiektach wyników przechwytywania). Aby dowiedzieć się więcej o modelu szumu DNG, pobierz dokument na temat modelu szumu DNG.
Przetestowane interfejsy API:
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL
android.hardware.camera2.CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
android.hardware.camera2.CaptureResult#SENSOR_NOISE_PROFILE
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Powodzenie: nieprzetworzone parametry modelu DNG są prawidłowe. Oczekiwane wartości RGB odpowiadają rzeczywistym zmierzonym wartościom RGB.
testowy_model_szumu_dng.png
zaawansowana_kompensacja_testu_ev
Sprawdza, czy stosowana jest kompensacja wartości ekspozycji (EV). Test zwiększa ekspozycję w 8 krokach i porównuje jasność zmierzoną z oczekiwaną. Oczekiwane wartości są obliczane na podstawie jasności obrazu bez zastosowanej kompensacji EV. Wartość oczekiwana zostanie nasycona, jeśli obliczone wartości przekroczą rzeczywisty zakres wartości obrazu. Test kończy się niepowodzeniem, jeśli oczekiwane i zmierzone wartości nie są zgodne lub obrazy nadmiarowo wyświetlają się w ciągu 5 kroków.
Przetestowane interfejsy API:
android.hardware.camera2.CaptureRequest#CONTROL_AE_EXPOSURE_COMPENSATION
android.hardware.camera2.CaptureRequest#CONTROL_AE_LOCK
android.hardware.camera2.CaptureRequest#CONTROL_AWB_LOCK
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
android.hardware.camera2.CaptureResult#TONEMAP_CURVE
android.hardware.camera2.CaptureResult#TONEMAP_MODE
Prawidłowa: obrazy pokazują większą ekspozycję bez nadmiernego naświetlania z odległości 5 kroków.
test_kompensacja_zaawansowana_plot_means.png
podstawowa_kompensacja_testu_ev
Testy, czy kompensacja EV jest stosowana na podstawie zakresu utworzonego za pomocą funkcji CONTROL_AE_COMPENSATION_STEP
. Przy każdej wartości kompensacji rejestrowane jest 8 klatek.
Przetestowane interfejsy API:
android.hardware.camera2.CameraCharacteristics#CONTROL_AE_COMPENSATION_STEP
android.hardware.camera2.CaptureRequest#CONTROL_AE_EXPOSURE_COMPENSATION
android.hardware.camera2.CaptureRequest#CONTROL_AE_LOCK
android.hardware.camera2.CaptureRequest#CONTROL_AWB_LOCK
android.hardware.camera2.CaptureResult#CONTROL_AE_EXPOSURE_COMPENSATION
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
Prawidłowy: wzrost natężenia światła przy zwiększonym ustawieniu kompensacji EV, a 8 klatek rejestrowanych przy każdym ustawieniu kompensacji EV ma stabilną wartość luma.
test_kompensacja_podstawowego_testu_ev.png
ekspozycja_testowa
Testy, w których można uzyskać stałą ekspozycję, która zmienia się wraz z wartością ISO i czasem ekspozycji. Wykonuje serię ujęć, w których czas naświetlania oraz ISO zostały dobrane tak, aby się zrównoważyć.
Wyniki powinny mieć taką samą jasność, ale obraz powinien być szumniejszy w ciągu całej sekwencji. Sprawdza, czy średnie wartości próbek w pikselach są blisko siebie. Zapewnia to, że obrazy nie są ograniczane do wartości 0 lub 1 (co spowodowałoby, że wyglądałyby jak płaskie linie). Test możesz też przeprowadzić z obrazami w formacie RAW, ustawiając w pliku konfiguracji flagę debug
.
Przetestowane interfejsy API:
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Przezgodne: zdjęcia mają taką samą jasność, ale głośniejsze przy wyższych wartościach ISO. Plany RGB są płaskie, gdy wartość ekspozycji ISO* jest stała w testowanej przestrzeni wzmocnienia.
test_ekspozycji_testowej.png
test_exposure_mult=1.00.jpg | test_exposure_mult=64.00.jpg |
test_JPEG
Testy, które konwertowały obrazy YUV i JPEG urządzeń, wyglądają tak samo. Test pobiera środkowe 10% obrazu, oblicza wartość RGB i sprawdza, czy wyniki są ze sobą zgodne.
Przetestowane interfejsy API:
Prawidłowo: średnia różnica RGB między każdym obrazem wynosi mniej niż 3%.
test_jpeg_fmt=jpg.jpg | test_jpeg=fmt=yuv.jpg |
test_włączania
Testuje, czy ustawienia (ekspozycja i wzmocnienie) zachowują właściwą ramkę w przypadku kamer FULL
i LEVEL_3
. Wykonuje serię ujęć, korzystając z kolejnych żądań, zmieniając parametry żądania zapisu pomiędzy kolejnymi ujęciami. Sprawdza, czy obrazy mają oczekiwane właściwości.
Przetestowane interfejsy API:
Pasujące: obrazy [2, 3, 6, 8, 10, 12, 13] mają wyższe wartości ISO lub ekspozycję i wyświetlają się z wyższym RGB w test_latching_plot_means.png
.
test_latching_i=00.jpg | test_latching_i=01.jpg | test_latching_i=02.jpg | |
test_latching_i=03.jpg | test_latching_i=04.jpg | test_latching_i=05.jpg | |
test_latching_i=06.jpg | test_latching_i=07.jpg | test_latching_i=08.jpg | |
test_latching_i=09.jpg | test_latching_i=10.jpg | test_latching_i=11.jpg | |
test_latching_i=12.jpg |
test_latching_plot_means.png
test_liniowości
Testuje, czy przetwarzanie na urządzeniu można odwrócić do pikseli liniowych. Przechwytuje sekwencję ujęć, gdy urządzenie jest skierowane na jednolity cel.
Przetestowane interfejsy API:
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
android.hardware.camera2.CaptureRequest#BLACK_LEVEL_LOCK
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
Powodzenie: wartości R, G i B muszą rosnąć liniowo o zwiększonej czułości.
test_linearity_plot_means.png
test_zablokowany_seria
Testuje blokadę 3A i rozbłysk YUV (z użyciem ustawienia automatycznego). Ten test został zaprojektowany tak, aby zaliczać go nawet na wybranych urządzeniach, które nie mają MANUAL_SENSOR
lub PER_FRAME_CONTROLS
.
W ramach testu sprawdzamy spójność obrazu YUV, gdy sprawdzanie liczby klatek jest w trybie CTS.
Przetestowane interfejsy API:
android.hardware.camera2.CaptureRequest#CONTROL_AE_LOCK
android.hardware.camera2.CaptureRequest#CONTROL_AWB_LOCK
Powodzenie: zdjęcia wyglądają spójnie.
test_locked_burst_frame0.jpg
test_locked_burst_frame1.jpg
test_locked_burst_frame2.jpg
poprawka_koloru_testu
Sprawdza, czy skonfigurowane parametry android.colorCorrection.*
są stosowane.
Powoduje wykonanie ujęć z różnymi wartościami przekształcenia i wzmocnienia oraz sprawdzenie, czy wyglądają odpowiednio. Przekształcanie i wzmocnienie są wybierane w taki sposób, aby dane wyjściowe zmieniały się na coraz bardziej czerwone lub niebieskie. Wykorzystuje liniową mapę tonalną. Mapowanie tonów to technika używana w przetwarzaniu obrazów, która pozwala mapować jeden zestaw kolorów na drugi i przybliżyć wygląd obrazów o dużym zakresie dynamiki w medium o mniejszym zakresie dynamicznym.
Przetestowane interfejsy API:
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
Osiągnięcie: wartości R i B zwiększają się wraz z przekształceniem.
test_parametr_kolor_korekta_plot_means.png
*Oś X oznacza żądania przechwytywania: 0 = jednostkowe, 1=czerwone wzmocnienie, 2= wzmocnienie niebieskim
test_param_color_improveion_req=0.jpg
test_param_color_improveness_req=1.jpg (wzmocnienie R)
test_param_color_Correction_req=2.jpg (wzmocnienie B)
parametr_test_exposure_time
Sprawdza, czy parametr android.sensor.exposureTime
jest stosowany.
Przetestowane interfejsy API:
Podanie: każde ujęcie jest jaśniejsze od poprzedniego.
test_param_exposure_time_frame0.jpg
test_param_exposure_time_plot.png
tryb_parametru_testowego_flash
Sprawdza, czy parametr android.flash.mode
jest stosowany. Ręcznie ustawia ciemną stronę ekspozycji, tak by było jasne, czy lampa błyskowa została uruchomiona, i wykorzystuje liniową mapę tonalną. Sprawdza środek kafelka, aby zobaczyć,
czy nie został utworzony duży gradient w celu sprawdzenia, czy lampa błyskowa została uruchomiona.
Przetestowane interfejsy API:
Prawidłowy: na środku obrazu kafelka znajduje się duży gradient, co oznacza, że została uruchomiona lampa błyskowa.
test_param_flash_mode_1.jpg
test_param_flash_mode_1_tile.jpg
test_param_flash_mode_2.jpg
test_param_flash_mode_2_tile.jpg
redukcja_szumie_testu
Sprawdza, czy po ustawieniu parametr android.noiseReduction.mode
jest stosowany prawidłowo. Robi zdjęcia przy słabym oświetleniu. Korzysta z wysokiego wzmocnienia analogowego,
aby na zdjęciu było zaszumione. Rejestruje 3 obrazy: „Szybka” i „wysoka jakość” przy wyłączonej opcji NR. Przechwytuje również obraz z niskim wzmocnieniem i wyłączonym dźwiękiem NR, a także wykorzystuje tę wariancję jako punkt odniesienia. Im wyższy współczynnik SNR (stosunek sygnału do szumu), tym lepsza jakość obrazu.
Przetestowane interfejsy API:
Przepustka: SNR różni się w zależności od trybów redukcji szumów i działa podobnie jak na wykresie poniżej.
parametr_testowy_szumy_redukcja_plotu_SNR.png
0: WYŁ., 1: FAST, 2: HQ, 3: MIN , 4: ZSL
test_param_noise_reduction_high_gain_nr=0.jpg
test_param_noise_reduction_high_gain_nr=1.jpg
test_param_noise_reduction_high_gain_nr=2.jpg
test_param_noise_reduction_high_gain_nr=3.jpg
test_param_noise_reduction_low_gain.jpg
czułość_testu
Sprawdza, czy parametr android.sensor.sensitivity
jest stosowany. Test zwiększa czułość w 5 krokach ze stałą ekspozycją dla każdego ujęcia.
Przetestowane interfejsy API:
Prawidłowy: RGB oznacza, że środkowe 10% jest jaśniejsze przy większej czułości.
test_param_sensitivity_iso=0055.jpg
test_param_sensitivity_iso=1819.jpg
test_param_sensitivity_iso=3583.jpg
test_param_sensitivity_iso=5347.jpg
test_param_sensitivity_iso=7111.jpg
test_param_sensitivity_plot.png
tryb_parametru_testowego_cieniowania
Sprawdza, czy parametr android.shading.mode
jest stosowany.
Przetestowane interfejsy API:
android.hardware.camera2.CaptureRequest#SHADING_MODE
android.hardware.camera2.CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE
android.hardware.camera2.CaptureResult#STATISTICS_LENS_SHADING_CORRECTION_MAP
Pass: tryby cieniowania są zmieniane, a mapy cieniowania obiektywu są modyfikowane zgodnie z oczekiwaniami.
test_param_cieniowanie_mode_ls_maps_mode_0_loop_0.png
test_param_cieniowanie_mode_ls_maps_mode_1_loop_0.png
test_param_shading_mode_ls_maps_mode_2_loop_0.png
test_param_tonemap_mode
Sprawdza, czy parametr android.tonemap.mode jest stosowany. Stosuje różne krzywe mapy tonalnej do każdego kanału R, G i B oraz sprawdza, czy obrazy wyjściowe zostały zmodyfikowane zgodnie z oczekiwaniami. Składa się on z 2 testów: test1 i test2.
Przetestowane interfejsy API:
android.hardware.camera2.CameraMetadata#TONEMAP_MODE_CONTRAST_MODE
android.hardware.camera2.CameraMetadata#TONEMAP_MODE_FAST
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
Pomyślne:
- test1: w przypadku obu obrazów występuje liniowy tonema, a n=1 – bardziej stromy gradient. Kanał G (zielony) jest jaśniejszy w przypadku zdjęcia n=1.
- test2: ta sama mapa, ale inna długość. Obrazy są takie same.
test_param_tonemap_mode_n=0.jpg | test_param_tonemap_mode_n=1.jpg |
zwiększanie_czułości_aktywności_testowej_po_nieprzetworzonej
Sprawdza po wzmocnieniu czułości RAW. Przechwytuje zestaw obrazów RAW i YUV o różnej czułości, publikuje kombinację wzmocnienia czułości RAW i sprawdza, czy średni piksel wyjściowy pasuje do ustawień żądania.
Przetestowane interfejsy API:
android.hardware.camera2.CameraCharacteristics#CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
android.hardware.camera2.CaptureRequest#CONTROL_POST_RAW_SENSITIVITY_BOOST
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Pass: obrazy RAW przyciemniają się ze wzrostem wzmocnienia, a obrazy YUV mają stałą jasność
test_post_raw_sensitivity_boost_raw_s=3583_boost=0100.jpg
test_post_raw_sensitivity_boost_raw_s=1792_boost=0200.jpg
test_post_raw_sensitivity_boost_raw_s=0896_boost=0400.jpg
test_post_raw_sensitivity_boost_raw_s=0448_boost=0800.jpg
test_post_raw_sensitivity_boost_raw_s=0224_boost=1600.jpg
test_post_raw_sensitivity_boost_raw_s=0112_boost=3199.jpg
test_post_raw_sensitivity_boost_raw_plot_means.png
test_post_raw_sensitivity_boost_yuv_s=0112_boost=3199.jpg
test_post_raw_sensitivity_boost_yuv_s=0448_boost=0800.jpg
test_post_raw_sensitivity_boost_yuv_s=0896_boost=0400.jpg
test_post_raw_sensitivity_boost_yuv_s=1792_boost=0200.jpg
test_post_raw_sensitivity_boost_yuv_s=3585_boost=0100.jpg
test_post_raw_sensitivity_boost_yuv_plot_means.png
czułość_testu_raw_burst
Rejestruje zestaw nieprzetworzonych obrazów o rosnącym wzmocnieniu i mierzy szum. Zapisuje nieprzetworzoną serię zdjęć.
Przetestowane interfejsy API:
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL
android.hardware.camera2.CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
Podanie: każde ujęcie jest głośniejsze od poprzedniego, ponieważ wzmocnienie wzrasta.
Korzysta z wariancji centralnej komórki siatki statystyk.
test_raw_burst_czułość_wariancji.png
ekspozycja_testowa_nieprzetworzona
Rejestruje zestaw nieprzetworzonych zdjęć o wydłużonym czasie ekspozycji i mierzy wartości pikseli.
Przetestowane interfejsy API:
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
Powodzenie: zwiększenie ISO (wzrostu) sprawia, że piksele są bardziej wrażliwe na światło, więc wykres przesuwa się w lewo.
test_raw_exposure_s=55.png
(100 – 1 ms, 101 – 10 ms, 10–1 – 0,1 ms)
test_raw_exposure_s=132.png
test_raw_ekspozycja_s=209.png
test_raw_exposure_s=286.png
test_raw_exposure_s=363.png
test_raw_exposure_s=440.png
wrażliwość_testu_nieprzetworzonego
Rejestruje zestaw nieprzetworzonych obrazów o rosnącej czułości i mierzy szum (wariancję) w środkowych 10% obrazu. Pozwala sprawdzić, czy każde ujęcie jest głośniejsze od poprzedniego.
Przetestowane interfejsy API:
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL
android.hardware.camera2.CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
Podania: wariancja zwiększa się z każdym uderzeniem.
test_raw_czułość_wariancji.png
redukcja_szumu_testu
Testy, w których stosuje się funkcję android.noiseReduction.mode
do ponownego przetwarzania żądań.
Robi ponownie przetworzone zdjęcia przy słabym oświetleniu. Korzysta z wysokiego wzmocnienia analogowego,
co zapewnia szum podczas robienia zdjęcia. Rejestruje 3 ponownie przetworzone obrazy: NR wyłączone, „szybko” i „wysoka jakość”. Rejestruje ponownie przetworzony obraz z niskim wzmocnieniem i wyłączonym NR, a następnie wykorzystuje tę wariancję jako punkt odniesienia.
Przetestowane interfejsy API:
Sprawne: SZYBKIE >= WYŁ., Wysoka jakość >= SZYBKA, Wysoka jakość >> WYŁ.
Typowy wykres SNR i NR_MODE
test_tonemap_sequence
Testowanie sekwencji ujęć z różnymi krzywymi tonema. Zrobi 3 zdjęcia ręczne z liniową mapą tonalną. Zrobi 3 zdjęcia ręczne z domyślnym tonemapem. Oblicza różnicę między każdą kolejną parą klatek.
Przetestowane interfejsy API:
Prawidłowa: występują 3 identyczne klatki, po których następuje inny zestaw 3 identycznych klatek.
test_tonemap_sequence_i=0.jpg
test_tonemap_sequence_i=1.jpg
test_tonemap_sequence_i=2.jpg
test_tonemap_sequence_i=3.jpg
test_tonemap_sequence_i=4.jpg
test_tonemap_sequence_i=5.jpg
test_yuv_jpeg_all
Testuje, czy wszystkie zgłaszane rozmiary i formaty przeznaczone do przechwytywania obrazów działają. Wykorzystuje żądanie ręczne z liniowym mapą tonu, dzięki czemu YUV i JPEG wyglądają tak samo po konwersji za pomocą modułu image_processing_utils
. Obrazy nie są zapisywane domyślnie, ale można je zapisać, włączając funkcję debug_mode
.
Przetestowane interfejsy API:
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
android.graphics.ImageFormat#JPEG
Prawidłowo: wszystkie centra obrazów mają maksymalną wartość RMS (średnią kwadratową sygnału) w przypadku obrazów przekonwertowanych RGB z 3% obrazu YUV o najwyższej rozdzielczości.
test_yuv_jpeg_all.png
test_yuv_plus_dng
Sprawdza, czy raportowane rozmiary i formaty dla przechwytywania obrazów działają.
Przetestowane interfejsy API:
Powodzenie: test kończy i zwraca żądane obrazy.
test_yuv_plus_dng.jpg
test_yuv_plus_jpeg
Testuje zarejestrowanie pojedynczej klatki jako danych wyjściowych YUV i JPEG. Wykorzystuje żądanie ręczne z liniowym mapą tonu, dzięki czemu YUV i JPEG wyglądają tak samo po konwersji za pomocą modułu image_processing_utils
.
Przetestowane interfejsy API:
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
android.graphics.ImageFormat#JPEG
Pass: obrazy YUV i JPEG są podobne i mają mniej niż 1% różnicy RMS (średniej kwadratowej sygnału).
test_yuv_plus_jpg_jpg.jpg | test_yuv_plus_jpeg_yuv.jpg |
test_yuv_plus_raw
Sprawdza, czy pojedyncza klatka jest zapisywana zarówno w formacie RAW/RAW10/RAW12, jak i YUV, jeśli jest obsługiwany. Wykorzystuje żądanie ręczne z liniowym mapą tonu, więc wartości nieprzetworzone i współczynniki YUV muszą być takie same. Porównanie 10% środkowych wartości RGB obrazów po przekonwertowaniu RGB. Dziennikiandroid.shading.mode
.
Przetestowane interfejsy API:
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
android.hardware.camera2.CaptureRequest#CONTROL_MODE
android.hardware.camera2.CaptureRequest#SHADING_MODE
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
android.hardware.graphics.ImageFormat#RAW10
android.hardware.graphics.ImageFormat#RAW12
Pass: YUV i nieprzetworzone obrazy są podobne i mają mniej niż 3,5% różnicy RMS (średniej kwadratowej wartości sygnału).
test_yuv_plus_raw_shading=1_raw.jpg | test_yuv_plus_raw_shading=1_yuv.jpg |
scena2_a
scena2_a ma 3 twarze na szarym tle i w neutralnym ubraniu. Twarze są wybierane i mają szeroki zakres odcieni skóry. Aby wykrywanie twarzy działało optymalnie, wykres musi mieć prawidłową orientację.
scena2_a
test_auto_flash
Testuje, czy w ciemnej scenie włącza się automatyczna lampa błyskowa. Sprawdza, czy na środku obrazu kafelka znajduje się duży gradient, by sprawdzić, czy uruchamiana jest auto-flashowa reklama. Aby uruchomić automatyczną lampę błyskową, musisz wyłączyć tablet i światła na sprzęcie testowym. Tablet jest wyłączany w ramach testu, a światła można wyłączyć automatycznie za pomocą kontrolera Arduino. Aby test zadziałał, scena musi być całkowicie ciemna. Dlatego otwory tylnego tabletu muszą być całkowicie zakryte tabletem scenograficznym, a przedni otwór musi być zasłonięty przysłoną, a telefon DUT musi blokować światło znika w pamięci urządzenia.
Przetestowane interfejsy API:
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_AVAILABLE
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
android.hardware.camera2.CaptureRequest#FLASH_MODE
Prawidłowy: na środku obrazu kafelka znajduje się duży gradient, co oznacza, że uruchamiana jest automatyczna reklama Flash.
testowa_automatyczna ramka
Testuje działanie automatycznego kadrowania kamery. Robi duże powiększenie tak, że nie widać żadnej twarzy na scenie, włącza tryb automatycznego kadrowania, ustawiając opcję AUTOFRAMING
w CaptureRequest
na True
, i sprawdza, czy można wykryć wszystkie twarze w oryginalnej scenie, gdy stan jest zbieżny (czyli gdy AUTOFRAMING_STATE
w CaptureResult
ma wartość AUTOFRAMING_STATE_CONVERGED
).
Przetestowane interfejsy API:
android.hardware.camera2.CameraCharacteristics#CONTROL_AUTOFRAMING_AVAILABLE
android.hardware.camera2.CaptureRequest#CONTROL_AUTOFRAMING
android.hardware.camera2.CaptureResult#CONTROL_AUTOFRAMING
android.hardware.camera2.CaptureResult#CONTROL_AUTOFRAMING_STATE
Powodzenie: wykryto wszystkie 3 twarze.
testowy_ekran_p3
Testuje wyświetlenie P3 w formacie JPEG przy użyciu interfejsu API ColorSpaceProfiles
. Sprawdza, czy zdjęcie JPEG ma w nagłówku odpowiedni profil ICC, a obraz zawiera kolory spoza zakresu sRGB.
Przetestowane interfejsy API:
android.hardware.camera2.params.ColorSpaceProfiles
android.hardware.camera2.params.SessionConfiguration#setColorSpace
Karta: plik JPEG zawiera profil ICC wyświetlacza P3 i kolory spoza zakresu sRGB.
efekty_testowe
Rejestruje klatkę, aby uzyskać obsługiwane efekty aparatu, i sprawdza, czy zostały prawidłowo wygenerowane. W ramach testu sprawdzamy tylko efekty OFF
i MONO
, ale obrazy są zapisywane w przypadku wszystkich obsługiwanych efektów.
Przetestowane interfejsy API:
android.hardware.camera2.CameraCharacteristics#CONTROL_AVAILABLE_EFFECTS
android.hardware.camera2.CaptureRequest#CONTROL_EFFECT_MODE
Pass: rejestruje obraz sceny z efektami OFF
i obrazem monochromatycznym z efektami ustawionymi na MONO
.
test_efekty_MONO.jpg
kombinacje_formatu_testowego
Testowanie różnych kombinacji formatów wyjściowych.
Przetestowane interfejsy API:
android.hardware.camera2.CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP
android.hardware.camera2.params.StreamConfigurationMap#getOutputSizes()
android.hardware.camera2.CameraCaptureSession#captureBurst()
Powodzenie: wszystkie kombinacje zostały przechwycone.
test_jpeg_quality
Testuje jakość kompresji JPEG aparatu. Przejdź z jakością JPEG do android.jpeg.quality
i zadbaj o poprawne zmiany w tabelach kwantyzacji.
Przetestowane interfejsy API:
Pass: macierz kwantyzacji zmniejsza się wraz ze wzrostem jakości. (Macierz reprezentuje współczynnik dzielenia).
Średnia matrycy kolorów DQT w tylnym aparacie Pixel 4 lub luma/chroma a jakość JPEG
Przykład nieudanego testu
Pamiętaj, że w przypadku obrazów o bardzo niskiej jakości (jpeg.quality < 50) w matryce kwantyzacji nie zwiększa się kompresja.
test_liczba_twarzy
Testuje wykrywanie twarzy.
Przetestowane interfejsy API:
android.hardware.camera2.CaptureResult#STATISTICS_FACES
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Prawidłowo: znajduje trzy twarze.
test_num_faces_fd_mode_1.jpg
test_preview_min_współczynnik_klatek
Sprawdza, czy liczba klatek na podglądzie prawidłowo zmniejsza się w ciemnej scenie. Aby test przebiegł prawidłowo, oświetlenie w zestawie testowym musi zostać wyłączone przez kontroler lub ręcznie przez operatora testu.
Przetestowane interfejsy API:
android.hardware.camera2.CameraCharacteristics#CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.hardware.camera2.CaptureResult#CONTROL_AE_TARGET_FPS_RANGE
android.media.CamcorderProfile
android.media.MediaRecorder
Prawidłowo: liczba klatek w podglądzie ma minimalną wartość w żądanym zakresie, a różnica między klatkami jest mniejsza niż bezwzględna tolerancja ustawiona w teście.
test_reprocess_uv_swap
Testy, które potwierdzają, że ponowne przetwarzanie YUV-a nie powoduje zamiany płaszczyzn U i V. Jest to określane przez obliczenie sumy różnic bezwzględnych (SAD) między ponownie obrobionym a nieprzetworzonym zdjęciem. Jeśli zamiana płaszczyzn wyjściowych U i V ponownie przetworzonego przechwytywania powoduje wzrost SAD, przyjmuje się, że dane wyjściowe mają prawidłowe płaszczyzny U i V.
Przetestowane interfejsy API:
android.hardware.camera2.CameraDevice#createCaptureSession
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_YUV_REPROCESSING
android.hardware.camera2.CaptureRequest#EDGE_MODE
android.hardware.camera2.CaptureResult#NOISE_REDUCTION_MODE
Przepustka: samoloty U i V nie są zamieniane.
test_reprocess_uv_swap.png
scena2_b
test_liczba_twarzy
Testuje wykrywanie twarzy przy zwiększonej różnorodności odcieni skóry w scenach twarzy.
Przetestowane interfejsy API:
android.hardware.camera2.CaptureResult#STATISTICS_FACES
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Pass:znajduje 3 twarze.
test_num_faces_fd_mode_1.jpg
test_yuv_jpeg_capture_sameness
Rejestruje 2 obrazy w największych popularnych formatach YUV i JPEG o tym samym współczynniku proporcji co w największym formacie JPEG nieprzekraczającym rozdzielczości 1920 x 1440 pikseli.
Ustawia jpeg.quality
na 100 i przechwytuje żądanie dwuplatformowe. Konwertuje oba obrazy na macierze RGB i oblicza średnią kwadratową pierwiastka 3D (RMS) między obydwoma obrazami.
Przetestowane interfejsy API:
android.hardware.camera2.CameraCharacteristics#SCALER_AVAILABLE_STREAM_USE_CASES
android.hardware.camera2.CaptureRequest#JPEG_QUALITY
android.graphics.ImageFormat#JPEG
Pass: obrazy YUV i JPEG są podobne i mają mniej niż 1% różnicy RMS (średniej kwadratowej sygnału).
scena2_c
test_liczba_twarzy
Testuje wykrywanie twarzy przy zwiększonej różnorodności odcieni skóry w scenach twarzy.
Przetestowane interfejsy API:
android.hardware.camera2.CaptureResult#STATISTICS_FACES
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Pass:znajduje 3 twarze.
test_num_faces_fd_mode_1.jpg
test_jpeg_capture_perf_class
Sprawdza opóźnienie przechwytywania JPEG w klasie wydajności S zgodnie z opisem w sekcji 2.2.7.2 Aparat w CDD.
Prawidłowy: opóźnienie przechwytywania obrazu JPEG w trybie aparatu2 < 1000 ms dla rozdzielczości 1080p jest mierzone w teście wydajności kamery CTS w warunkach oświetleniowych ITS (3000 K) w przypadku obu aparatów głównych.
test_camera_launch_perf_class
Testowanie opóźnienia uruchomienia kamery w klasie wydajności S zgodnie z opisem w sekcji 2.2.7.2 Kamera w CDD.
Prawidłowy: opóźnienie uruchomienia kamery 2 (od otwarcia kamery do pierwszej klatki podglądu) musi wynosić mniej niż 600 ms, zgodnie z pomiarem wydajności kamery CTS w warunkach oświetleniowych ITS (3000 K) w przypadku obu głównych kamer.
scena2_d
test_liczba_twarzy
Testuje wykrywanie twarzy przy zwiększonej różnorodności odcieni skóry w scenach twarzy.
Przetestowane interfejsy API:
android.hardware.camera2.CaptureResult#STATISTICS_FACES
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Pass:znajduje 3 twarze.
scena2_e
obraz_ciągły_testowy
Przy pierwszym ustawieniu żądania przechwytywania jest rejestrowane 50 klatek rozdzielczości VGA.
android.control.afMode = 4 (CONTINUOUS_PICTURE).
Przetestowane interfejsy API:
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
android.hardware.camera2.CaptureResult#CONTROL_AF_STATE
android.hardware.camera2.CaptureResult#CONTROL_AWB_STATE
Pass: system 3A stabilizuje się po zakończeniu przechwytywania z 50 klatek.
test_liczba_twarzy
Testuje wykrywanie twarzy przy zwiększonej różnorodności odcieni skóry w scenach twarzy.
Przetestowane interfejsy API:
android.hardware.camera2.CaptureResult#STATISTICS_FACES
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Pass:znajduje 3 twarze.
scena2_f
scena2_f ma 3 twarze na białym tle i w białych ubraniach. Twarze mają szeroki zakres odcieni skóry i wysoki kontrast z tłem.
scena2_f
test_liczba_twarzy
Testuje wykrywanie twarzy przy zwiększonej różnorodności odcieni skóry w scenach twarzy.
Przetestowane interfejsy API:
android.hardware.camera2.CaptureResult#STATISTICS_FACES
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Pass:znajduje 3 twarze.
test_num_faces_fd_mode_1.jpg
scena3
Scene3 korzysta z wykresu ISO12233, a większość testów korzysta z metody wyodrębniania wykresów, aby znaleźć wykres w danej scenie. Z tego powodu większość zapisanych obrazów nie ma obramowania, np. sceny 1, 2 lub 4, ale tylko wykres. Aby wyszukiwarka wykresów działała optymalnie, wykres musi mieć prawidłową orientację.
spójność_testu_3a
Testy spójności 3A.
Przetestowane interfejsy API:
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
android.hardware.camera2.CaptureRequest#LENS_FOCUS_DISTANCE
android.hardware.camera2.CaptureResult#SENSOR_EXPOSURE_TIME
android.hardware.camera2.CaptureResult#SENSOR_SENSITIVITY
Prawidłowy: 3A zbiega się w zakresie ekspozycji, wzmocnienia, awb (automatyczny balans bieli) i fd (odległość ostrości) trzykrotnie w ramach tolerancji.
test_edge_ulepszenie
Sprawdza, czy parametr android.edge.mode
jest stosowany prawidłowo. Przechwytuje obrazy, które nie są przetwarzane ponownie w przypadku każdego trybu brzegowego, i zwraca ostrość obrazu wyjściowego oraz metadanych wyniku przechwytywania. Przetwarza żądanie przechwytywania z danym trybem brzegowym, czułością, czasem ekspozycji, odległością ostrzenia i parametrem powierzchni wyjściowej.
Pass: tryb HQ
(2) większy niż tryb OFF
(0). Tryb FAST
(1) ostrzejszy
niż tryb OFF
. Tryb HQ
jest bardziej wyraźny lub taki sam jak tryb FAST
.
Przetestowane interfejsy API:
Parametry kamery, których to dotyczy:
EDGE_MODE
test_edge_enhancement_edge=0.jpg
test_edge_enhancement_edge=1.jpg (tryb szybki)
test_edge_enhancement_edge=2.jpg (tryb wysokiej jakości)
testowy_odwracanie_lustrzane
Sprawdza, czy zdjęcie jest prawidłowo zorientowane zgodnie z sekcją 7.5.2 CDD: przedni aparat [C-1-5].
Odbicia lustrzane, odwrócone i obrócone można rozpoznać dzięki elementowi rombowemu znajdującym się w środku.
Prawidłowy: zdjęcie nie jest odwrócone, odbicie lustrzane ani obrócone.
test_flip_lustrzana_poprawka.jpg
test_poziomy_w_pionie
Sprawdza, czy w przypadku czujników poziomych działanie orientacji poziomej jest lepsze niż w orientacji pionowej.
Przetestowane interfejsy API:
android.hardware.camera2.CameraCharacteristics#SCALER_AVAILABLE_ROTATE_AND_CROP_MODES
android.hardware.camera2.CameraCharacteristics#SENSOR_ORIENTATION
android.hardware.camera2.CameraCharacteristics#getCameraCharacteristics
Prawidłowo: test pozwala znaleźć wykres o oczekiwanym obróceniu (0 stopni, gdy wyłączone jest zastępowanie orientacji poziomej i pionowej, 90 stopni, jeśli ta opcja jest włączona).
test_poziomy_do_portraitu.png
raport_ruchu_obiektywu_testowego
Sprawdza, czy flaga ruchu obiektywu jest prawidłowo raportowana. Przechwytuje 24 zdjęcia w pierwszych 12 klatkach z optymalną odległością ostrzenia (wynik 3 A) i ostatnimi 12 klatkami przy minimalnej odległości. W okolicy klatki 12 obiektyw przesuwa się, co powoduje spadek ostrości. Ostrość stabilizuje się w miarę przesuwania obiektywu do ostatecznej pozycji. Flaga ruchu obiektywu powinna być odnotowana we wszystkich klatkach, w których ostrość jest pośrednia w przypadku kilku pierwszych klatek, gdy obiektyw jest ustawiony w optymalnej odległości ogniskowej, oraz w ostatnich klatkach, w których obiektyw jest nieruchomy i mają minimalną odległość ogniskową. Dokładna ramka, w której przesuwa się obiektyw, nie jest istotna – oznacza to, że flaga ruchu jest potwierdzana, gdy obiektyw się porusza.
Przetestowane interfejsy API:
android.hardware.camera2.CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE
android.hardware.camera2.CaptureResult#LENS_STATE
android.hardware.camera2.CaptureResult#LENS_FOCUS_DISTANCE
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP
android.hardware.camera2.CaptureRequest#LENS_FOCUS_DISTANCE
Prawidłowo:flaga ruchu obiektywu ma wartość True
w kadrze ze zmianą ostrości.
Mechanizmy niepowodzenia:
lens_moving: True
(android.hardware.camera2.CaptureResult#LENS_STATE
= 1) w polutest_log.DEBUG
jest weryfikowana tylko w klatkach, w których ostrość się nie zmienia.- Klatki z wartością
lens_moving: False
(android.hardware.camera2.CaptureResult#LENS_STATE
= 0) wtest_log.DEBUG
mają różnicę w ostrości w porównaniu z kilkoma pierwszymi klatkami przy optymalnym ustawieniu ogniskowej lub ostatnich kilku klatkach z minimalną odległością ostrzenia.
test_reprocess_edge_ulepszenia
Sprawdza, czy obsługiwane metody ponownego przetwarzania w celu ulepszenia krawędzi działają prawidłowo. Przetwarza żądanie przechwytywania z danym trybem przetwarzania brzegowego i porównuje różne tryby do przechwytywania z wyłączonymi trybami ponownego przetwarzania brzegu.
Przetestowane interfejsy API:
android.hardware.camera2.CaptureRequest#EDGE_MODE
android.hardware.camera2.CaptureRequest#REPROCESS_EFFECTIVE_EXPOSURE_FACTOR
Prawidłowo: ostrość dla różnych trybów krawędzi jest prawidłowa. HQ
(tryb 2) jest dłuższy niż OFF
(tryb 0), a poprawa między różnymi trybami jest podobna.
test_reprocess_edge_enhancement_plot.png
scena4
Scena 4 składa się z czarnego okręgu na białym tle wewnątrz kwadratu.
scena4
współczynnik_testu_i_przycięcie
Sprawdza, czy obrazy w potoku obrazów nie zostały zniekształcone lub nieoczekiwanie przycięte. Robi zdjęcia okręgu na wszystkich formatach. Okrąg nie jest zniekształcony, okrąg nie przesuwa się od środka obrazu ani nie zmienia nieprawidłowo rozmiaru w zależności od formatu obrazu lub rozdzielczości.
Przetestowane interfejsy API:
android.hardware.camera2.CaptureResult#LENS_DISTORTION
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
android.hardware.camera2.CaptureResult#LENS_INTRINSIC_CALIBRATION
Prawidłowy: obrazy nie są rozciągnięte, ich środki nie różnią się o więcej niż 3% i zachowywana jest maksymalna możliwa wartość FoV (pole widzenia).
Mechanizmy niepowodzenia:
- Aparat nie jest ustawiony na okrągłym wyświetlonym na tablecie w środkowej części ujęcia.
- Okrąg na zrobionym obrazie jest zniekształcony przez potok przetwarzania.
- Obraz w niższej rozdzielczości jest dwukrotnie przycinany w ramach potoku obrazu, powodując odmienny obraz w wysokiej i niskiej rozdzielczości.
- Okrąg na zrobionym zdjęciu jest przycięty z powodu zbyt wysokiego współczynnika proporcji, co zmniejsza wysokość lub szerokość obrazu.
- Okrąg na zrobionym zdjęciu ma odbicie w środkowej części i nie jest w pełni wypełnione.
test_wyrównania_wielu_kamery
Testowanie parametrów kalibracji kamery związanych z pozycjonowaniem w systemach z wieloma kamerami. Za pomocą fizycznych aparatów podrzędnych z wieloma aparatami robi zdjęcie jednym z tych aparatów. Znajduje środek okręgu. Rzuca środek okręgu na współrzędne świata dla każdej kamery. Porównuje różnice między środkami okręgów aparatów we współrzędnych świata. Odwzorowuje współrzędne świata na współrzędne pikseli i porównuje je z oryginalnymi w ramach kontroli poprawności. Porównuje rozmiary kół, sprawdzając, czy ogniskowe aparatów są różne.
Przetestowane interfejsy API:
android.hardware.camera2.CameraCharacteristics#getPhysicalCameraIds()
android.hardware.camera2.CameraCharacteristics#LENS_DISTORTION
android.hardware.camera2.CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
android.hardware.camera2.CameraCharacteristics#LENS_INTRINSIC_CALIBRATION
android.hardware.camera2.CameraCharacteristics#LENS_POSE_ROTATION
android.hardware.camera2.CameraCharacteristics#LENS_POSE_TRANSLATION
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
android.hardware.camera2.CaptureRequest#SCALER_CROP_REGION
android.hardware.camera2.CaptureRequest#DISTORTION_CORRECTION_MODE
Spełnianie wymogów: centra i rozmiary okręgów są zgodne z oczekiwaniami na wyświetlanych obrazach w porównaniu z obrazami zrobionymi przy użyciu danych kalibracyjnych i ognisk.
Mechanizmy niepowodzenia:
LENS_INTRINSIC_CALIBRATION
,LENS_POSE_TRANSLATION
lubLENS_POSE_ROTATION
to wartości projektowe, a nie rzeczywiste dane kalibracyjne.- Aparat jest nieodpowiedni do konfiguracji testu. Dotyczy to na przykład testowania szerokiego i ultraszerokokątnego systemu aparatów za pomocą urządzenia do testowania RFoV. Więcej informacji znajdziesz w odpowiedziach na najczęstsze pytania dotyczące kamery ITS w pakiecie1.
współczynnik_podglądu_testu_i_przycięcie
Podobnie jak w przypadku testu test_aspect_ratio_and_crop w przypadku zrzutów nieruchomych ten test sprawdza obsługiwane formaty podglądu, aby mieć pewność, że klatki podglądu nie zostaną odpowiednio rozciągnięte lub przycięte. Sprawdza, czy współczynnik proporcji okręgu nie zmienia się, przycięte obrazy utrzymują okrąg na środku klatki, a rozmiar okręgu nie zmienia się w przypadku stałego formatu lub różnych rozdzielczości (sprawdzanie pola widzenia).
Przetestowane interfejsy API:
android.hardware.camera2.CaptureResult#LENS_DISTORTION
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
android.hardware.camera2.CaptureResult#LENS_INTRINSIC_CALIBRATION
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.media.MediaRecorder
android.media.CamcorderProfile
Prawidłowy: obrazy nie są rozciągnięte, ich środki nie różnią się o więcej niż 3%, a maksymalne pole widzenia (FV) jest zachowywane.
stabilizacja_testu_podglądu
Sprawdza obsługiwane rozmiary podglądu, aby upewnić się, że FoV jest odpowiednio przycięty.
Test rejestruje 2 filmy, jeden ze stabilizacją w podglądzie ON
, a drugi ze stabilizacją w podglądzie OFF
. Z każdego filmu wybierana jest reprezentatywna klatka, a następnie analizowana, aby mieć pewność, że zmiany zmiennej FoV w obu filmach są zgodne ze specyfikacją.
Przetestowane interfejsy API:
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.media.MediaRecorder
android.media.CamcorderProfile
Prawidłowy: współczynnik proporcji okręgu jest stały, środek okręgu jest niezmienny, a rozmiar okręgu nie zmienia się więcej niż o 20%.
współczynnik_parametru_testu_filmu_i_przycięcie
Nagrywa filmy koła wewnątrz kwadratu we wszystkich formatach wideo. Wyodrębnia klatki kluczowe i sprawdza, czy format okręgu się nie zmienia, przycięte obrazy utrzymują okrąg w środku, a rozmiar okręgu nie zmienia się w przypadku stałego formatu lub innej rozdzielczości (sprawdzanie pola widzenia).
Przetestowane interfejsy API:
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.hardware.camera2.CaptureResult#LENS_DISTORTION
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
android.hardware.camera2.CaptureResult#LENS_INTRINSIC_CALIBRATION
android.media.MediaRecorder
android.media.CamcorderProfile
Pass: klatki w filmie nie są rozciągnięte, środek klatek nie różni się o więcej niż 3%, a maksymalne pole widzenia jest zachowywane.
scena5
Scene5 wymaga równomiernie oświetlonej szarej sceny. Służy do tego dyfuzor
nad obiektywem aparatu. Zalecamy następujący dyfuzor: www.edmundoptics.com/optics/window-diffusers/optical-diffusers/opal-diffusing-glass/46168
.
Aby przygotować scenę, zamocuj dyfuzor przed kamerą i skieruj obiektyw na źródło światła o mocy około 2000 luksów. Zdjęcia przedstawiające scenę5 wymagają rozproszonego oświetlenia bez widocznych cech. Oto przykładowy obraz:
ujęcie sceny 5
testowy_obiektyw_cieniowanie_i_jednolitość_koloru
Sprawdza, czy korekcja cieniowania obiektywu jest stosowana prawidłowo, a kolor jednolitego obrazu jest równomiernie rozłożony. Ten test wykonuje na ramce YUV z automatycznym 3A. Cieniowanie obiektywu jest oceniane na podstawie kanału Y. Mierzy średnią wartość y dla każdego określonego przykładowego bloku i określa pomyślność lub niepowodzenie, porównując wartość ze środkową wartością y. Test jednorodności kolorów jest oceniany w przestrzeni r/g i b/g.
Przetestowane interfejsy API:
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
Powodzenie: w określonym promieniu obrazu wariancja wartości r/g i b/g musi być mniejsza niż 20%, aby można było ukończyć test.
scena6
Scene6 to siatka małych okręgów z kwadratem w jednym rogu wskazującym orientację. Małe okręgi są potrzebne do przetestowania funkcji powiększenia w dużym zakresie.
scena6
test_powiększenia_czujnika
Testuje działanie funkcji powiększenia w aparacie, która generuje przycięte obrazy w formacie RAW.
Gdy przypadek użycia strumienia jest ustawiony na CROPPED_RAW
, test obejmuje 2 zdjęcia RAW: obraz RAW z pełnym polem widzenia (FoV) i przycięty obraz RAW. W ramach testu konwertowane są obrazy na macierze RGB, skalowane w dół w pełnym rozmiarze przycięty obraz RAW do rozmiaru zgłaszanego przez funkcję SCALER_RAW_CROP_REGION
i oblicza różnicę między średnią kwadratową pierwiastków 3D (RMS).
Przetestowane interfejsy API:
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.hardware.camera2.CameraMetadata#SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
android.hardware.camera2.CaptureResult#SCALER_RAW_CROP_REGION
Prawidłowo: różnica średniej kwadratowej pierwiastka 3D (RMS) między przyciętym obrazem RAW przyciętym w dół a pełnym zdjęciem RAW w formacie FoV wynosi mniej niż 1%.
testowy_powiększenie
Testuje działanie powiększenia. Robi zdjęcia w zakresie powiększenia i sprawdza, czy okręgi powiększają się w miarę powiększania kamery.
Przetestowane interfejsy API:
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
android.hardware.camera2.CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
Prawidłowy: względny rozmiar zarejestrowanego okręgu jest zgodny z żądanym współczynnikiem powiększenia, aby aparat prawidłowo powiększał obraz.
test_zoom , aby znaleźć kontur okręgu najbliżej środka.
test_małe_opóźnienia_powiększenia
Testuje działanie powiększenia z małym opóźnieniem. Powoduje wykonanie zdjęć w zakresie powiększenia za pomocą funkcji android.control.settingsOverride = 1 (SETTINGS_OVERRIDE_ZOOM)
i sprawdzanie, czy okręgi na obrazach wyjściowych odpowiadają współczynnikom powiększenia w metadanych przechwytywania.
Przetestowane interfejsy API:
android.hardware.camera2.CameraCharacteristics#CONTROL_AVAILABLE_SETTINGS_OVERRIDES
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
android.hardware.camera2.CaptureRequest#CONTROL_SETTINGS_OVERRIDE
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
android.hardware.camera2.CaptureResult#CONTROL_SETTINGS_OVERRIDE
Prawidłowy: względny rozmiar przechwyconego okręgu jest zgodny z metadanymi wyniku współczynnika powiększenia.
test_preview_video_zoom_match
Sprawdza, czy podczas nagrywania i powiększania podgląd wideo i wyjście wideo wyświetlają się, a także rejestruje te same wyniki. Oblicza rozmiar okręgu znajdującego się najbliżej środka przy różnych współczynnikach powiększenia i sprawdza, czy rozmiar okręgu rośnie wraz ze wzrostem współczynnika powiększenia.
Przetestowane interfejsy API:
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
android.hardware.camera2.CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
Prawidłowy: względny rozmiar nagranego okręgu jest zgodny z żądanym współczynnikiem powiększenia w filmie i podglądzie.
VGA_640x480_key_frame.png (przed powiększeniem)
podgląd_640x480_key_frame.png (przed powiększeniem)
VGA_640x480_key_frame.png (po powiększeniu)
preview_640x480_key_frame.png (po powiększeniu)
rozszerzenia_scen
Testy scene_extensions
dotyczą rozszerzeń kamery i muszą korzystać z opcji Camera ITS-in-a-Box, ponieważ wymaga dokładnej kontroli środowiska testowego.
scena_hdr
Scena w usłudze scene_hdr
składa się z portretu po lewej stronie i o niskim kontraście po prawej stronie.
scena_hdr
test_rozszerzenie_hdr
Testuje rozszerzenie HDR. Robi zdjęcia z włączonym i wyłączonym rozszerzeniem oraz sprawdza, czy rozszerzenie sprawia, że kod QR jest lepiej wykrywalny.
Przetestowane interfejsy API:
android.hardware.camera2.CameraExtensionCharacteristics#getSupportedExtensions
android.hardware.camera2.CameraExtensionSession#capture
Powodzenie: rozszerzenie HDR zmniejsza liczbę zmian kontrastu potrzebnych do wykrycia kodu QR lub zmniejsza gradient w obrębie tego kodu.
scena_noc
Scena scene_night
składa się z białego okręgu z 4 mniejszymi okręgami w środku, które są umieszczone na czarnym tle. Mniejsze kółko w prawym górnym rogu jest ciemniejsze od pozostałych, aby wskazać orientację.
scena_noc
test_night_extension
Testowanie rozszerzenia Noc. Przechwytuje z włączonym i wyłączonym rozszerzeniem oraz sprawdza, czy:
- Robienie zdjęć przy włączonym rozszerzeniu Noc trwa dłużej.
- Zdjęcie z włączonym rozszerzeniem Noc jest jaśniejsze lub zawiera artefakty lepiej wyglądające.
Przetestowane interfejsy API:
android.hardware.camera2.CameraExtensionCharacteristics#getSupportedExtensions
android.hardware.camera2.CameraExtensionSession#capture
Pass: w porównaniu do nagrywania bez włączonego rozszerzenia Noc film z włączonym rozszerzeniem Noc trwa o co najmniej 0, 5 sekundy dłużej. Zdjęcie musi być o co najmniej 10% jaśniejsze lub, gdy szare punkty w scenie muszą być o 20 pikseli mniejsze od środka otaczającego okręgu.
czujnik_fuzji
Testy czujnika Fusion wymagają określonego ruchu telefonu na tle wzorów w szachownicę. Aby uzyskać optymalne wyniki, upewnij się, że wykres testowy jest zamontowany na płasko. Wykresy, które nie są płaskie, wpływają na obliczenia rotacji w wielu testach.
Testy sensor_fusion
można zautomatyzować za pomocą urządzenia Sensor Fusion Box.
Obraz szachownicy
testowa_synchronizacja_ramki_wielu_kamery
Testy, które wskazują sygnatury czasowe zarejestrowane przez kamerę logiczną, trwają nie dłużej niż 10 ms, ponieważ obliczają kąty kwadratów w obrębie szachownicy, aby ustalić sygnaturę czasową.
Przetestowane interfejsy API:
android.hardware.camera2.CameraCharacteristics#LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
android.hardware.camera2.CameraCharacteristics#getPhysicalCameraIds()
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
android.hardware.camera2.params.OutputConfiguration#setPhysicalCameraId()
Prawidłowo: kąt między obrazami z każdego aparatu nie zmienia się znacząco podczas obracania telefonu.
test_preview_stabilization
Testy, w których stabilizowany podgląd wideo obraca się rzadziej niż żyroskop.
Przetestowane interfejsy API:
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.media.MediaRecorder
android.media.CamcorderProfile
Prawidłowy: maksymalny obrót kąta wokół klatek wynosi mniej niż 70% obrotu żyroskopu.
Poniżej znajdziesz przykładowe filmy ze stabilizacją i bez niej.
Przykładowy film ze stabilizacją
Przykładowy film bez stabilizacji
test_fuzji
Testuje różnicę w sygnaturach czasowych między aparatem i żyroskopem w przypadku aplikacji AR i VR. Telefon jest obrócony o 90 stopni 10 razy na tle wzoru tablicy. Ruch w obie strony trwa około 2 sekund. Ten test jest pomijany, jeśli nie uwzględniono żyroskopu lub jeśli parametr REALTIME
źródła sygnatury czasowej nie jest włączony.
Test test_sensor_fusion
generuje pewną liczbę wykresów. Oto 2 najważniejsze kwestie, które należy wziąć pod uwagę przy debugowaniu:
test_sensor_fusion_gyro_events
: pokazuje zdarzenia żyroskopu dla telefonu podczas testu. Ruch w kierunku x i y oznacza, że telefon nie jest bezpiecznie zamocowany na uchwycie ściennym, co zmniejsza prawdopodobieństwo pomyślnego wyniku testu. Liczba cykli na wykresie zależy od prędkości zapisu podczas zapisywania klatek.test_sensor_fusion_gyro_events
test_sensor_fusion_plot_rotations
: pokazuje wyrównanie zdarzeń żyroskopu i kamery. Wykres musi pokazywać ruchy między aparatem i żyroskopem o wartości +/-1 ms.obroty_czujnika_fuzji_testowej
Przetestowane interfejsy API:
android.hardware.camera2.CameraCharacteristics#LENS_FACING
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_TIMESTAMP_SOURCE
android.hardware.camera2.CameraMetadata#SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME
android.hardware.camera2.CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE
android.hardware.camera2.CaptureRequest#SENSOR_FRAME_DURATION
android.hardware.camera2.CaptureRequest#SENSOR_TIMESTAMP
android.hardware.camera2.CaptureResult#SENSOR_ROLLING_SHUTTER_SKEW
Prawidłowy: przesunięcie sygnatur czasowych kamery i żyroskopu wynosi mniej niż 1 ms, zgodnie z sekcją 7.3.9 Czujniki wysokiej jakości w CDD [C-2-14].
Mechanizmy niepowodzenia:
- Błąd przesunięcia: przesunięcie żyroskopu aparatu nie jest prawidłowo skalibrowane z zakresu +/-1 ms.
- Utracone klatki: potok nie jest wystarczająco szybki, aby przechwycić 200 klatek naraz.
- Błędy gniazd:
adb
nie może prawidłowo połączyć się z DUT na tyle długo, aby przeprowadzić test. - Wykres nie jest zamontowany płasko. Wykres
test_sensor_fusion_plot_rotations
zawiera ramki, w których żyroskop i obrót kamery znacznie się różnią, ponieważ kamera obraca się po częściach wykresu, które nie są płaskie. - Kamera nie jest zamontowana płasko. Wykres
test_sensor_fusion_gyro_events
pokazuje ruch na płaszczyznach X i Y. Ten błąd występuje częściej w przypadku przednich aparatów, ponieważ tylny aparat często ma wypukłe wygięcie w pobliżu korpusu telefonu, co powoduje przechylenie podczas mocowania tylnej części telefonu do uchwytu ściennego.
test_stabilizacji_wideo
Testy, w których stabilizowany obraz obraca się mniej niż żyroskop.
Przetestowane interfejsy API:
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.media.MediaRecorder
android.media.CamcorderProfile
Prawidłowy: maksymalny obrót kąta wokół klatek wynosi mniej niż 60% obrotu żyroskopu.
Poniżej znajdziesz przykładowe filmy ze stabilizacją i bez niej.
Przykładowy film ze stabilizacją
Przykładowy film bez stabilizacji
zrzut_testu_ledów
Sprawdza, czy migawki LED nie są nasycone ani zabarwione.
W ramach tego testu do czujnika czujnika Fusion dodaje się kontroler oświetlenia, który steruje oświetleniem. Gdy diody są ustawione na OFF
, test wykonuje zdjęcie z trybem AUTO_FLASH
ustawionym na ON
. Podczas tego przechwytywania test uruchamia sekwencję wstępnego przechwytywania z regułą aePrecapture
ustawioną na START
i ustawia intencję przechwytywania na Preview
, co pozwala na przechwytywanie z użyciem Flasha.
Ze względu na to, że zapis ma charakterystyczny hotspot z powodu Flasha, test oblicza średnią wartość obrazu Flash dla całego przechwytywania i sprawdza, czy ta wartość mieści się w zakresie (68 i 102). Aby sprawdzić, czy w obrazie występuje rozsądny balans bieli, test oblicza współczynniki R/G i B/G oraz sprawdza, czy mieści się on w przedziale od 0,95 do 1,05.
Przetestowane interfejsy API:
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_AVAILABLE
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
android.hardware.camera2.CaptureRequest#FLASH_MODE
Powodzenie: współczynniki R/G i B/G mieszczą się w zakresie od 0,95 do 1,05. Średnia dla grafiki Flash mieści się w zakresie (68, 102).