Тесты ITS камеры

На этой странице представлен полный список тестов в рамках набора тестов изображения камеры (ITS), который является частью набора тестов совместимости с Android (CTS) Verifier. Тесты ITS являются функциональными тестами, что означает, что они не измеряют качество изображения, но все заявленные функции камеры работают должным образом. Этот документ позволяет разработчикам и тестировщикам понять, что делают отдельные тесты и как отлаживать сбои тестов.

Тесты сгруппированы по сценам следующим образом:

  • scene0 : захват метаданных, дрожание, гироскоп, вибрация
  • сцена 1 : экспозиция, чувствительность, экспокоррекция, YUV и JPEG/RAW
  • Сцена 2 : Распознавание лиц
  • scene3 : Улучшение краев, движение объектива
  • scene4 : Соотношение сторон, кадрирование, поле зрения
  • сцена 5 : Затенение объектива
  • сцена 6 : Масштаб
  • sensor_fusion : Смещение времени камеры/гироскопа

Смотрите отдельные разделы для описания каждой сцены.

сцена0

Тесты Scene0 не требуют конкретной информации о сцене. Тем не менее, телефон должен быть неподвижен для проверки гироскопом и вибрацией.

test_burst_capture

Проверяет, может ли весь конвейер захвата соответствовать скорости полноразмерного захвата и процессорному времени.

Протестированные API:

Pass: захватывает серию полноразмерных изображений, и камера работает достаточно быстро, чтобы избежать тайм-аута.

test_capture_result_dump

Проверяет, что результат захвата возвращается из захвата вручную, а затем выводит его.

Протестированные API:

Pass: завершает захват и выводит результаты захвата.

test_gyro_bias

Проверяет, имеет ли гироскоп стабильный выходной сигнал, когда устройство неподвижно. Данные отображаются как среднее значение по 20 точкам данных.

Протестированные API:

Пройдено: дельта показаний гироскопа с течением времени меньше 0,01.

test_gyro_bias_plot.png

test_gyro_bias_plot.png

test_jitter

Измеряет дрожание временных меток камеры.

Протестированные API:

Пройдено: дельта между кадрами составляет не менее 30 мс.

test_jitter_plot.png

test_jitter_plot.png (Обратите внимание на небольшой диапазон по оси Y. Джиттер на этом графике на самом деле мал.)

test_metadata

Проверяет достоверность записей метаданных. Смотрит на результаты захвата и на объекты характеристик камеры. В этом тесте используются значения экспозиции и усиления auto_capture_request , поскольку содержимое изображения не имеет значения.

Протестированные API:

Пройдено : Аппаратный уровень, rollingShutterSkew , frameDuration , timestampSource , croppingType , blackLevelPattern , pixel_pitch , FOV, гиперфокальное расстояние присутствуют и имеют допустимые значения.

test_param_sensitivity_burst

Проверяет правильность применения параметра android.sensor.sensitivity в пакетном режиме. Проверяет только выходные метаданные.

Протестированные API:

Пройдено: допустимая погрешность выходных данных составляет менее 0,2%.

test_read_write

Проверяет, записывает ли устройство правильные значения экспозиции и усиления, считывая метаданные захвата.

Протестированные API:

Pass: значения чтения и записи совпадают для всех снимков.

test_sensor_events

Проверяет, что устройство запрашивает и распечатывает события датчика для устройств, которые рекламируют поддержку слияния датчиков. Ожидаемые датчики — акселерометр, гироскоп и магнитометр. Этот тест работает, только если экран включен, то есть устройство не находится в режиме ожидания.

Протестированные API:

Pass: Получены события для каждого датчика.

test_solid_color_test_pattern

Проверяет правильность создания тестовых шаблонов сплошного цвета для отключения звука камеры. Если поддерживается отключение звука камеры, должны поддерживаться тестовые шаблоны сплошного цвета. Если отключение звука камеры не поддерживается, тестовые шаблоны сплошного цвета проверяются только в том случае, если эта возможность объявлена.

Если изображения RAW поддерживаются, также проверяется назначение цвета. Тестируемые цвета: черный, белый, красный, синий и зеленый. Для камер, не поддерживающих изображения в формате RAW, тестируется только черный цвет.

Протестированные API:

Пройдено: поддерживаемые сплошные тестовые шаблоны имеют правильный цвет и низкую дисперсию изображения.

test_test_pattern

Проверяет параметр android.sensor.testPatternMode для захвата кадров для каждого допустимого тестового шаблона и проверяет правильность создания кадров для сплошных цветов и цветных полос. Этот тест включает в себя следующие шаги:

  1. Захватывает изображения для всех поддерживаемых тестовых шаблонов.
  2. Выполняет простую проверку правильности тестового шаблона сплошного цвета и цветных полос.

Протестированные API:

Пройдено: поддерживаемые тестовые шаблоны генерируются правильно.

test_test_patterns_2

test_test_patterns_2.jpg

test_tonemap_curve

Проверяет преобразование тестового шаблона из RAW в YUV с линейной тональной картой. Для этого теста требуется android.sensor.testPatternMode = 2 (COLOR_BARS) для создания идеального шаблона изображения для преобразования тональной карты. Гарантирует, что конвейер имеет правильные цветовые выходные данные с линейной тональной картой и идеальным входным изображением (зависит от test_test_patterns ).

Протестированные API:

Пройдено: YUV и RAW похожи друг на друга.

test_tonemap_curve_raw_2

test_tonemap_curve_raw_2.jpg

test_tonemap_curve_yuv_2.jpg

test_tonemap_curve_yuv_2.jpg

test_unified_timestamp

Проверяет, находятся ли события изображения и датчика движения в одном и том же временном интервале.

Протестированные API:

Pass: временные метки движения находятся между двумя временными метками изображения.

test_vibration_restriction

Проверяет, работает ли вибрация устройства должным образом.

Протестированные API:

Пройдено: устройство не вибрирует при отключении звука с помощью API ограничения звука камеры.

Сцена 1

Сцена 1 — это серая диаграмма. Серая диаграмма должна покрывать центральные 30% поля зрения камеры. Ожидается, что серая диаграмма вызовет проблемы с 3A (автоматическая экспозиция, автоматический баланс белого, автофокус), поскольку центральная область не имеет особенностей. Однако в запросе захвата указывается вся сцена, которая включает в себя достаточно признаков для сходимости 3A.

Камеры RFoV можно протестировать на испытательном стенде WFoV или RFoV. Если камера RFoV тестируется на испытательном стенде WFoV, диаграмма масштабируется на ⅔, чтобы обеспечить некоторые границы для серой диаграммы в поле зрения, чтобы помочь сходимости 3A.

Сцена 1

Сцена 1: Полноразмерная диаграмма (слева). График в масштабе ⅔ (справа).

test_3a

Проверяет сходимость 3A с умеренно сложной целью.

Протестированные API:

Pass: 3A сходится, и возвращенные значения 3A действительны.

test_ae_af

Тестирует алгоритмы автоматической экспозиции (AE) и автоматической фокусировки (AF) 3A по отдельности.

Протестированные API:

Пройдено: 3A сходится, и возвращенные значения 3A допустимы.

test_ae_precapture_trigger

Проверяет конечный автомат AE при использовании триггера предварительного захвата. Захватывает пять ручных запросов с отключенным AE. Последний запрос имеет триггер предварительного захвата AE, который следует игнорировать, поскольку AE отключен.

Протестированные API:

Пройдено: AE сходится.

test_auto_vs_manual

Тесты, в которых снимались автоматические и ручные снимки, выглядят одинаково.

Протестированные API:

Пройдено: ручное усиление баланса белого и преобразование, указанные в каждом результате захвата, совпадают с estimate автоматического баланса белого из алгоритма 3A камеры.

test_auto_vs_manual_auto

test_auto_vs_manual_auto.jpg

test_auto_vs_manual_wb

test_auto_vs_manual_wb.jpg

test_auto_vs_manual_manual_wb_tm

test_auto_vs_manual_manual_wb_tm.jpg

test_black_white

Проверяет, что устройство создает полностью черно-белые изображения. Делает два снимка: первый с очень низким усилением и короткой выдержкой, в результате чего получается черная фотография, а второй — с очень высоким усилением и длинной выдержкой, в результате чего получается белая фотография.

Протестированные API:

Pass: создает черно-белые изображения.

test_black_white_blacktest_black_white_black
test_black_white_black.jpg test_black_white_white.jpg

test_black_white_plot_means

test_black_white_plot_means.png

test_burst_sameness_manual

Делает 5 серий из 50 изображений с ручной настройкой захвата и проверяет их идентичность. Этот тест можно использовать для определения наличия спорадических кадров, которые обрабатываются по-разному или содержат артефакты.

Протестированные API:

Pass: изображения идентичны визуально и в значениях RGB.

Сбой: показывает всплеск или падение средней диаграммы RGB в начале каждого пакета.

  • Допуск составляет 3 % для first_API_level < 30.
  • Допуск составляет 2 % для first_API_level >= 30.

test_burst_sameness_manual_mean

test_burst_sameness_manual_mean.jpg

test_burst_sameness_manual_plot_means

test_burst_sameness_manual_plot_means.png

test_capture_result

Проверяет, возвращаются ли действительные данные в объектах CaptureResult . Делает автоматический, ручной и автоматический захват.

Протестированные API:

Pass: Метаданные действительны для всех захватов, а ручные настройки не просачиваются во второй автоматический захват. Выводит коррекцию затенения объектива для снимков.

test_capture_result_plot_lsc_auto_ch0

test_capture_result_plot_lsc_auto_ch0.png

test_channel_saturation

Проверяет равномерность насыщения каналов RGB для устранения оттенка в насыщенных областях изображения.

Протестированные API:

Pass: Насыщенные каналы имеют значения RGB [255, 255, 255] с погрешностью менее 1%.

test_channel_saturation

test_channel_saturation.jpg

test_crop_region_raw

Проверяет, что потоки RAW нельзя обрезать.

Протестированные API:

Пройдено: изображения YUV обрезаются по центру, но не изображения RAW.

test_crop_region_raw_comp_raw_crop

test_crop_region_raw_comp_raw_crop.jpg

test_crop_region_raw_comp_raw_full

test_crop_region_raw_comp_raw_full.jpg

test_crop_region_raw_comp_yuv_crop

test_crop_region_raw_comp_yuv_crop.jpg

test_crop_region_raw_yuv_full

test_crop_region_raw_yuv_full.jpg

test_crop_regions

Проверяет, что регионы обрезки работают. Делает полное изображение и создает заплатки из 5 различных областей (углы и центр). Берет изображения с набором обрезки для 5 областей. Сравнивает значения патча и кадрированного изображения.

Протестированные API:

Пройдено: изображение обрезанной области соответствует патчу, соответствующему изображению обрезания.

test_dng_noise_model

Проверяет правильность параметров необработанной модели DNG. На графике показана измеренная дисперсия центрального участка серой карты в необработанных снимках, снятых в диапазоне значений чувствительности, и сравниваются эти значения с дисперсией, ожидаемой для каждой чувствительности с помощью модели шума DNG в камере HAL (на основе параметры O,S, возвращаемые в объектах результатов захвата). Для получения более подробной информации о модели шума DNG загрузите следующий документ о модели шума DNG .

Протестированные API:

Пройдено: параметры необработанной модели DNG верны. Ожидаемые значения RGB совпадают с фактически измеренными значениями RGB.

test_dng_noise_model_plog

test_dng_noise_model_plog.png

test_ev_compensation_advanced

Проверяет, применяется ли компенсация значения экспозиции (EV). Тест увеличивает экспозицию на восемь шагов и сравнивает измеренную яркость с ожидаемой яркостью. Ожидаемые значения рассчитываются на основе яркости изображения без применения компенсации EV, и ожидаемое значение достигает насыщения, если расчетные значения превышают диапазон значений фактического изображения. Тест не пройден, если ожидаемые значения и измеренные значения не совпадают или изображения переэкспонированы в течение пяти шагов.

Протестированные API:

Pass: изображения показывают увеличение экспозиции без передержки в течение пяти шагов.

test_ev_compensation_advanced_plot_means

test_ev_compensation_advanced_plot_means.png

test_ev_compensation_basic

Проверяет, что компенсация EV применяется с использованием диапазона, созданного с помощью CONTROL_AE_COMPENSATION_STEP . При каждом значении компенсации фиксируется восемь кадров.

Протестированные API:

Pass: фиксирует увеличение яркости при увеличении значения компенсации EV, и восемь кадров, снятых для каждого значения компенсации EV, имеют стабильные значения яркости.

test_ev_compensation_basic

test_ev_compensation_basic.png

test_exposure

Проверяет, достигается ли постоянная экспозиция при изменении ISO и времени экспозиции. Делает серию снимков, в которых значения ISO и время экспозиции подобраны так, чтобы сбалансировать друг друга. Результаты должны иметь одинаковую яркость, но в последовательности изображение должно становиться более шумным. Проверяет, что средние значения пикселей выборки близки друг к другу. Гарантирует, что изображения не привязаны к 0 или 1 (что сделало бы их похожими на плоские линии). Тест также можно запустить с изображениями RAW, установив флаг debug в файле конфигурации.

Протестированные API:

Пройдено: изображения имеют одинаковую яркость, но становятся более шумными при более высоком значении ISO. Плоскости RGB являются плоскими, когда значение экспозиции ISO* постоянно в тестируемом пространстве усиления.

test_exposure_plot_means

test_exposure_plot_means.png

test_exposure_mult=1.00test_exposure_mult = 64,00
test_exposure_mult=1.00.jpg test_exposure_mult=64.00.jpg

test_jpeg

Тесты, которые конвертировали изображения YUV и изображения JPEG устройства, выглядят одинаково. Тест берет центральные 10% изображения, вычисляет значение RGB и проверяет их совпадение.

Протестированные API:

Pass: средняя разница RGB между каждым изображением составляет менее 3%.

test_jpeg_fmt=jpg.jpgtest_jpeg=fmt=yuv.jpg
test_jpeg_fmt=jpg.jpg test_jpeg=fmt=yuv.jpg

test_latching

Проверяет, что настройки (экспозиции и усиления) фиксируются на правом кадре для камер FULL и LEVEL_3 . Делает серию снимков, используя последовательные запросы, изменяя параметры запроса захвата между снимками. Проверяет, что изображения имеют ожидаемые свойства.

Протестированные API:

Пройдено: изображения [2, 3, 6, 8, 10, 12, 13] имеют повышенный ISO или экспозицию и отображаются с более высокими средними значениями RGB на test_latching_plot_means.png .

test_latching_i=00.jpgtest_latching_i=01.jpgtest_latching_i=02.jpg
test_latching_i=00.jpg test_latching_i=01.jpg test_latching_i=02.jpg
test_latching_i=03.jpgtest_latching_i=04.jpgtest_latching_i=05.jpg
test_latching_i=03.jpg test_latching_i=04.jpg test_latching_i=05.jpg
test_latching_i=06.jpgtest_latching_i=07.jpgtest_latching_i=08.jpg
test_latching_i=06.jpg test_latching_i=07.jpg test_latching_i=08.jpg
test_latching_i=09.jpgtest_latching_i=10.jpgtest_latching_i=11.jpg
test_latching_i=09.jpg test_latching_i=10.jpg test_latching_i=11.jpg
test_latching_i=12.jpg
test_latching_i=12.jpg

test_latching_plot_means

test_latching_plot_means.png

test_linearity

Проверяет, что обработка устройства может быть преобразована в линейные пиксели. Делает серию снимков с наведением устройства на однородную цель.

Протестированные API:

Пройдено: значения R, G, B должны увеличиваться линейно с увеличением чувствительности.

test_linearity_plot_means

test_linearity_plot_means.png

test_locked_burst

Проверяет блокировку 3A и всплеск YUV (с использованием автоматической настройки). Этот тест предназначен для прохождения даже на ограниченных устройствах, которые не имеют MANUAL_SENSOR или PER_FRAME_CONTROLS . Тест проверяет согласованность изображения YUV, в то время как проверка частоты кадров выполняется в CTS.

Протестированные API:

Pass: Захваты выглядят последовательно.

test_locked_burst_frame0

test_locked_burst_frame0.jpg

test_locked_burst_frame1

test_locked_burst_frame1.jpg

test_locked_burst_frame2

test_locked_burst_frame2.jpg

test_multi_camera_match

Проверяет, дают ли несколько камер на устройствах одинаковые значения RGB для серого пятна.

Протестированные API:

Пройдено: разные камеры выдают одинаковые значения RGB для одного и того же серого пятна.

test_multi_camera+match_yuv_fl=4,38

test_multi_camera+match_yuv_fl=4.38.jpg

test_param_color_correction

Проверяет, что параметры android.colorCorrection.* применяются при установке. Делает снимки с разными значениями преобразования и усиления и проверяет, что они выглядят соответственно по-разному. Преобразование и коэффициенты усиления выбираются таким образом, чтобы сделать вывод все более красным или синим. Использует линейную тональную карту. Тональное отображение — это метод, используемый при обработке изображений для сопоставления одного набора цветов с другим, чтобы приблизить внешний вид изображений с высоким динамическим диапазоном в среде с более ограниченным динамическим диапазоном.

Протестированные API:

Pass: значения R и B повышаются в соответствии с трансформацией.

test_param_color_correction_plot_means

test_param_color_correction_plot_means.png

*Ось X — это запросы на захват: 0 = единица, 1 = усиление красного цвета, 2 = усиление синего цвета.

test_param_color_correction_req=0

test_param_color_correction_req=0.jpg

test_param_color_correctness_req=1

test_param_color_correctness_req=1.jpg (повышение R)

test_param_color_correction_req=2

test_param_color_correction_req=2.jpg (повышение B)

test_param_exposure_time

Проверяет применение параметра android.sensor.exposureTime .

Протестированные API:

Pass: каждый снимок ярче предыдущего.

test_param_exposure_time_frame0

test_param_exposure_time_frame0.jpg

test_param_exposure_time_plot

test_param_exposure_time_plot.png

test_param_flash_mode

Проверяет применение параметра android.flash.mode . Вручную устанавливает экспозицию на темную сторону, чтобы было очевидно, сработала вспышка или нет, и использует линейную тональную карту. Сравнивает центр с мозаичным изображением, чтобы увидеть, есть ли большой градиент, созданный для проверки того, сработала ли вспышка.

Протестированные API:

Пройдено: центр фрагмента изображения имеет большой градиент, означающий, что сработала вспышка.

test_param_flash_mode_1

test_param_flash_mode_1.jpg

test_param_flash_mode_1_tile

test_param_flash_mode_1_tile.jpg

test_param_flash_mode_2

test_param_flash_mode_2.jpg

test_param_flash_mode_2_tile

test_param_flash_mode_2_tile.jpg

test_param_noise_reduction

Проверяет правильность применения параметра android.noiseReduction.mode при его установке. Делает снимки с тускло освещенной камерой. Использует высокое аналоговое усиление, чтобы захваченное изображение было зашумленным. Захватывает три изображения: для отключения шумоподавления, «быстро» и «высококачественно». Также захватывает изображение с низким усилением и выключенным шумоподавлением, и использует его дисперсию в качестве базовой линии. Чем выше SNR (отношение сигнал/шум), тем лучше качество изображения.

Протестированные API:

Пройдено: отношение сигнал-шум варьируется в зависимости от различных режимов шумоподавления и ведет себя так же, как на графике ниже.

test_param_noise_reduction_plot_SNRs

test_param_noise_reduction_plot_SNRs.png

0: ВЫКЛ, 1: БЫСТРО, 2: HQ, 3: МИН, 4: ZSL

test_param_noise_reduction_high_gain_nr=0

test_param_noise_reduction_high_gain_nr=0.jpg

test_param_noise_reduction_high_gain_nr=1

test_param_noise_reduction_high_gain_nr=1.jpg

test_param_noise_reduction_high_gain_nr=2

test_param_noise_reduction_high_gain_nr=2.jpg

test_param_noise_reduction_high_gain_nr=3

test_param_noise_reduction_high_gain_nr=3.jpg

test_param_noise_reduction_low_gain

test_param_noise_reduction_low_gain.jpg

test_param_sensitivity

Проверяет применение параметра android.sensor.sensitivity . Тест увеличивает чувствительность в 5 шагов с фиксированной экспозицией для каждого снимка.

Протестированные API:

Pass: RGB означает, что центр на 10% становится ярче с увеличением чувствительности.

test_param_sensitivity_iso=0055

test_param_sensitivity_iso=0055.jpg

test_param_sensitivity_iso=1819

test_param_sensitivity_iso=1819.jpg

test_param_sensitivity_iso=3583

test_param_sensitivity_iso=3583.jpg

test_param_sensitivity_iso=5347

test_param_sensitivity_iso=5347.jpg

test_param_sensitivity_iso=7111

test_param_sensitivity_iso=7111.jpg

test_param_sensitivity_plot

test_param_sensitivity_plot.png

test_param_shading_mode

Проверяет применение параметра android.shading.mode .

Протестированные API:

Пройдено: режимы затенения переключаются, а карты затенения линз изменяются, как и ожидалось.

test_param_shading_mode_ls_maps_mode_0_loop_0

test_param_shading_mode_ls_maps_mode_0_loop_0.png

test_param_shading_mode_ls_maps_mode_1_loop_0

test_param_shading_mode_ls_maps_mode_1_loop_0.png

test_param_shading_mode_ls_maps_mode_2_loop_0

test_param_shading_mode_ls_maps_mode_2_loop_0.png

test_param_tonemap_mode

Проверяет применение параметра android.tonemap.mode. Применяет разные кривые тональной карты к каждому каналу R, G, B и проверяет, что выходные изображения изменены должным образом. Этот тест состоит из двух тестов, test1 и test2.

Протестированные API:

Проходить:

  • test1: Оба изображения имеют линейную тональную карту, но n=1 имеет более крутой градиент. Канал G (зеленый) ярче для изображения n=1.
  • test2: Та же тональная карта, но другой длины. Изображения одинаковые.
test_param_tonemap_mode_n=0.jpgtest_param_tonemap_mode_n=1.jpg
test_param_tonemap_mode_n=0.jpg test_param_tonemap_mode_n=1.jpg

test_post_raw_sensitivity_boost

Проверяет повышение чувствительности после RAW. Захватывает набор изображений RAW и YUV с разной чувствительностью, публикует комбинацию увеличения чувствительности RAW и проверяет, соответствует ли среднее выходного пикселя параметрам запроса.

Протестированные API:

Пройдено: изображения RAW становятся темнее по мере увеличения усиления, в то время как яркость изображений YUV остается неизменной.

test_post_raw_sensitivity_boost_raw_s=3583_boost=0100

test_post_raw_sensitivity_boost_raw_s=3583_boost=0100.jpg

test_post_raw_sensitivity_boost_raw_s=1792_boost=0200

test_post_raw_sensitivity_boost_raw_s=1792_boost=0200.jpg

test_post_raw_sensitivity_boost_raw_s=0896_boost=0400

test_post_raw_sensitivity_boost_raw_s=0896_boost=0400.jpg

test_post_raw_sensitivity_boost_raw_s=0448_boost=0800

test_post_raw_sensitivity_boost_raw_s=0448_boost=0800.jpg

test_post_raw_sensitivity_boost_raw_s=0224_boost=1600

test_post_raw_sensitivity_boost_raw_s=0224_boost=1600.jpg

test_post_raw_sensitivity_boost_raw_s=0112_boost=3199

test_post_raw_sensitivity_boost_raw_s=0112_boost=3199.jpg

test_post_raw_sensitivity_boost_raw_plot_means

test_post_raw_sensitivity_boost_raw_plot_means.png

test_post_raw_sensitivity_boost_yuv_s=0112_boost=3199

test_post_raw_sensitivity_boost_yuv_s=0112_boost=3199.jpg

test_post_raw_sensitivity_boost_yuv_s=0448_boost=0800

test_post_raw_sensitivity_boost_yuv_s=0448_boost=0800.jpg

test_post_raw_sensitivity_boost_yuv_s=0896_boost=0400

test_post_raw_sensitivity_boost_yuv_s=0896_boost=0400.jpg

test_post_raw_sensitivity_boost_yuv_s=1792_boost=0200

test_post_raw_sensitivity_boost_yuv_s=1792_boost=0200.jpg

test_post_raw_sensitivity_boost_yuv_s=3585_boost=0100

test_post_raw_sensitivity_boost_yuv_s=3585_boost=0100.jpg

test_post_raw_sensitivity_boost_yuv_plot_means

test_post_raw_sensitivity_boost_yuv_plot_means.png

test_raw_burst_sensitivity

Захватывает набор необработанных изображений с увеличением усиления и измеряет шум. Захватывает только в сыром виде, в пакетном режиме.

Протестированные API:

Pass: каждый выстрел шумнее предыдущего, так как усиление увеличивается.

Использует дисперсию центральной ячейки сетки статистики.

test_raw_burst_sensitivity_variance

test_raw_burst_sensitivity_variance.png

test_raw_exposure

Захватывает набор необработанных изображений с увеличением времени экспозиции и измеряет значения пикселей.

Протестированные API:

Пройдено: увеличение ISO (усиление) делает пиксели более чувствительными к свету, поэтому график смещается влево.

test_raw_exposure_s=55

test_raw_exposure_s=55.png

(10⁰ — 1 мс, 10¹ — 10 мс, 10⁻¹ — 0,1 мс)

test_raw_exposure_s=132

test_raw_exposure_s=132.png

test_raw_exposure_s=209

test_raw_exposure_s=209.png

test_raw_exposure_s=286

test_raw_exposure_s=286.png

test_raw_exposure_s=363

test_raw_exposure_s=363.png

test_raw_exposure_s=440

test_raw_exposure_s=440.png

test_raw_sensitivity

Захватывает набор необработанных изображений с повышенной чувствительностью и измеряет шум (дисперсию) в центре 10% изображения. Проверяет, что каждый выстрел шумнее предыдущего.

Протестированные API:

Pass: дисперсия увеличивается с каждым выстрелом.

test_raw_sensitivity_variance

test_raw_sensitivity_variance.png

test_reprocess_noise_reduction

Проверяет, что android.noiseReduction.mode применяется для повторной обработки запросов. Захватывает повторно обработанные изображения при слабом освещении камеры. Использует высокий аналоговый коэффициент усиления, чтобы изображение было зашумленным. Захватывает три повторно обработанных изображения: для выключения шумоподавления, «быстрого» и «высокого качества». Захватывает повторно обработанное изображение с низким усилением и отключенным шумоподавлением и использует его дисперсию в качестве базовой линии.

Протестированные API:

Pass: FAST >= OFF, HQ >= FAST, HQ >> OFF

Типичный график SNR и NR_MODE

Типичный график SNR и NR_MODE

test_tonemap_sequence

Тестирует последовательность снимков с разными кривыми тональной карты. Делает 3 ручных снимка с линейной тональной картой. Делает 3 ручных снимка с тональной картой по умолчанию. Вычисляет дельту между каждой последовательной парой кадров.

Протестированные API:

Pass: есть 3 одинаковых кадра, за которыми следует другой набор из 3 одинаковых кадров.

test_tonemap_sequence_i = 0

test_tonemap_sequence_i=0.jpg

test_tonemap_sequence_i=1

test_tonemap_sequence_i=1.jpg

test_tonemap_sequence_i=2

test_tonemap_sequence_i=2.jpg

test_tonemap_sequence_i=3

test_tonemap_sequence_i=3.jpg

test_tonemap_sequence_i=4

test_tonemap_sequence_i=4.jpg

test_tonemap_sequence_i=5

test_tonemap_sequence_i=5.jpg

test_yuv_jpeg_all

Проверяет, работают ли все заявленные размеры и форматы для захвата изображений. Использует ручной запрос с линейной тональной картой, чтобы YUV и JPEG выглядели одинаково при преобразовании модулем its.image. Изображения не сохраняются по умолчанию, но их можно сохранить, включив debug_mode .

Протестированные API:

Пройдено: все центры изображений имеют максимальную разницу RMS (среднеквадратичное значение сигнала) в изображениях, преобразованных в RGB, с 3% от изображения YUV с максимальным разрешением.

test_yuv_jpeg_all

test_yuv_jpeg_all.png

test_yuv_plus_dng

Проверяет, что заявленные размеры и форматы для захвата изображения работают.

Протестированные API:

Пройдено: тест завершается и возвращает запрошенные изображения.

test_yuv_plus_dng

test_yuv_plus_dng.jpg

test_yuv_plus_jpeg

Тестирует захват одного кадра как в формате YUV, так и в формате JPEG. Использует ручной запрос с линейной тональной картой, чтобы YUV и JPEG выглядели одинаково (при преобразовании модулем its.image ).

Протестированные API:

Pass: изображения YUV и JPEG похожи и имеют разницу менее 1% RMS (среднеквадратичное значение сигнала).

test_yuv_plus_jpg_jpg.jpgtest_yuv_plus_jpeg_yuv.jpg
test_yuv_plus_jpg_jpg.jpg test_yuv_plus_jpeg_yuv.jpg

test_yuv_plus_raw

Тестирует захват одного кадра как в формате RAW, так и в формате YUV. Использует ручной запрос с линейной тональной картой, поэтому ожидается, что RAW и YUV будут одинаковыми. Сравнивает центральные 10% значений RGB преобразованных изображений RGB. Логи android.shading.mode .

Протестированные API:

Пройдено: изображения YUV и JPEG похожи и имеют разницу менее 3,5% RMS (среднеквадратичное значение сигнала).

test_yuv_plus_raw_shading=1_raw.jpgtest_yuv_plus_raw_shading=1_yuv.jpg
test_yuv_plus_raw_shading=1_raw.jpg test_yuv_plus_raw_shading=1_yuv.jpg

test_yuv_plus_raw10

Тестирует захват одного кадра как в формате RAW10, так и в формате YUV. Использует ручной запрос с линейной тональной картой, поэтому ожидается, что RAW и YUV будут одинаковыми. Сравнивает центральные 10% значений RGB преобразованных изображений RGB. Логи android.shading.mode .

Протестированные API:

Пройдено : изображения RAW10 и YUV похожи и имеют разницу менее 3,5% RMS (среднеквадратичное значение сигнала).

test_yuv_plus_raw10_shading=1_rawtest_yuv_plus_raw10_shading=1_yuv
test_yuv_plus_raw10_shading=1_raw.jpg test_yuv_plus_raw10_shading=1_yuv.jpg

test_yuv_plus_raw12

Тестирует захват одного кадра как в формате RAW12, так и в формате YUV. Использует ручной запрос с линейной тональной картой, поэтому ожидается, что RAW и YUV будут одинаковыми. Сравнивает центральные 10% значений RGB преобразованных изображений RGB. Логи android.shading.mode .

Протестированные API:

Пройдено : изображения RAW12 и YUV похожи и имеют разницу менее 3,5% RMS (среднеквадратичное значение сигнала).

test_yuv_plus_raw12_shading=1_raw.jpgtest_yuv_plus_raw12_shading=1_yuv.jpg
test_yuv_plus_raw12_shading=1_raw.jpg test_yuv_plus_raw12_shading=1_yuv.jpg

сцена2_а

Scene2_a имеет три лица на сером фоне и в нейтральной одежде. Лица выбираются с широким диапазоном оттенков кожи.

сцена2_а

сцена2_а

test_effects

Захватывает кадр для поддерживаемых эффектов камеры и проверяет, правильно ли они генерируются. Тест проверяет только эффекты OFF и MONO , но сохраняет изображения для всех поддерживаемых эффектов.

Протестированные API:

Pass: захватывает изображение сцены с OFF эффектами и монохромное изображение с эффектами, установленными на MONO .

test_effects_MONO

test_effects_MONO.jpg

test_faces

Проверяет распознавание лиц. Изображение сохраняется, но информация о рамке и ориентирах занесена в таблицу test_faces_stdout.txt .

Протестированные API:

Pass: Обнаруживает хотя бы одно лицо на изображении.

test_format_combos

Тестирует различные комбинации выходных форматов.

Протестированные API:

Pass: Все комбинации успешно захвачены.

test_jpeg_quality

Проверяет качество сжатия JPEG камеры. Пошаговое качество JPEG с помощью android.jpeg.quality и обеспечение правильного изменения таблиц квантования.

Протестированные API:

Pass: Матрица квантования уменьшается с увеличением качества. (Матрица представляет коэффициент деления.)

test_jpeg_quality

Средняя яркость/цветность матрицы DQT задней камеры Pixel 4 в сравнении с качеством JPEG

test_jpeg_quality не удалось

Неудачный тестовый пример

Обратите внимание, что для изображений очень низкого качества (jpeg.quality < 50) увеличение сжатия в матрице квантования отсутствует.

test_num_faces

Проверяет распознавание лиц.

Протестированные API:

Pass: Находит три лица.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

сцена2_b

test_auto_per_frame_control

Проверяет свойства PER_FRAME_CONTROL для запросов автоматического захвата.

Протестированные API:

Пройдено : присутствуют все свойства PER_FRAME_CONTROL .

test_auto_per_frame_control_frame_1

test_auto_per_frame_control_frame_1.jpg

test_auto_per_frame_control_frame_10

test_auto_per_frame_control_frame_10.jpg

test_auto_per_frame_control_frame_29

test_auto_per_frame_control_frame_29.jpg

test_auto_per_frame_control_plot

test_auto_per_frame_control_plot.png

test_num_faces

Проверяет распознавание лиц с повышенным разнообразием оттенков кожи в сценах с лицами.

Протестированные API:

Pass: Находит 3 лица.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

scene2_c

test_num_faces

Проверяет распознавание лиц с повышенным разнообразием оттенков кожи в сценах с лицами.

Протестированные API:

Pass: Находит 3 лица.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

test_jpeg_capture_perf_class

Тестирует задержку захвата JPEG для класса производительности S, как указано в разделе 2.2.7.2 Камера в CDD.

Пройдено : ДОЛЖНА быть задержка захвата JPEG камеры2 < 1000 мс для разрешения 1080p, измеренная CTS Camera PerformanceTest в условиях освещения ITS (3000K) для обеих основных камер.

test_camera_launch_perf_class

Проверяет задержку запуска камеры для класса производительности S, как указано в разделе 2.2.7.2 Камера в CDD.

Пройдено : ДОЛЖНА быть задержка запуска камеры 2 (от открытой камеры до первого кадра предварительного просмотра) < 600 мс, измеренная тестом производительности камеры CTS в условиях освещения ITS (3000K) для обеих основных камер.

сцена2_d

test_num_faces

Проверяет распознавание лиц с повышенным разнообразием оттенков кожи в сценах с лицами.

Протестированные API:

Pass: Находит 3 лица.

scene2_e

test_continuous_picture

50 кадров с разрешением VGA захватываются с первой настройкой запроса захвата android.control.afMode = 4 (CONTINUOUS_PICTURE).

Протестированные API:

Pass: Система 3A останавливается в конце 50-кадрового захвата.

test_num_faces

Проверяет распознавание лиц с повышенным разнообразием оттенков кожи в сценах с лицами.

Протестированные API:

Pass: Находит 3 лица.

сцена 3

Сцена 3 использует диаграмму ISO12233, и в большинстве тестов используется метод извлечения диаграмм для поиска диаграммы в сцене. По этой причине большинство сохраненных изображений не имеют границ, как изображения для сцен 1, 2 или 4, а только диаграмма.

test_3a_consistency

Тесты на согласованность 3A.

Протестированные API:

Pass: 3A сходится по экспозиции, усилению, awb (автоматический баланс белого) и fd (фокусное расстояние) трижды в пределах допуска.

test_edge_enhancement

Проверяет правильность применения параметра android.edge.mode . Захватывает необработанные изображения для каждого режима края и возвращает резкость выходного изображения и метаданные результата захвата. Обрабатывает запрос захвата с заданным режимом края, чувствительностью, временем экспозиции, фокусным расстоянием и параметром выходной поверхности.

Pass: быстрый режим не более четкий, чем режим HQ (высокое качество).

Протестированные API:

Затронутые параметры камеры:

  • EDGE_MODE

test_edge_enhancement_edge=0

test_edge_enhancement_edge=0.jpg

test_edge_enhancement_edge=1

test_edge_enhancement_edge=1.jpg (быстрый режим)

test_edge_enhancement_edge=2

test_edge_enhancement_edge=2.jpg (режим высокого качества)

test_flip_mirror

Проверяет правильность ориентации изображения в соответствии с разделом CDD 7.5.2 «Фронтальная камера» [C-1-5] .

Зеркальные, перевернутые или повернутые изображения можно определить по ромбовидному элементу рядом с центром.

Пройдено: изображение не переворачивается, не зеркально отражается и не поворачивается.

test_flip_mirror_scene_patch

test_flip_mirror_scene_patch.jpg

test_lens_movement_reporting

Проверяет, правильно ли сообщается о флаге движения объектива. Делает серию из 24 изображений с первыми 12 кадрами на оптимальном расстоянии фокусировки (по данным 3A) и последними 12 кадрами на минимальном расстоянии фокусировки. Вокруг кадра 12 объектив перемещается, что приводит к падению резкости. Резкость в конечном итоге стабилизируется по мере того, как объектив перемещается в конечное положение. The lens movement flag should be asserted in all frames where the sharpness is intermediate to sharpness in the first 10 frames with the lens stationary at optimum focal distance, and the final 10 frames where the lens is stationary in the minimum focal distance. The exact frame the lens moves isn't important: what is checked is that the movement flag is asserted when the lens is moving.

APIs tested:

Pass: Lens movement flag is True in the frame with sharpness change.

test_lens_position

Tests if the focus position is properly reported for moving lenses.

APIs tested:

Pass: Correct focus positions are reported.

test_reprocess_edge_enhancement

Returns sharpness of the output images and the capture result metadata. Processes a capture request with a given edge mode, sensitivity, exposure time, focus distance, output surface parameter, and reprocess format.

APIs tested:

Pass: Sharpness for the different edge modes is correct.

scene4

Scene4 consists of a black circle on a white background inside a square.

scene4

scene4

test_aspect_ratio_and_crop

Takes pictures of a circle inside of a square over all formats. Verifies that the aspect ratio of the circle doesn't change, the cropped images keep the circle in center, and the circle size doesn't change for a constant format or with different resolution (field of view check).

APIs tested:

Pass: Images aren't stretched, the center of images don't differ by more than 3%, and the maximum possible FOV (field of view) is preserved.

test_multi_camera_alignment

Tests the multi camera system parameters related to camera spacing. Using the multi-camera physical sub-cameras, takes a picture with one of the physical cameras. Finds the circle center. Projects the circle center to the world coordinates for each camera. Compares the difference between the cameras' circle centers in world coordinates. Reprojects the world coordinate back to pixel coordinates and compares against originals as a validity check. Compares the circle sizes checking if the focal lengths of the cameras are different.

APIs tested:

Pass: Focal lengths and circles sizes are consistent.

scene5/diffuser

test_lens_shading_and_color_uniformity

Tests that the lens shading correction is applied appropriately, and color of a monochrome uniform scene is evenly distributed. Performs this test on a YUV frame with auto 3A. Lens shading is evaluated based on the y channel. Measures the average y value for each sample block specified, and determines pass or fail by comparing with the center y value. The color uniformity test is evaluated in r/g and b/g space.

APIs tested:

Pass: At the specified radius of the image, the variance of r/g and b/g value must be less than 20% to pass the test.

scene6

Scene6 is a grid of small circles with a square in one corner to indicate orientation. The small circles are needed to test zoom function over a large range.

scene6

scene6

test_zoom

Tests the camera zoom behavior. Takes captures over the zoom range and checks if the circles get bigger as the camera zooms in.

APIs tested:

Pass: Relative size of captured circle is accurate against requested zoom ratio to ensure camera is zooming correctly.

test_zoom

test_zoom to find the contour of the circle closest to the center.

scene_change

test_scene_change

The scene change makes use of the tablet displaying a face scene and then turns the tablet on and off to create a scene change. The scene reuses scene2_e, but is in a separate scene because of the required tablet control. Additionally, for manual testing, the scene change can be accomplished by waving your hand in front of the camera.

APIs tested:

Pass: The android.control.afSceneChange flag is asserted with a scene change.

sensor_fusion

Sensor fusion tests require specific phone movement in front of a checkerboard pattern. The sensor_fusion tests can be automated with the Sensor Fusion Box .

checkerboard

Image of checkerboard

test_multi_camera_frame_sync

Tests that frame timestamps captured by logical camera are within 10 ms by computing angles of squares within the checkerboard to determine the timestamp.

APIs tested:

Pass: Angle between images from each camera doesn't change appreciably as phone is rotated.

test_sensor_fusion

Tests the timestamp difference between the camera and the gyroscope for AR and VR applications. Phone is rotated 90 degrees 10 times in front of the checkerboard pattern. Motion is about 2 s round trip. This test is skipped if no gyroscope is included or if the REALTIME parameter is not enabled.

The test_sensor_fusion test generates a number of plots. The two most important plots for debugging are:

  • test_sensor_fusion_gyro_events : Shows the gyroscope events for the phone during the test. Movement in the x and y direction implies the phone isn't securely mounted on the mounting plate, reducing the probability of the test passing. The number of cycles in the plot depends on the write speed for saving frames.

    test_sensor_fusion_gyro_events.png

    test_sensor_fusion_gyro_events

  • test_sensor_fusion_plot_rotations : Shows the alignment of the gyroscope and camera events. This plot must show matching movement between camera and gyroscope to +/-1 ms.

    test_sensor_fusion_plot_rotations.png

    test_sensor_fusion_plot_rotations

APIs tested:

Pass: Camera and gyroscope timestamps' offset is less than 1 ms as per CDD section 7.3.9 High Fidelity Sensors [C-2-14] .