Тесты ITS для камеры

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

Тесты ITS обновляются или добавляются с каждой версией Android, как описано в примечаниях к выпуску Camera ITS для этой версии Android. Обновления выходят по мере того, как пользователи или разработчики сообщают об ошибках. Дополнения вносятся на основе сообщений об ошибках от пользователей и разработчиков, а также по результатам проверки корректности работы новых функций фреймворка камеры.

В Android 17 и более поздних версиях тесты Camera ITS разделены на два действия в CTS Verifier, чтобы обеспечить параллельное выполнение и сократить время тестирования: одно действие для тестов feature_combination и sensor_fusion, а другое – для всех остальных тестов. Подробнее о том, как сократить время тестирования…

ITS камеры проверяет тесты по требуемым свойствам камеры, уровню API и уровню класса производительности мультимедиа (MPC). Для уровня API в ITS используется ro.product.first_api_level, чтобы блокировать тесты, добавленные на определенном уровне API, которые проверяют негативный пользовательский опыт для функциональности на более низких уровнях API. ITS использует ro.vendor.api_level, чтобы блокировать тесты функций, добавленных на определенном уровне API и требующих новых аппаратных возможностей. Если для устройства определено свойство ro.odm.build.media_performance_class, то в зависимости от уровня MPC в ITS требуется выполнить определенные тесты.

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

Тестовые сцены на планшете

  • scene0: метаданные съемки, дрожание, гироскоп, вибрация.
  • scene1: экспозиция, чувствительность, компенсация экспозиционного числа, YUV по сравнению с JPEG и RAW.
  • scene2: распознавание лиц, тесты, требующие цветных сцен.
  • scene3: улучшение резкости, движение объектива
  • scene4: соотношение сторон, кадрирование, зона обзора.
  • scene6: Zoom
  • scene7: переключение между камерами.
  • scene8: замер экспозиции и баланса белого в области.
  • scene9: сжатие JPEG.
  • scene_extensions: расширения камеры.
  • scene_tele: Переключение на телеобъектив
  • scene_video: пропущенные кадры.

Тестовые сцены на основе sensor_fusion и установки Gen2

  • feature_combination: комбинации функций
  • scene_flash: автоматическая вспышка, минимальная частота кадров.
  • scene_gen2_chart – тесты с использованием бумажной таблицы Gen2.
  • scene_ip. Сравнение изображений, полученных с помощью приложения камеры по умолчанию и Jetpack Camera App (JCA).
  • sensor_fusion: смещение по времени между камерой и гироскопом.

Тестовая сцена с диффузором

  • scene5: затенение объектива.

Тестовая сцена для планшетов с широкой цветовой гаммой

  • scene_wide_gamut: цветовой профиль и диапазон Wide Gamut.

Описание каждой сцены приведено в отдельных разделах.

Тестовые сцены на планшете

scene0

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

test_jitter

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

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

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

На рисунке ниже обратите внимание на небольшой диапазон оси Y. Дрожание на самом деле небольшое на этом графике.

test_jitter plot

Рисунок 1. График test_jitter.

test_metadata

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

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

Соответствует требованиям. Уровень аппаратного обеспечения, теги rollingShutterSkew и frameDuration, timestampSource, croppingType, blackLevelPattern, pixel_pitch, зона обзора и гиперфокальное расстояние указаны и имеют допустимые значения.

test_request_capture_match

Проверяет, записывает ли устройство правильные значения экспозиции и усиления, считывая метаданные съемки. Это быстрый тест на сбой, поскольку он требует минимальной настройки и сигнализирует о значительном количестве сбоев в последующих тестах. Не запускайте весь набор тестов, пока не будет пройден тест test_request_capture_match.

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

Пройдено. Значения метаданных запроса и записи совпадают во всех кадрах.

test_sensor_events

Для устройств, которые рекламируют поддержку объединения датчиков, этот тест проверяет, запрашивает ли устройство и выводит ли события датчиков. Ожидаемые датчики: акселерометр, гироскоп и магнитометр. Этот тест работает, только если экран включен, то есть устройство не находится в режиме ожидания. Это быстрый тест, который выполняется за короткое время, требует минимальной настройки и сигнализирует о сбое теста объединения датчиков. Тесты сцены sensor_fusion не должны запускаться, если тест test_sensor_events не пройден или не пропущен.

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

Тест пройден. События для каждого датчика получены.

test_solid_color_test_pattern

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

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

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

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

test_test_pattern

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

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

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

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

Пример test_test_patterns

Рисунок 2. Пример test_test_patterns.

test_tonemap_curve

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

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

Тест пройден. Изображения YUV и RAW похожи друг на друга.

Пример необработанного изображения test_tonemap_curve

Рисунок 3. Пример необработанного изображения test_tonemap_curve.

Пример test_tonemap_curve YUV

Рисунок 4. Пример test_tonemap_curve YUV.

test_unified_timestamp

Проверяет, находятся ли события изображения и датчика движения в одном временном домене. Это быстрый тест, который выполняется за короткое время, требует минимальной настройки и сигнализирует о сбое теста объединения датчиков. Тесты сцены sensor_fusion не должны выполняться, если тест test_unified_timestamp не пройден или не пропущен.

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

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

test_vibration_restriction

Проверяет, правильно ли работает вибрация на устройстве.

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

Успешно. Устройство не вибрирует, когда звук отключен с помощью API camera audio restriction.

scene1_1

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

Камеры с ограниченным углом обзора можно тестировать на стендах для камер с ограниченным или широким углом обзора. Если камера с узким полем зрения тестируется на установке для широкого поля зрения, диаграмма масштабируется на 2/3, чтобы указать границы серой диаграммы в поле зрения и помочь 3A сойтись. Подробное описание тестовых стендов для камер можно найти в статье Camera ITS-in-a-box.

Пример сцены 1

Рисунок 5. Полноразмерная диаграмма scene1 (слева), диаграмма в масштабе 2/3 (справа).

test_ae_precapture_trigger

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

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

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

test_auto_vs_manual

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

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

Соответствует требованиям. Коэффициенты усиления и преобразования, заданные вручную для баланса белого и указанные в каждом результате съемки, совпадают с автоматическим балансом белого estimate, который определяется алгоритмом 3A камеры.

test_auto_vs_manual auto example

Рисунок 6. Пример автоматического эксперимента test_auto_vs_manual.

Пример автоматического и ручного баланса белого

Рисунок 7. Пример баланса белого test_auto_vs_manual.

Пример преобразования баланса белого вручную test_auto_vs_manual

Рисунок 8. Пример преобразования баланса белого вручную в тесте test_auto_vs_manual.

test_black_white

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

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

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

test_black_white, black example

Рисунок 9. test_black_white, пример черного цвета.

Пример преобразования баланса белого вручную test_auto_vs_manual

Рисунок 10. test_black_white, пример белого цвета.

test_black_white plot means example

Рис. 11. Пример графика средних значений test_black_white.

test_burst_capture

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

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

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

test_burst_sameness_manual

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

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

Заявка одобрена. Изображения идентичны визуально и по значениям RGB.

Несоответствие. На диаграмме среднего значения RGB в начале каждой серии виден резкий подъем или спад.

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

test_burst_sameness_manual_mean

Рис. 12. Пример среднего значения test_burst_sameness_manual.

test_burst_sameness_manual_plot_means

Рисунок 13. test_burst_sameness_manual_plot_means

test_crop_region_raw

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

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

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

test_crop_region_raw comp raw crop example

Рис. 14. Пример необработанного кадрирования test_crop_region_raw comp raw crop.

test_crop_region_raw comp raw full example

Рисунок 15. Полный пример test_crop_region_raw comp raw.

test_crop_region_raw comp YUV crop example

Рис. 16. Пример кадрирования YUV в тесте test_crop_region_raw.

test_crop_region_raw_yuv_full example

Рисунок 17. Полный пример test_crop_region_raw YUV.

test_crop_regions

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

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

Заявка одобрена. Изображение кадрированной области совпадает с фрагментом, который соответствует кадрированному изображению.

test_ev_compensation

Проверяет, применяется ли компенсация экспозиционного числа. Тест состоит из базового и продвинутого разделов.

В базовом разделе проверяется, что компенсация экспозиционного числа применяется с использованием диапазона, созданного с помощью CONTROL_AE_COMPENSATION_STEP. Для каждого значения компенсации экспозиции делается восемь кадров.

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

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

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

test_ev_compensation_basic

Рисунок 18. test_ev_compensation_basic.

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

test_ev_compensation_advanced_plot_means

Рис. 19. test_ev_compensation_advanced_plot_means.

test_exposure_x_iso

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

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

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

Механизм сбоя. На рисунке ниже показано, что по мере увеличения значений множителя усиления (ось X) нормализованные средние значения плоскости RGB (ось Y) начинают отклоняться от низких значений множителя усиления.

test_exposure_plot_means

Рисунок 20. test_exposure_plot_means.

test_exposure_mult=1.00.jpg

Рисунок 21. test_exposure_mult=1.00.

test_exposure_mult=64.00

Рис. 22. test_exposure_mult=64.00.

test_latching

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

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

Тест пройден. Изображения [2, 3, 6, 8, 10, 12, 13] имеют повышенное значение ISO или экспозиции и отображаются с более высокими средними значениями RGB на графике на следующем рисунке.

test_latching plot means example

Рис. 23. Пример графика test_latching plot means.

test_latching i=00

Рисунок 24. test_latching i=00.

test_latching i=01

Рисунок 25. test_latching i=01.

test_latching i=02

Рисунок 26. test_latching i=02.

test_latching i=03

Рисунок 27. test_latching i=03.

test_latching i=04

Рисунок 28. test_latching i=04.

test_latching i=05

Рисунок 29. test_latching i=05.

test_latching i=06

Рисунок 30. test_latching i=06.

test_latching i=07

Рисунок 31. test_latching i=07.

test_latching i=08

Рисунок 32. test_latching i=08.

test_latching i=09

Рисунок 33. test_latching i=09.

test_latching i=10

Рисунок 34. test_latching i=10.

test_latching i=11

Рис. 35. test_latching i=11.

test_latching i=12

Рис. 36. test_latching i=12.

test_linearity

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

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

Проверка пройдена. Значения R, G и B увеличиваются линейно с ростом чувствительности.

Пример графика test_linearity plot means

Рис. 37. Пример графика test_linearity plot means.

test_locked_burst

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

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

Принято. Снимки выглядят единообразно.

test_locked_burst frame0 example

Рис. 38. Пример кадра 0 в тесте test_locked_burst.

test_locked_burst frame1 example

Рис. 39. Пример кадра 1 для test_locked_burst.

test_locked_burst_frame2

Рисунок 40. Пример кадра 2 в тесте test_locked_burst.

scene1_2

scene 1_2 – это функционально идентичная копия scene 1_1, в которой реализована структура подсцен, чтобы сократить продолжительность scene 1.

test_param_color_correction

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

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

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

Соответствует требованиям. Значения R и B увеличиваются в соответствии с преобразованием.

Пример графика средних значений для test_param_color_correction

Рис. 41. Пример графика средних значений test_param_color_correction.

На рисунках ниже ось X – это запросы на съемку: 0 – единичное усиление, 1 – усиление красного, 2 – усиление синего.

test_param_color_correction req=0 unity example

Рисунок 42. Пример test_param_color_correction req=0 unity.

test_param_color_correctness req=1 red boost example

Рисунок 43. Пример усиления красного цвета в тесте test_param_color_correctness req=1.

test_param_color_correction req=2 blue boost example

Рис. 44. Пример test_param_color_correction req=2 blue boost.

test_param_flash_mode

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

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

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

test_param_flash_mode 1 example

Рисунок 45. Пример test_param_flash_mode 1.

test_param_flash_mode 1 tile example

Рисунок 46. Пример одного фрагмента test_param_flash_mode.

test_param_flash_mode_2 example

Рисунок 47. Пример test_param_flash_mode 2.

Пример карточки test_param_flash_mode 2

Рисунок 48. Пример двух элементов test_param_flash_mode.

test_param_noise_reduction

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

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

Соответствует требованиям. Отношение "сигнал/шум" меняется в зависимости от режима шумопонижения и выглядит примерно так, как на графике ниже.

Пример графика отношения сигнал/шум для test_param_noise_reduction

Рисунок 49. Пример графика test_param_noise_reduction с отношениями "сигнал/шум"

0: OFF, 1: FAST, 2: HQ, 3: MIN , 4: ZSL

test_param_noise_reduction high gain nr=0 example

Рис. 50. Пример test_param_noise_reduction high gain nr=0.

test_param_noise_reduction high gain nr=1 example

Рис. 51. Пример test_param_noise_reduction high gain nr=1.

test_param_noise_reduction high gain nr=2 example

Рис. 52. Пример test_param_noise_reduction high gain nr=2.

test_param_noise_reduction high gain nr=3 example

Рисунок 53. Пример test_param_noise_reduction high gain nr=3.

test_param_noise_reduction low gain example

Рисунок 54. Пример низкого усиления test_param_noise_reduction

test_param_shading_mode

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

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

Тест пройден. Режимы затенения переключаются, а карты затенения объектива изменяются ожидаемым образом.

test_param_shading_mode lens shading map, mode 0 loop 0 example

Рис. 55. Карта затенения объектива test_param_shading_mode, пример режима 0, цикла 0.

test_param_shading_mode lens shading map, mode 1 loop 0 example

Рис. 56. Пример карты затенения объектива test_param_shading_mode, режим 1, цикл 0.

test_param_shading_mode lens shading map, mode 2 loop 0 example

Рис. 57. Пример карты затенения объектива test_param_shading_mode, режим 2, цикл 0.

test_param_tonemap_mode

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

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

Pass:

  • test1: у обоих изображений линейная тональная компрессия, но у n=1 более крутой градиент. Зеленый канал ярче на изображении n=1.
  • test2 – тональная компрессия та же, но длина другая. Картинки одинаковые.

test_param_tonemap_mode с n=0

Рисунок 58. test_param_tonemap_mode с n=0.

test_param_tonemap_mode с n=1

Рисунок 59. test_param_tonemap_mode с n=1.

test_post_raw_sensitivity_boost

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

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

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

test_post_raw_sensitivity_boost raw s=3583 boost=0100 example

Рис. 60. Пример test_post_raw_sensitivity_boost raw s=3583 boost=0100.

test_post_raw_sensitivity_boost raw s=1792 boost=0200 example

Рисунок 61. Пример test_post_raw_sensitivity_boost raw s=1792 boost=0200.

test_post_raw_sensitivity_boost raw s=0896 boost=0400 example

Рис. 62. Пример test_post_raw_sensitivity_boost raw s=0896 boost=0400.

test_post_raw_sensitivity_boost raw s=0448 boost=0800 example

Рисунок 63. Пример test_post_raw_sensitivity_boost raw s=0448 boost=0800.

test_post_raw_sensitivity_boost raw s=0224 boost=1600 example

Рис. 64. Пример test_post_raw_sensitivity_boost raw s=0224 boost=1600.

test_post_raw_sensitivity_boost raw s=0112 boost=3199 example

Рис. 65. Пример test_post_raw_sensitivity_boost raw s=0112 boost=3199.

test_post_raw_sensitivity_boost raw plot means example

Рис. 66. Пример графика средних значений test_post_raw_sensitivity_boost.

test_post_raw_sensitivity_boost YUV s=0112 boost=3199 example

Рисунок 67. Пример test_post_raw_sensitivity_boost YUV s=0112 boost=3199.

test_post_raw_sensitivity_boost YUV s=0448 boost=0800 example

Рисунок 68. Пример test_post_raw_sensitivity_boost YUV s=0448 boost=0800.

test_post_raw_sensitivity_boost YUV s=0896 boost=0400 example

Рис. 69. Пример test_post_raw_sensitivity_boost YUV s=0896 boost=0400.

test_post_raw_sensitivity_boost YUV s=1792 boost=0200 example

Рис. 70. Пример test_post_raw_sensitivity_boost YUV s=1792 boost=0200.

test_post_raw_sensitivity_boost YUV s=3585 boost=0100 example

Рисунок 71. Пример test_post_raw_sensitivity_boost YUV s=3585 boost=0100.

test_post_raw_sensitivity_boost_yuv_plot_means

Рисунок 72. Пример test_post_raw_sensitivity_boost_yuv_plot_means.

test_raw_exposure

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

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

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

test_raw_exposure ISO=55 example

Рисунок 73. Пример test_raw_exposure ISO=55.

10⁰ – это 1 мс, 10¹ – 10 мс, а 10⁻¹ – 0,1 мс.

Пример test_raw_exposure ISO=132

Рисунок 74. Пример test_raw_exposure ISO=132.

test_raw_exposure ISO=209 example

Рис. 75. Пример test_raw_exposure ISO=209.

test_raw_exposure ISO=286 example

Рисунок 76. Пример test_raw_exposure ISOs=286.

test_raw_exposure ISO=363 example

Рисунок 77. Пример test_raw_exposure ISO=363.

test_raw_exposure_s=440

Рис. 78. Пример test_raw_exposure ISO=440.

test_reprocess_noise_reduction

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

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

Пройдено: FAST >= OFF, HQ >= FAST и HQ >> OFF.

Типичный график отношения сигнал/шум в зависимости от режима шумоподавления

Рисунок 79. Пример типичного графика соотношения сигнал/шум в режиме NR.

test_tonemap_sequence

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

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

Соответствует требованиям. Три одинаковых кадра, за которыми следует другой набор из трех одинаковых кадров.

test_tonemap_sequence i=0 example

Рис. 80. Пример test_tonemap_sequence i=0.

test_tonemap_sequence i=1 example

Рисунок 81. Пример test_tonemap_sequence i=1.

test_tonemap_sequence i=2 example

Рисунок 82. Пример test_tonemap_sequence i=2.

test_tonemap_sequence i=3 example

Рисунок 83. Пример test_tonemap_sequence i=3.

test_tonemap_sequence_i=4 example

Рисунок 84. Пример test_tonemap_sequence i=4.

test_tonemap_sequence i=5 example

Рис. 85. Пример test_tonemap_sequence i=5.

test_yuv_jpeg_all

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

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

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

test_yuv_jpeg_all example

Рисунок 86. Пример test_yuv_jpeg_all.

test_yuv_plus_dng

Проверяет, работают ли размеры и форматы, указанные для фотосъемки.

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

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

test_yuv_plus_dng example

Рисунок 87. Пример test_yuv_plus_dng.

scene1_3

scene 1_3 – это функционально идентичная копия scene 1_1, в которой реализована структура подсцен, чтобы сократить продолжительность scene 1.

test_capture_result

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

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

Успешно. Метаданные действительны для всех снимков, а настройки, заданные вручную, не влияют на второй автоматический снимок. Строит график коррекции затенения линз для снимков.

test_capture_result_plot_lsc_auto_ch0

Рисунок 88. test_capture_result_plot_lsc_auto_ch0.

test_dng_noise_model

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

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

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

test_dng_noise_model_plog

Рисунок 89. test_dng_noise_model_plog.

test_jpeg

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

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

Проверка пройдена. Средняя разница RGB между изображениями составляет менее 3%.

test_jpeg_fmt=jpg.jpg

Рисунок 90. test_jpeg_fmt=jpg.jpg.

test_jpeg=fmt=yuv.jpg

Рис. 91. test_jpeg=fmt=yuv.jpg.

test_raw_burst_sensitivity

Делает набор необработанных снимков с увеличением усиления и измеряет шум. Серийная съемка только в формате RAW.

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

Соответствует требованиям. Каждый последующий кадр более шумный, чем предыдущий, поскольку усиление увеличивается.

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

test_raw_burst_sensitivity_variance

Рисунок 92. test_raw_burst_sensitivity_variance.

test_raw_sensitivity

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

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

Зачет. Разброс увеличивается с каждым выстрелом.

test_raw_sensitivity_variance

Рисунок 93. test_raw_sensitivity_variance.

test_yuv_plus_jpeg

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

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

Тест пройден. Изображения YUV и JPEG похожи, а разница между ними составляет менее 1% RMS (значение сигнала).

test_yuv_plus_jpeg с форматом JPEG

Рисунок 94. test_yuv_plus_jpeg в формате JPEG.

test_yuv_plus_jpeg с форматом YUV

Рисунок 95. test_yuv_plus_jpeg с форматом YUV.

test_yuv_plus_raw

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

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

Тест пройден. Изображения YUV и RAW похожи, а разница между их среднеквадратичными значениями составляет менее 3,5 %.

test_yuv_plus_raw_shading=1_raw.jpg

Рисунок 96. test_yuv_plus_raw_shading=1_raw.jpg.

test_yuv_plus_raw_shading=1_yuv.jpg

Рисунок 97. test_yuv_plus_raw_shading=1_yuv.jpg.

test_sensitivity_priority

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

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

Соответствует требованиям. Чем выше ISO, тем больше шума.

Критерии пропуска тестов

Тест test_sensitivity_priority.py пропускается, если выполняется любое из следующих условий:

test_exposure_time_priority

Тестирует CONTROL_AE_PRIORITY_MODE_SENSOR_EXPOSURE_TIME_PRIORITY при разной выдержке, проверяя стабильность яркости в диапазоне, где ISO может ее компенсировать.

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

Проверка пройдена. Яркость стабильна (в пределах допустимого отклонения) при разной выдержке, если ISO находится в диапазоне компенсации.

Критерии пропуска тестов

Тест test_exposure_time_priority пропускается, если выполняется любое из следующих условий:

scene2_a

scene2_a – три лица на сером фоне, одежда нейтральных цветов. Лица выбираются так, чтобы охватить широкий диапазон оттенков кожи. Для оптимальной работы распознавания лиц таблица должна быть правильно ориентирована.

Пример scene2_a

Рис. 98. Пример scene2_a.

test_autoframing

Проверяет работу автокадрирования камеры. Выполняет сильное масштабирование, чтобы ни одно лицо в сцене не было видно, включает режим автокадрирования, устанавливая для AUTOFRAMING в CaptureRequest значение True, и проверяет, можно ли обнаружить все лица в исходной сцене, когда состояние сходится (то есть когда для AUTOFRAMING_STATE в CaptureResult установлено значение AUTOFRAMING_STATE_CONVERGED).

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

Правильно. Обнаружены все три лица.

test_display_p3

Проверяет, можно ли сделать снимок в цветовом пространстве Display P3 в формате JPEG с помощью API ColorSpaceProfiles. Проверяет, есть ли в заголовке полученного JPEG-файла подходящий профиль ICC и содержит ли изображение цвета за пределами гаммы sRGB.

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

Проверка пройдена. Файл JPEG содержит профиль ICC Display P3 и цвета за пределами гаммы sRGB.

test_effects

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

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

Проход. Захватывает изображение сцены с эффектами OFF и монохромное изображение с эффектами, заданными как MONO.

test_effects_MONO

Рисунок 99. test_effects_MONO.

test_exposure_keys_consistent

В этом тесте сравнивается средняя яркость снимка, сделанного с включенной автоэкспозицией, и снимка, сделанного с отключенной автоэкспозицией, но с вручную заданными параметрами экспозиции (чувствительность, время экспозиции, длительность кадра, усиление чувствительности после обработки RAW), полученными в CaptureResult снимка с включенной автоэкспозицией.

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

Тест пройден. Относительная разница в яркости между двумя снимками составляет менее 4 %.

test_format_combos

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

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

Пройдено. Все комбинации успешно зафиксированы.

test_num_faces

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

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

Пройдено. Найдено три лица.

test_num_faces face detection mode 1 example

Рис. 100. Пример test_num_faces в режиме распознавания лиц 1.

test_reprocess_uv_swap

Проверяет, что при повторной обработке YUV не меняются местами плоскости U и V. Это определяется путем расчета суммы абсолютных разностей (SAD) между обработанным и необработанным изображениями. Если замена выходных плоскостей U и V повторно обработанного захвата приводит к увеличению SAD, то предполагается, что выходные плоскости U и V правильные.

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

Соответствует. Плоскости U и V не поменялись местами.

test_reprocess_uv_swap

Рисунок 101. Пример test_reprocess_uv_swap.

scene2_b

scene2_b – три лица на сером фоне, нейтральная одежда. Лица выбираются так, чтобы охватить широкий диапазон оттенков кожи. Для оптимальной работы распознавания лиц таблица должна быть правильно ориентирована.

test_preview_num_faces

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

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

Пройдено. Обнаружено три лица с контрольными точками в граничных рамках.

test_num_faces_fd_mode_1

Рис. 102. Пример test_num_faces в режиме распознавания лиц 1.

test_yuv_jpeg_capture_sameness

Делает два снимка в самых больших общих форматах YUV и JPEG с тем же соотношением сторон, что и у самого большого формата JPEG, разрешение которого не превышает 1920 x 1440. Задает для jpeg.quality значение 100 и регистрирует запрос с двумя поверхностями. Преобразует оба изображения в массивы RGB и вычисляет среднеквадратичную разницу между ними.

Кроме того, этот тест проверяет, что выходные данные YUV для всех поддерживаемых вариантов использования потока достаточно похожи на YUV с вариантом использования STILL_CAPTURE.

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

Тест пройден. Изображения YUV и JPEG для варианта использования STILL_CAPTURE имеют среднеквадратичное значение сигнала менее 3 %. Изображения YUV для всех поддерживаемых вариантов использования имеют разницу CIELAB менее 4% по сравнению с изображениями YUV для варианта использования STILL_CAPTURE.

scene2_c

test_num_faces

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

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

Зачет. Найдено три лица.

test_num_faces_fd_mode_1

Рис. 103. Пример режима распознавания лиц test_num_faces.

test_jpeg_capture_perf_class

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

Соответствует. Задержка при съемке в формате JPEG с помощью Camera2 API должна быть меньше 1000 мс для разрешения 1080p. Это измеряется с помощью CTS Camera PerformanceTest в условиях освещения ITS (3000 K) для обеих основных камер.

test_camera_launch_perf_class

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

Соответствует. Задержка запуска camera2 (от открытия камеры до первого кадра предварительного просмотра) должна быть меньше 600 мс. Измерения проводятся с помощью CTS camera PerformanceTest в условиях освещения ITS (3000 К) для обеих основных камер.

test_default_camera_hdr

Проверяет, что по умолчанию камера снимает в формате Ultra HDR для класса производительности 15, как указано в разделе 2.2.7.2 "Камера" документа определения совместимости (CDD).

Проверка пройдена. На устройстве класса производительности 15 пакет камеры по умолчанию ДОЛЖЕН поддерживать съемку в формате Ultra HDR.

scene2_d

test_preview_num_faces

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

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

Пройдено. Обнаружено три лица с контрольными точками в граничных рамках.

scene2_e

test_continuous_picture

Сначала снимается 50 кадров с разрешением VGA. android.control.afMode = 4 (CONTINUOUS_PICTURE).

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

Тест пройден. Система 3A стабилизируется к концу съемки 50 кадров.

test_num_faces

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

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

Пройдено. Найдено три лица.

scene2_f

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

Пример scene2_f

Рис.104. Пример scene2_f

test_preview_num_faces

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

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

Пройдено. Обнаружено три лица с контрольными точками в граничных рамках.

test_num_faces_fd_mode_1

Рисунок 105. Пример test_num_faces_fd_mode_1.

scene2_g

scene2_g – три лица в профиль на белом фоне и в белой одежде. У лиц разные оттенки кожи, и они контрастируют с фоном.

scene2_g.png

Рис. 106. Пример scene2_g.

test_preview_num_faces

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

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

Пройдено. Обнаружено три лица с контрольными точками в граничных рамках.

test_preview_num_faces

Рис. 107. Пример test_preview_num_faces.

scene3

В scene3 используется таблица ISO12233, а в большинстве тестов – метод извлечения таблицы, позволяющий найти ее в сцене. Поэтому у большинства сохраненных изображений нет границ, как у изображений для сцен 1, 2 или 4, а есть только диаграмма. Для оптимальной работы функции поиска диаграмм диаграмма должна быть правильно ориентирована. В Android 17 и более поздних версиях scene3 использует маркеры ArUco для обнаружения диаграмм.

scene3_aruco_chart

Рис. 108. Диаграмма scene3.

test_edge_enhancement

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

Пройдено. Режим HQ (2) четче, чем режим OFF (0). Режим FAST (1) четче, чем OFF. Режим HQ резче или равен режиму FAST.

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

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

  • EDGE_MODE

test_edge_enhancement_edge=0

Рис. 109. Пример test_edge_enhancement edge=0.

test_edge_enhancement edge=1 example

Рис. 110. Пример test_edge_enhancement edge=1 (быстрый режим).

test_edge_enhancement edge=2 example

Рис. 111. Пример test_edge_enhancement edge=2 (режим высокого качества).

test_flip_mirror

Проверяет, правильно ли ориентировано изображение в соответствии с разделом 7.5.2. Фронтальная камера в CDD. В Android 17 и более поздних версиях для проверки наличия и ориентации таблицы используются маркеры ArUco. Отраженные, перевернутые или повернутые изображения можно идентифицировать по ромбовидному элементу в центре.

Пройдено. Все маркеры обнаружены и правильно выровнены. Изображение не перевернуто, не отражено и не повернуто.

Пример исправления сцены test_flip_mirror

Рис. 112. Пример фрагмента сцены test_flip_mirror.

test_imu_drift

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

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

Pass:

  • Дрейф гироскопа за время тестирования составляет менее 0,01 рад.
  • Отклонение показаний гироскопа составляет менее 1E-7 рад2/с2/Гц за время тестирования.
  • Отклонение вектора вращения за время тестирования составляет менее 0,01 рад.
  • (Пока не обязательно.) Дрейф гироскопа составляет менее 1 градуса в секунду.

Пример дрейфа гироскопа test_imu_drift

Рисунок 113. Пример дрейфа гироскопа test_imu_drift.

Пример дрейфа вектора вращения test_imu_drift

Рис. 114. Пример дрейфа вектора вращения test_imu_drift.

test_landscape_to_portrait

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

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

Тест пройден. Найдена диаграмма с ожидаемой ориентацией (0 градусов, если переопределение альбомной ориентации на книжную отключено, и 90 градусов, если включено).

Пример test_landscape_to_portrait

Рисунок 115. Пример test_landscape_to_portrait.

test_lens_movement_reporting

Проверяет, правильно ли передается флаг движения объектива. Делает серию из 24 снимков. Первые 12 кадров снимаются на оптимальном расстоянии фокусировки (определяется алгоритмами 3A), а последние 12 – на минимальном. Примерно на 12-м кадре объектив сдвигается, и резкость падает. Резкость стабилизируется, когда объектив перемещается в конечное положение.

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

В Android 17 и более поздних версиях в этом тесте используются маркеры ArUco, чтобы определить область таблицы, содержащую необходимые резкие края. Этот метод обеспечивает стабильное обнаружение для камер от сверхширокоугольных до телеобъективов.

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

Пройден. Флаг движения объектива имеет значение True в кадре с изменением резкости.

Механизмы отказа

  • lens_moving: True (android.hardware.camera2.CaptureResult#LENS_STATE = 1) в test_log.DEBUG подтверждается только в кадрах, где резкость не меняется.
  • Кадры с lens_moving: False (android.hardware.camera2.CaptureResult#LENS_STATE = 0) в test_log.DEBUG отличаются по резкости от первых нескольких кадров при оптимальном фокусном расстоянии или последних нескольких кадров при минимальном фокусном расстоянии.

test_reprocess_edge_enhancement

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

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

Проверка пройдена. Резкость для разных режимов краев правильная. HQ (режим 2) резче, чем OFF (режим 0). Разница между режимами примерно одинаковая.

Пример графика test_reprocess_edge_enhancement

Рисунок 116. Пример графика test_reprocess_edge_enhancement.

scene4

scene4 – это черный круг на белом фоне внутри квадрата.

Тесты в scene4 могут быть чувствительны к выравниванию, поэтому, начиная с Android 15, вы можете использовать check_alignment.py в каталоге инструментов, чтобы включить проверку выравнивания тестируемого устройства и диаграммы.

Пример сцены 4

Рисунок 117. Пример scene4.

test_30_60fps_preview_fov_match

Проверяет, одинаковое ли поле зрения у видео предварительного просмотра с частотой 30 и 60 кадров/с. Тест записывает два видео: одно с частотой 30 кадр/с, а другое – 60 кадр/с. Из каждого видео выбирается репрезентативный кадр и анализируется, чтобы убедиться, что изменения поля зрения в двух видео соответствуют спецификациям. Проверяет, что соотношение сторон круга остается постоянным, центр круга остается стабильным, а радиус круга остается постоянным.

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

Проверка пройдена. Изображения не растянуты, их центры различаются не более чем на 3%, а максимальное изменение соотношения сторон между видео с частотой 30 и 60 кадров/с составляет не более 7,5 %.

Механизмы отказа

  • Круг на видео с частотой 30 кадров/с значительно отличается по размеру от круга на видео с частотой 60 кадров/с.
  • Круг на полученном изображении искажен конвейером обработки.
  • Круг на полученном изображении обрезан из-за экстремального соотношения сторон, которое уменьшает высоту или ширину изображения.
  • Круг на изображении имеет отражение в центре и не выглядит полностью заполненным.

test_aspect_ratio_and_crop

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

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

Соответствует требованиям. Изображения не растянуты, центры изображений отличаются не более чем на 3%, сохранено максимально возможное поле зрения.

Механизмы отказа

  • Камера не выровнена по кругу, который показан на планшете в центре сцены.
  • Круг на полученном изображении искажен из-за обработки.
  • Изображение с более низким разрешением дважды обрезается в конвейере обработки изображений, в результате чего поле зрения изображений с высоким и низким разрешением различается.
  • Круг на полученном изображении обрезан из-за экстремального соотношения сторон, которое уменьшает высоту или ширину изображения.
  • Круг на изображении имеет отражение в центре и не выглядит полностью заполненным.

test_multi_camera_alignment

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

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

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

Механизмы отказа

  • LENS_INTRINSIC_CALIBRATION, LENS_POSE_TRANSLATION и LENS_POSE_ROTATION – это расчетные значения, а не фактические данные калибровки.
  • Система камер не подходит для тестовой установки. Например, вы тестируете широкоугольную и сверхширокоугольную камеры на установке для тестирования камер с обычным углом обзора. Дополнительную информацию можно найти в разделе часто задаваемых вопросов о Camera ITS-in-a-box.

test_preview_aspect_ratio_and_crop

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

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

Соответствует требованиям. Изображения не растянуты, центры изображений отличаются не более чем на 3%, сохранено максимально возможное поле зрения.

test_preview_stabilization_fov

Проверяет поддерживаемые размеры предварительного просмотра, чтобы убедиться, что поле зрения обрезано правильно. Тест записывает два видео: одно со стабилизацией предварительного просмотра ON, а другое – со стабилизацией предварительного просмотра OFF. Из каждого видео выбирается репрезентативный кадр и анализируется, чтобы убедиться, что изменения поля зрения в двух видео находятся в пределах спецификации.

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

Тест пройден. Соотношение сторон круга остается примерно постоянным, положение центра круга стабильно, а размер круга меняется не более чем на 20%.

test_video_aspect_ratio_and_crop

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

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

Соответствует требованиям. Кадры видео не растянуты, центры кадров отличаются не более чем на 3%, а максимально возможное поле зрения сохранено.

scene6

scene6 – это сетка уникально идентифицируемых маркеров ArUco. Тесты в scene6 могут быть чувствительны к выравниванию, поэтому, начиная с версии 15, вы можете использовать check_alignment.py в каталоге инструментов, чтобы включить проверку выравнивания тестируемого устройства и диаграммы.

scene6

Рисунок 118. Пример scene6.

test_in_sensor_zoom

Проверяет работу функции масштабирования в датчике камеры, которая создает кадрированные изображения в формате RAW.

Если для параметра stream use case задано значение CROPPED_RAW, тест делает два снимка в диапазоне масштабирования: необработанное изображение с полным полем зрения и обрезанное необработанное изображение. Тест преобразует изображения в массивы RGB, уменьшает полноразмерное кадрированное необработанное изображение до размера, указанного в SCALER_RAW_CROP_REGION, и вычисляет среднеквадратичную разницу между двумя изображениями.

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

Тест пройден. Разница между среднеквадратичным значением 3D для уменьшенного обрезанного необработанного изображения и необработанного изображения с полным полем зрения меньше порогового значения, заданного в тесте.

test_zoom

Проверяет работу зума при переключении со сверхширокоугольного объектива на широкоугольный. Делает снимки в диапазоне масштабирования и проверяет, увеличиваются ли маркеры ArUco при приближении камеры. Тест также проверяет, предсказуемо ли меняется положение центрального маркера при каждой съемке. Расстояние от центра центрального маркера до центра изображения может изменяться с постоянной скоростью относительно коэффициента масштабирования до физического переключения камеры или монотонно изменяться в направлении местоположения того же маркера после физического переключения камеры. Перед тестированием на устройстве должно быть установлено приложение Jetpack Camera (JCA).

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

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

test_zoom для поиска контура маркера ArUco, ближайшего к центру

Рис. 119. test_zoom для поиска контура маркера ArUco, ближайшего к центру.

test_low_latency_zoom

Проверяет работу масштабирования камеры с низкой задержкой. Делает снимки в диапазоне масштабирования с помощью android.control.settingsOverride = 1 (SETTINGS_OVERRIDE_ZOOM) и проверяет, соответствуют ли маркеры на полученных изображениях коэффициентам масштабирования в метаданных снимков. Для конвергенции 3A и съемки используется один и тот же сеанс захвата камеры.

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

Пройден. Относительный размер зафиксированного маркера соответствует метаданным результата коэффициента масштабирования.

test_preview_video_zoom_match

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

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

Тест пройден. Относительный размер зафиксированного маркера соответствует запрошенному коэффициенту масштабирования на видео и в режиме предварительного просмотра.

HD_1280x720_key_frame.png

Рисунок 120. HD_1280x720_key_frame.png (до масштабирования).

preview_1280x720_key_frame.png

Рис. 121. preview_1280x720_key_frame.png (до масштабирования).

HD_1280x720_key_frame_zoomed.png

Рисунок 122. HD_1280x720_key_frame.png (после увеличения).

preview_1280x720_key_frame_zoomed.png

Рис. 123. preview_1280x720_key_frame.png (после увеличения).

test_preview_zoom

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

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

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

test_preview_zoom images showing selected marker closest to the center

Рис. 124. Изображения test_preview_zoom, на которых выбранный маркер находится ближе всего к центру

test_session_characteristics_zoom

Проверяет диапазон коэффициентов масштабирования для всех поддерживаемых конфигураций сеансов, перечисленных в CameraCharacteristics#INFO_SESSION_CONFIGURATION_QUERY_VERSION. Для каждой из этих конфигураций, если CameraDeviceSetup#isSessionConfigurationSupported возвращает true, тест проверяет, можно ли достичь диапазона коэффициента масштабирования, возвращенного в CameraDeviceSetup#getSessionCharacteristics.

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

Тест пройден. Для каждого поддерживаемого значения SessionConfiguration, указанного в CameraCharacteristics#INFO_SESSION_CONFIGURATION_QUERY_VERSION, можно достичь минимального и максимального коэффициента масштабирования.

scene7

scene7 – прямоугольная рамка, разделенная на четыре равных квадранта, каждый из которых закрашен своим цветом. В центре прямоугольника находится таблица с наклонными краями для проверки резкости. Четыре маркера ArUco выравниваются по четырем внешним углам прямоугольника, чтобы помочь получить точные координаты основной рамки прямоугольника при различных коэффициентах масштабирования.

scene7

Рис. 125. scene7.

test_multi_camera_switch

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

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

Кадры, снятые в точке перехода и до нее, анализируются на предмет автоматической экспозиции, автоматического баланса белого и автофокуса.

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

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

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

Пройдено. Тест считается пройденным, если пройдены проверки AE и AWB. Результаты проверки автофокуса используются только для ведения журнала. Ниже приведены критерии для каждой проверки:

  • Проверка автоматической экспозиции. Если устройство поддерживает и ae_regions, и awb_regions, изменение яркости (значение Y) между изображениями, полученными с помощью сверхширокоугольного и широкоугольного объективов, должно быть меньше 4% для всех цветовых полей. Если поддерживается только ae_regions, то критериям должны соответствовать только значения серого цвета.
  • Проверка автоматического баланса белого. Если устройство поддерживает и ae_regions, и awb_regions, разница между значениями красного-зеленого и синего-зеленого для изображений, полученных с помощью широкоугольного и ультраширокоугольного объективов, должна быть меньше 3% для серого цвета и меньше 10% для других цветов.
  • Проверка автофокуса. Резкость изображения, снятого на широкоугольный объектив, должна быть выше, чем у изображения, снятого на ультраширокоугольный объектив.

test_multi_camera_switch_gray_uw_y

Рисунок 126. Серая область, снятая на ультраширокоугольный объектив.

test_multi_camera_switch_gray_w_y

Рисунок 127. Серая область, снятая на широкоугольный объектив.

scene8

scene8 – прямоугольная рамка, разделенная на четыре равные части. В каждой из них находится портрет, снятый с разной экспозицией или наложенным цветным оттенком (синий оттенок, увеличенная экспозиция, уменьшенная экспозиция, желтый оттенок). Четыре маркера ArUco выравниваются по четырем внешним углам прямоугольника, чтобы получить точные координаты основной рамки прямоугольника.

Пример scene8

Рис. 128. Пример scene8.

test_ae_awb_regions

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

Тест записывает 8-секундное видео, выполняя замер AE и AWB в каждом квадранте в течение 2 секунд. Затем тест извлекает кадр из предварительной записи каждого региона и использует извлеченные кадры для выполнения следующих проверок AE и AWB:

  • Проверка автоматической экспозиции. Проверяется, что у кадра, в котором измеряется область с уменьшенной экспозицией, значение яркости больше чем на 1% выше, чем у кадра, в котором измеряется область с увеличенной экспозицией. Это подтверждает, что изображения становятся ярче при замере темной области.
  • Проверка автоматического баланса белого. Проверяется, что соотношение красного и синего (средних значений RGB изображения) в кадре с синей областью замера более чем на 2 % выше, чем в кадре с желтой областью замера. Это позволяет убедиться, что у изображений сбалансированные значения RGB при замере желтой (теплой) или синей (холодной) области.

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

Пройдено. Проверки AE и AWB пройдены.

test_ae_awb_regions_dark_region

Рисунок 129. Область замера экспозиции с повышенной экспозицией.

test_ae_awb_regions_light_region

Рисунок 130. Замер экспозиции по более светлой области кадра с уменьшенной экспозицией.

Механизмы отказа

  • Для этого теста важно точное обнаружение всех четырех маркеров ArUco. Если первая попытка не удалась, система пытается распознать текст на черно-белой версии изображения. На следующем изображении в оттенках серого показан результат вторичной обработки:

    Несовпадение маркеров ArUco

    Рисунок 131. Маркеры ArUco не выровнены.

test_color_correction_mode_cct

Тесты COLOR_CORRECTION_MODE проводятся при разных цветовых температурах и оттенках. При этом проверяется, как меняются соотношения RGB по сравнению со сценой scene8.

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

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

Критерии пропуска тестов

Тест test_color_correction_mode_cct пропускается, если выполняется любое из следующих условий:

scene9

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

Пример scene9

Рис. 132. Пример scene9.

test_jpeg_high_entropy

Проверяет, работает ли сжатие JPEG на устройстве scene9 с высокой энтропией и коэффициентом качества JPEG, равным 100%. Коэффициент масштабирования увеличивается, чтобы убедиться, что сцена, отображаемая на планшете, заполняет поле зрения камеры.

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

Успешно. Файл JPEG сжат правильно, записан и считан с диска.

test_jpeg_quality

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

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

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

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

Рисунок 133. Средние значения матрицы DQT для яркости и цветности основной камеры Pixel 4 в сравнении с качеством JPEG.

Пример неудачного теста test_jpeg_quality

Рисунок 134. Пример неудачного теста.

scene_extensions

Тесты scene_extensions предназначены для расширений камеры и должны использовать Camera ITS-in-a-Box, поскольку они требуют точного контроля над тестовой средой. Кроме того, необходимо контролировать все утечки света. Для этого может потребоваться накрыть испытательный стенд, тестируемое устройство и планшет тканью, а также устранить утечку света с переднего экрана тестируемого устройства.

scene_hdr

Сцена scene_hdr состоит из портрета слева и низкоконтрастного QR-кода справа.

scene_hdr

Рис. 135. Пример scene_hdr.

test_hdr_extension

Тестирует расширение HDR. Делает снимки с включенным и отключенным расширением и проверяет, помогает ли расширение лучше распознавать QR-код.

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

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

scene_low_light

Сцена scene_low_light состоит из сетки квадратов разных оттенков серого на черном фоне. Сетка квадратов ограничена красным контуром. Квадраты расположены в виде кривой Гильберта.

Пример scene_low_light

Рис. 136. Пример scene_low_light.

test_night_extension

Проверяет расширение Night. Выполняет захват с включенным расширением и делает следующее:

  • Обнаруживает 20 квадратов
  • Вычисляет яркость, ограниченную каждым квадратом
  • Вычисляет среднее значение яркости первых шести квадратов в соответствии с ориентацией сетки кривой Гильберта.
  • Вычисляет разницу в значении яркости последовательных квадратов (например, квадрат 2 – квадрат 1) до квадратов 5 и 6 (квадрат 6 – квадрат 5) и находит среднее значение пяти вычисленных разниц.

Для устройств с Android 16 или более поздней версии запрос на съемку включает область замера, соответствующую прямоугольнику, ограничивающему сетку квадратов. Это дополнение меняет критерии прохождения порогового значения.

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

Pass:

  • На устройствах с Android 16 или более поздней версией среднее значение яркости первых шести квадратов должно быть не менее 80, а средняя разница в яркости последовательных квадратов до пятого и шестого – не менее 18, 75.
  • На устройствах с Android 15 и более ранними версиями среднее значение яркости первых шести квадратов должно быть не менее 85, а средняя разница в яркости последовательных квадратов до пятого и шестого – не менее 17.

На графике ниже показан результат успешного теста.

Пример успешного теста ночной сцены при слабом освещении

Рисунок 137. Пример успешного прохождения теста в условиях низкой освещенности.

test_low_light_boost_extension

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

  • Обнаруживает 20 коробок
  • Вычисляет яркость, ограниченную каждым полем
  • Вычисляет среднее значение яркости первых шести квадратов в соответствии с ориентацией сетки кривой Гильберта.
  • Вычисляет разницу в значении яркости последовательных квадратов (например, квадрат 2 – квадрат 1) до квадратов 5 и 6 (квадрат 6 – квадрат 5) и находит среднее значение пяти вычисленных разниц.

Для устройств с Android 16 или более поздней версии запрос на съемку включает область замера, соответствующую прямоугольнику, ограничивающему сетку квадратов. Это дополнение меняет критерии прохождения порогового значения.

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

Pass:

  • На устройствах с Android 16 или более поздней версией ОС среднее значение яркости первых шести квадратов должно быть не менее 54, а средняя разница в яркости последовательных квадратов до пятого и шестого – не менее 17.

  • На устройствах с Android 15 и более ранними версиями среднее значение яркости первых шести квадратов должно быть не менее 70, а средняя разница в яркости последовательных квадратов до пятого и шестого – не менее 18.

scene_tele

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

scene_tele setup based on focus distance of wide and tele camera

Рис. 138. Настройка scene_tele на основе расстояния фокусировки широкоугольной и телекамеры.

Подробнее о настройке тестового оборудования…

scene6_tele

Сцена scene6_tele состоит из сетки маркеров ArUco на белом фоне.

Если снимки, сделанные с помощью scene6_tele в модульной установке, выглядят переэкспонированными, снимите переднюю панель модульной установки.

Отсоедините испытательный стенд WFoV от удлинителя и снимите крепление для телефона.

Отсоедините установку для тестирования WFoV от удлинителя и снимите крепление для телефона.

Рисунок 139. Отсоедините установку для тестирования широкого поля зрения от удлинителя и снимите крепление для телефона.

remove_front_plate

Рисунок 140. Снимите переднюю панель.

test_zoom_tele

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

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

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

test_preview_zoom_tele

Проверяет, как работает масштабирование камеры для кадров предварительного просмотра при переключении с широкоугольного объектива на телеобъектив. Тест идентичен test_preview_zoom, но проверяет поведение масштабирования камеры для кадров предварительного просмотра от широкоугольного объектива до телеобъектива.

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

Тест пройден. Относительный размер маркера ArUco на снимке соответствует заданному коэффициенту масштабирования, что подтверждает корректную работу зума камеры. Расстояние от маркера до центра изображения меняется в соответствии с критериями, указанными в test_preview_zoom.

scene7_tele

scene7_tele – то же самое, что и scene7, но для тестирования телеобъектива. Это прямоугольная рамка, разделенная на четыре равных квадранта, каждый из которых заполнен разным цветом. В центре прямоугольника находится таблица с наклонными краями для проверки резкости. Четыре маркера ArUco выравниваются по четырем внешним углам прямоугольника, чтобы помочь получить точные координаты основной рамки прямоугольника при различных коэффициентах масштабирования.

test_multi_camera_switch_tele

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

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

Кадры, снятые в точке перехода и до нее, анализируются на предмет автоматической экспозиции, автоматического баланса белого и автофокуса.

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

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

Пройдено. Тест считается пройденным, если пройдены все три проверки. Ниже приведены критерии для каждой проверки.

  • Проверка автоматической экспозиции. Разница в яркости между изображениями, полученными с помощью широкоугольного и телеобъектива, должна быть меньше 4%.
  • Проверка автоматического баланса белого. В цветовом пространстве LAB дельта C между красно-зеленым и сине-зеленым для широкоугольного и телеобъектива не может превышать 10.
  • Проверка автофокуса: резкость изображения телеобъектива должна быть выше, чем у широкоугольного объектива.

scene_video

scene_video – это видеосцена, состоящая из четырех разноцветных кругов, которые двигаются вперед и назад с разной частотой кадров на белом фоне.

Рис. 141. Пример scene_video.

test_preview_frame_drop

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

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

Тест пройден. Частота кадров в режиме предварительного просмотра соответствует максимальному значению в запрошенном диапазоне, а среднее отклонение между последовательными кадрами меньше относительного допустимого отклонения, заданного в тесте.

Сцены для тестирования на основе sensor_fusion и установки Gen2

feature_combination

Тесты feature_combination проверяют, правильно ли работают функции камеры, когда включено несколько из них. В этих тестах используется то же изображение шахматной доски, что и в сцене для синхронизации датчиков.

test_feature_combination

Тестирует все комбинации потоков, режимы стабилизации видео, целевые диапазоны частоты кадров, 10-битные HDR-видео и Ultra HDR, поддерживаемые камерой.

В Android 16 и более поздних версиях тест проверяет все комбинации поддерживаемых функций и записывает результаты в файл proto. Утверждения о сбое вызываются только для комбинаций функций, для которых isSessionConfigurationSupported возвращает True.

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

Передача. Для каждого поддерживаемого сочетания функций:

  • Если стабилизация включена, она применяется к видеопотоку предварительного просмотра.
  • Частота кадров в режиме предварительного просмотра находится в пределах настроенного диапазона (AE_TARGET_FPS_RANGE).
  • Цветовое пространство записанного потока предварительного просмотра соответствует заданному.
  • В файле Ultra HDR есть действительная карта усиления.

scene_flash

Для тестов scene_flash требуется темная сцена в коробке для тестирования датчиков. В Android 17 и более поздних версиях тестирование scene_flash можно выполнять с помощью установки Gen2.

test_auto_flash

Проверяет, срабатывает ли автоматическая вспышка в темноте для основной и фронтальной камер. Для фронтальных камер в качестве вспышки используется экран, а не физическая вспышка. Тест проверяет, срабатывает ли автоматическая вспышка. Для этого он определяет, становится ли центр изображения ярче, когда она включена. Чтобы сработала автоматическая вспышка, свет в испытательной установке должен быть выключен. Свет можно выключить автоматически с помощью контроллера Arduino. Для правильной работы теста в помещении должно быть полностью темно. Перед тестированием на устройстве должно быть установлено приложение Jetpack Camera (JCA). Автоматическая вспышка для основных камер зависит от состояния автоэкспозиции, а для фронтальных – нет.

В Android 17 и более поздних версиях тестирует уровни масштабирования, отличные от 1-x, чтобы проверить правильность работы во всех поддерживаемых диапазонах масштабирования.

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

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

test_flash_strength

Проверяет, правильно ли реализовано управление мощностью вспышки в режиме SINGLE.

Проверяет, меняется ли яркость вспышки при использовании камеры в режиме SINGLE, если устройство поддерживает управление яркостью вспышки. Проверяет, работает ли управление мощностью вспышки с разными значениями AE_MODES. Например, если для режима автоматической экспозиции задано значение ON или OFF, уровень мощности вспышки влияет на яркость, а если ON_AUTO_FLASH – не влияет.

Для проведения теста необходимо выключить свет в испытательном стенде. Это можно сделать автоматически с помощью контроллера Arduino. Для правильной работы теста в помещении должно быть полностью темно.

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

Pass:

Если для режима автоматической экспозиции задано значение ON или OFF, яркость фрагментов изображения увеличивается по мере повышения мощности вспышки от нулевой до FLASH_SINGLE_STRENGTH_MAX_LEVEL. Когда для режима автоэкспозиции задано значение ON_AUTO_FLASH, разница в яркости фрагментов изображения находится в пределах допустимого диапазона, а уровень мощности вспышки увеличивается от нуля до FLASH_SINGLE_STRENGTH_MAX_LEVEL.

test_led_snapshot

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

В этом тесте к Sensor Fusion Box добавляется контроллер освещения. При установке освещения на OFF тест делает снимок с режимом AUTO_FLASH, установленным на ON. Во время съемки тест запускает последовательность предварительной съемки с триггером aePrecapture, установленным на START, и устанавливает цель съемки на Preview, чтобы сделать снимок со вспышкой.

Поскольку на снимке есть характерная горячая точка из-за вспышки, тест вычисляет среднее значение изображения со вспышкой для всего снимка и проверяет, находится ли значение в диапазоне (68, 102). Чтобы проверить, правильно ли настроен баланс белого, тест рассчитывает соотношение красного и зеленого, а также синего и зеленого цветов и проверяет, находится ли оно в диапазоне от 0,95 до 1,05.

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

Пройден. Соотношения красного и зеленого, а также синего и зеленого находятся в диапазоне от 0,95 до 1,05. Среднее значение изображения со вспышкой находится в диапазоне (68, 102).

test_night_mode_indicator

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

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

  1. Инициализация. Тест инициализирует ItsSession и получает свойства камеры. и устанавливает связь с контроллером освещения.
  2. Условия пропуска. Тест пропускается, если устройство не поддерживает требуемый уровень API или функцию индикатора ночного режима.
  3. Сеанс Camera2:
    • Тест запускает сеанс предварительного просмотра с помощью сеанса Camera2.
    • Включается подсветка, и камера делает снимок.
    • Тест проверяет, что индикатор ночного режима находится в состоянии OFF.
    • Подсветка выключается, и делается снимок для предварительного просмотра.
    • Тест проверяет, что индикатор ночного режима находится в состоянии ON.
  4. Сеанс расширения камеры:
    • Повторяется та же процедура, что и для сеанса Camera2, но используется сеанс CameraExtension с расширением EXTENSION_NIGHT.
  5. Очистка. Тест закрывает ItsSession и освобождает контроллер освещения.

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

Pass:

  • Когда свет включен, индикатор ночного режима должен быть в состоянии OFF.
  • Когда свет выключен, индикатор ночного режима должен быть в состоянии ON.
  • Применяется к сеансам Camera2 и CameraExtension.

test_preview_min_frame_rate

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

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

Тест пройден. Частота кадров в предварительной версии соответствует минимальному значению в запрошенном диапазоне, а разница между кадрами меньше абсолютного допустимого отклонения, заданного в тесте.

test_torch_strength

Проверяет, правильно ли реализовано управление мощностью вспышки в режиме TORCH.

Проверяет, меняется ли яркость вспышки в режиме TORCH, если устройство поддерживает управление яркостью вспышки при использовании камеры. Проверяет, работает ли управление мощностью вспышки с разными значениями AE_MODES. Например, если для режима автоэкспозиции задано значение ON или OFF, уровень мощности вспышки влияет на яркость, а если ON_AUTO_FLASH – не влияет. Проверяет, что яркость фонарика остается неизменной на протяжении всей серии снимков, имитируя запись видео. Для проведения теста необходимо выключить свет в испытательном стенде. Это можно сделать автоматически с помощью контроллера Arduino. Для правильной работы теста в помещении должно быть полностью темно.

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

Pass:

Если для режима автоматической экспозиции задано значение ON или OFF, яркость фрагментов серийной съемки увеличивается по мере повышения мощности вспышки от нулевой до FLASH_TORCH_STRENGTH_MAX_LEVEL. Когда включен режим автоэкспозиции ON_AUTO_FLASH, разница в яркости фрагментов серии снимков находится в пределах допустимого диапазона, поскольку уровень мощности вспышки увеличивается от нуля до FLASH_TORCH_STRENGTH_MAX_LEVEL.

scene_gen2_chart

В Android 17 и более поздних версиях scene_gen2_chart использует бумажную таблицу Gen2.

Эта тестовая таблица состоит из образцов лиц, QR-кода, серых участков, звезды Сименса, цветовой таблицы и наклонных квадратов.

test_chart_gen2

Рисунок 142. Пример диаграммы Gen2.

test_tonemap_sequence

В этом тесте кривая сопоставления тонов по умолчанию сравнивается с линейной кривой и двумя экспоненциальными кривыми (одна с равномерными точками, а другая с неравномерными). Чтобы пройти проверку, яркость кривой по умолчанию должна превышать яркость линейной и экспоненциальной кривых. Кроме того, линейная кривая должна быть ярче экспоненциальных, а две экспоненциальные кривые должны иметь одинаковый уровень яркости.

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

График последовательности тональной компрессии для тестирования

Рисунок 143. График тестовой последовательности тональной компрессии.

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

Тест пройден. Разница в яркости между кривой по умолчанию и линейной кривой составляет более 15%, а между двумя экспоненциальными кривыми – менее 8%.

test_multi_camera_switch

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

Тест выполняет динамическую запись предварительного просмотра в заданном диапазоне масштабирования, чтобы активировать физическую точку "перекрестия" камеры, в которой сверхширокоугольный объектив переключается на широкоугольный. Тест определяет точный кадр, в котором происходит переключение объектива. Кадры, непосредственно предшествующие этой точке пересечения и следующие за ней, фиксируются и анализируются на предмет стабильности автоматической экспозиции (AE) и автоматического баланса белого (AWB).

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

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

Прохождение теста. Чтобы пройти тест, необходимо пройти следующие проверки AE и AWB:

  • Проверка автоматической экспозиции. Если устройство поддерживает и ae_regions, и awb_regions, изменение яркости (значение Y) между изображениями, полученными с помощью широкоугольного и ультраширокоугольного объективов, должно быть меньше 4% для всех цветовых полей. Если поддерживается только ae_regions, то критериям должны соответствовать только значения серого цвета.
  • Проверка автоматического баланса белого. Если устройство поддерживает и ae_regions, и awb_regions, разница между значениями красного-зеленого и синего-зеленого для изображений, полученных с помощью широкоугольного и ультраширокоугольного объективов, должна быть меньше 3% для серого цвета и меньше 10% для других цветов.

uw_dynamic_range_patch_cell_8

Рисунок 144. Серая область, снятая на ультраширокоугольный объектив.

w_dynamic_range_patch_cell_7

Рисунок 145. Серая область, снятая на широкоугольный объектив.

scene_ip

В Android 16 и более поздних версиях сцена scene_ip позволяет проверять паритет изображений между приложением камеры по умолчанию и приложением камеры Jetpack (JCA), чтобы выявлять основные различия между снятыми изображениями. JCA воспроизводит снимки, сделанные в приложениях социальных сетей, и предоставляет базовое изображение, которое затем обрабатывается и улучшается этими приложениями.

Требования к настройке оборудования

Для тестов scene_ip требуется следующее оборудование:

  • Тесты выполняются в коробке ITS-in-a-box для камер второго поколения.
  • Контроллеры освещения и сервоприводов, входящие в состав установки Gen2, используются для управления тестовой средой.
  • Внутри установки Gen2 размещена таблица тестовых функций.

test_chart_gen2

Рисунок 146. Пример Gen2chart_sample.

Критерии пропуска тестов

Тесты scene_ip пропускаются, если выполняется любое из следующих условий:

  • Первый уровень API устройства (first_api_level) – 35 или ниже.
  • Устройство не является телефоном с основной фронтальной и основной задней камерами (например, это планшет или телевизор).

test_default_jca_ip

Делает снимки тестовой таблицы при контролируемом освещении с помощью стандартного приложения камеры и JCA, а затем выполняет следующие проверки:

  • Поле зрения. Проверяется, совпадает ли поле зрения при съемке в приложении камеры по умолчанию и JCA. Для этой проверки используется функция центрального QR-кода, извлеченная из изображения таблицы.

  • Яркость. Проверяется, что разница в яркости между приложением камеры по умолчанию и JCA не превышает 10. Для измерения яркости используется патч динамического диапазона.

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

  • Цветопередача. Проверяется, что разница в цветопередаче между приложением камеры по умолчанию и JCA не превышает 6.

Пройдено. Проверка поля зрения, яркости и баланса белого прошла успешно. В Android 16 этот тест не является обязательным (NOT_YET_MANDATED). В Android 17 и более поздних версиях проверка паритета поля зрения, яркости и баланса белого обязательна. Проверка цветопередачи не является обязательной (NOT_YET_MANDATED) в Android 17.

test_jca_jpegr_ip

Проверяет, что разница в балансе белого между предварительным снимком JPEG_R JCA и снятыми изображениями не превышает 4.

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

Тест пройден. Разница в балансе белого между снимком предварительного просмотра JCA и снятым изображением JPEG_R находится в пределах порогового значения (по умолчанию – 4).

sensor_fusion

Для тестов объединения датчиков требуется определенное движение телефона перед шахматным узором и маркерами ArUco. Для получения оптимальных результатов убедитесь, что тестовая таблица установлена ровно. Если таблица неровная, это повлияет на расчеты вращения для многих тестов. Таблица должна заполнять заднюю часть коробки для объединения датчиков. Для этого ее нужно распечатать в размере 43 x 43 см. (43 x 43 см). Тесты sensor_fusion можно автоматизировать с помощью Sensor Fusion Box.

Диаграмма объединения датчиков

Рисунок 147. Диаграмма объединения датчиков.

Диаграмма объединения датчиков в Rig

Рисунок 148. Диаграмма Sensor Fusion, которая заполняет заднюю часть коробки Sensor Fusion.

test_lens_intrinsic_calibration

Проверяет, меняется ли оптический центр внутренней линзы при ее движении из-за оптической стабилизации изображения (OIS). Если поддерживаются внутренние образцы объектива, проверяет, меняется ли оптический центр внутренних образцов объектива, когда объектив перемещается из-за OIS.

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

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

На рисунке ниже показан пример графика test_lens_intrinsic_calibration, на котором отражены изменения главных точек в пикселях для каждого кадра.

test_lens_intrinsic_calibration_example.png

Рисунок 149. Пример графика test_lens_intrinsic_calibration, показывающего изменения основных точек в пикселях для каждого кадра.

test_multi_camera_frame_sync

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

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

Пройден. Угол между изображениями с каждой камеры не меняется заметно при повороте телефона.

test_preview_distortion

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

На изображении выше идеальные точки показаны зеленым цветом, а фактические – красным. Ошибка искажения рассчитывается на основе среднеквадратичного расстояния в пикселях между фактическими и идеальными точками. Зеленые и красные области на изображении используются для визуального обнаружения области ошибки искажения.

test_preview_distortion_example.jpg

Рисунок 150. Изображение шахматной доски с идеальными точками, отмеченными зеленым, и фактическими точками, отмеченными красным.

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

Тест пройден. Нормализованная ошибка искажения каждого кадра предварительного просмотра меньше порогового значения, заданного в тесте.

test_preview_stabilization

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

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

Пройден. Максимальный угол поворота кадров составляет менее 70% от поворота гироскопа.

Ниже приведены образцы видео со стабилизацией и без нее.

Рисунок 151. Пример видео со стабилизацией.

Рисунок 152. Образец видео без стабилизации.

test_sensor_fusion

Проверяет разницу временных меток между камерой и гироскопом для приложений дополненной и виртуальной реальности. Телефон поворачивается на 90 градусов 10 раз перед шахматным узором. Движение туда и обратно занимает около двух секунд. Этот тест пропускается, если гироскоп отсутствует или не включен параметр источника временной метки REALTIME.

Тест test_sensor_fusion генерирует несколько графиков. Два наиболее важных графика для отладки:

  • test_sensor_fusion_gyro_events – события гироскопа телефона во время теста. Движение по осям X и Y означает, что телефон не закреплен на основании, что снижает вероятность прохождения теста. Количество циклов на графике зависит от скорости записи кадров.

    Пример событий гироскопа test_sensor_fusion

    Рисунок 153. Пример событий гироскопа test_sensor_fusion.

  • test_sensor_fusion_plot_rotations – показывает, как соотносятся события гироскопа и камеры. На графике должно быть видно, что движения камеры и гироскопа совпадают с точностью до 1 мс.

    Пример графика поворотов test_sensor_fusion

    Рисунок 154. Пример графика вращений test_sensor_fusion.

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

Проверка пройдена. Смещение временных меток камеры и гироскопа составляет менее 1 мс, как указано в разделе 7.3.9. Высокоточные датчики документа определения совместимости (CDD).

Механизмы отказа

  • Ошибка смещения. Смещение камеры и гироскопа не откалибровано в пределах +/-1 мс.
  • Пропуск кадров. Конвейер не успевает зафиксировать 200 кадров подряд.
  • Ошибки сокета: adb не может подключиться к тестируемому устройству на время, достаточное для выполнения теста.
  • Таблица установлена неровно. На графике test_sensor_fusion_plot_rotations есть кадры, в которых данные гироскопа и камеры значительно различаются, поскольку камера поворачивается в частях диаграммы, которые не являются плоскими.
  • Камера установлена неровно. График test_sensor_fusion_gyro_events показывает движение в плоскостях X и Y. Эта ошибка чаще возникает при использовании фронтальной камеры, поскольку основная камера обычно выступает над корпусом телефона, из-за чего при креплении задней панели телефона к монтажной пластине возникает наклон.

test_video_stabilization

Устарело. Этот тест устарел в Android 17. В Android 17 и более поздних версиях этот тест заменен на test_video_stabilization_jca.

Проверяет, что стабилизированное видео вращается меньше, чем гироскоп.

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

Тест пройден. Максимальный угол поворота в кадрах составляет менее 60% от поворота гироскопа.

Ниже приведены образцы видео со стабилизацией и без нее.

Рисунок 155. Пример видео со стабилизацией.

Рисунок 156. Образец видео без стабилизации.

test_video_stabilization_jca

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

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

Тест пройден. Максимальный угол поворота кадров, извлеченных из видео, которое было снято с помощью JCA, составляет менее 70% от поворота гироскопа.

Тестовая сцена с диффузором

scene5

Для scene5 требуется равномерно освещенная серая сцена. Для этого на объектив камеры надевается рассеиватель. Рекомендуем использовать следующий диффузор: http://www.edmundoptics.com/optics/windows-diffusers/optical-diffusers/opal-diffusing-glass/46168/.

Чтобы подготовить сцену, прикрепите рассеиватель перед камерой и направьте ее на источник света с яркостью около 2000 люкс. Фотосъемка для scene5 требует рассеянного света без явных особенностей. Пример изображения:

Пример сцены 5

Рис. 157. Пример съемки сцены 5.

Поскольку для этой сцены не требуются планшеты или контроллеры, в тестах используется тестовый стенд TEST_BED_MANUAL. Пример файла config.yml для ручного тестирования приведен в этом разделе. Файл config.yml по умолчанию не содержит TEST_BED_MANUAL, но вы можете изменить его, чтобы добавить этот параметр.

test_lens_shading_and_color_uniformity

Проверяет, правильно ли применяется коррекция затенения объектива и равномерно ли распределяется цвет монохромной однородной сцены. Выполняет этот тест на кадре YUV с автоматическим 3A. Затенение объектива оценивается по каналу Y. Измеряет среднее значение y для каждого указанного блока выборки и определяет, пройдена ли проверка, сравнивая его с центральным значением y. Тест на однородность цвета оценивается в красно-зеленом и сине-зеленом пространстве.

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

Тест пройден. В указанном радиусе изображения разница между значениями красно-зеленого и сине-зеленого цветов должна быть меньше 20 %.

Механизмы отказа

  • Чрезмерное виньетирование на изображениях
  • Черные поля на изображениях

test_lens_shading_and_color_uniformity_y_plane

Рисунок 158. test_lens_shading_and_color_uniformity_y_plane.

test_lens_shading_and_color_uniformity_color_uniformity_result

Рисунок 159. test_lens_shading_and_color_uniformity_color_uniformity.

test_lens_shading_and_color_uniformity_lens_shading_result

Рисунок 160. test_lens_shading_and_color_uniformity_lens_shading_result.

Тестовая сцена на планшете с широкой цветовой гаммой

scene_wide_gamut

scene_wide_gamut – прямоугольная рамка, разделенная на четыре равных квадранта, каждый из которых закрашен своим цветом. Для этого на планшете должна отображаться диаграмма в широкой гамме, а тестируемое устройство должно сделать фотографию экрана в широкой гамме.

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

test_display_p3

Тестирует съемку в цветовом пространстве Display P3 в формате JPEG с помощью API ColorSpaceProfiles. Проверяет, есть ли в заголовке JPEG-файла подходящий профиль ICC и содержит ли изображение определенный процент цветов за пределами цветовой гаммы sRGB.

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

Проверка пройдена. Файл JPEG содержит профиль ICC Display P3 и более 1 % цветов за пределами гаммы sRGB.

test_display_p3 example

Рисунок 161. Пример test_display_p3.