На этой странице представлен полный список тестов в рамках набора тестов изображения камеры (ITS), который является частью набора тестов совместимости Android (CTS) Verifier. Тесты ITS являются функциональными тестами, то есть они не измеряют качество изображения, а показывают, что все заявленные функции камеры работают должным образом. Этот документ позволяет разработчикам и тестировщикам понять, что делают отдельные тесты и как устранять сбои тестов.
Камера ITS проверяет тесты по требуемым свойствам камеры, уровню API и уровню класса производительности мультимедиа (MPC). На уровне API ITS использует ro.product.first_api_level
для проверки добавленных на определенном уровне API тестов, которые проверяют негативное взаимодействие пользователей с функциональностью на более низких уровнях API. ITS использует ro.vendor.api_level
для тестирования функций, добавленных на определенном уровне API, которые требуют новых аппаратных возможностей. Если для устройства определен ro.odm.build.media_performance_class
, ITS требует выполнения определенных тестов в зависимости от уровня MPC.
Тесты сгруппированы по сценам следующим образом:
- Scene0 : Захват метаданных, дрожания, гироскопа, вибрации.
- сцена 1 : экспозиция, чувствительность, компенсация EV, YUV против JPEG/RAW.
- сцена2 : распознавание лиц, тесты, требующие цветных сцен.
- сцена 3 : улучшение краев, движение объектива.
- сцена4 : Соотношение сторон, обрезка, поле зрения.
- сцена5 : Затенение линзы
- сцена6 : масштабирование
- Scene7 : Переключение нескольких камер.
- Scene8 : измерение региона AE и AWB
- сцена9 : сжатие JPEG.
- Scene_extensions : Расширения камеры.
- Scene_flash : автоматическая вспышка, минимальная частота кадров.
- Scene_video : Пропадает кадр.
- Sensor_fusion : смещение времени камеры/гироскопа
- Feature_combination : Комбинации функций.
См. отдельные разделы для описания каждой сцены.
сцена0
Тесты сцены 0 не требуют никакой конкретной информации о сцене. Однако для проведения испытаний на гироскоп и вибрацию телефон должен быть неподвижен.
test_jitter
Измеряет дрожание временных меток камеры.
Протестированные API:
-
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE
Пройдено: разница между кадрами составляет не менее 30 мс.
test_jitter_plot.png (Обратите внимание на небольшой диапазон по оси Y. На этом графике джиттер на самом деле небольшой.)
test_metadata
Проверяет достоверность записей метаданных. Просматривает результаты захвата и характеристики объектов камеры. В этом тесте используются значения экспозиции и усиления auto_capture_request
, поскольку содержимое изображения не важно.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
-
android.hardware.camera2.CameraCharacteristics#SCALER_CROPPING_TYPE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_BLACK_LEVEL_PATTERN
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_TIMESTAMP_SOURCE
-
android.hardware.camera2.CaptureRequest#SENSOR_FRAME_DURATION
-
android.hardware.camera2.CaptureResult#SENSOR_ROLLING_SHUTTER_SKEW
Пройдено: аппаратный уровень, rollingShutterSkew
, теги frameDuration
, timestampSource
, croppingType
, blackLevelPattern
, pixel_pitch
, FoV, гиперфокальное расстояние присутствуют и имеют допустимые значения.
test_request_capture_match
Проверяет, что устройство записывает правильные значения экспозиции и усиления, считывая метаданные захвата.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_EXPOSURE_TIME_RANGE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
-
android.hardware.camera2.CaptureResult#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureResult#SENSOR_SENSITIVITY
Пройдено: значения метаданных запроса и захвата совпадают для всех снимков.
test_sensor_events
Тестирует, что устройство запрашивает и распечатывает события датчиков для устройств, рекламирующих поддержку объединения датчиков. Ожидаемые датчики — акселерометр, гироскоп и магнитометр. Этот тест работает только в том случае, если экран включен, то есть устройство не находится в режиме ожидания.
Протестированные API:
Pass: Получены события для каждого датчика.
test_solid_color_test_pattern
Проверяет правильность создания сплошных цветных тестовых шаблонов для отключения звука камеры. Если поддерживается отключение звука камеры, должны поддерживаться сплошные цветные тестовые шаблоны. Если отключение звука камеры не поддерживается, тестовые шаблоны сплошного цвета проверяются только в том случае, если такая возможность заявлена.
Если поддерживаются изображения RAW, также проверяется назначение цветов. Тестируемые цвета: черный, белый, красный, синий и зеленый. Для камер, которые не поддерживают изображения RAW, тестируется только черный цвет.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristic#SENSOR_AVAILABLE_TEST_PATTERN_MODES
-
android.hardware.camera2.CaptureResult#SENSOR_TEST_PATTERN_DATA
-
android.hardware.camera2.CaptureResult#SENSOR_TEST_PATTERN_MODE
Пройдено: поддерживаются сплошные тестовые шаблоны правильного цвета и небольшая дисперсия изображения.
test_test_pattern
Проверяет параметр android.sensor.testPatternMode
для захвата кадров для каждого допустимого тестового шаблона и проверяет, правильно ли генерируются кадры для сплошных цветов и цветных полос. Этот тест включает в себя следующие шаги:
- Захватывает изображения для всех поддерживаемых тестовых шаблонов.
- Выполняет простую проверку правильности тестового шаблона сплошного цвета и цветных полос.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristic#SENSOR_AVAILABLE_TEST_PATTERN_MODES
-
android.hardware.camera2.CaptureResult#SENSOR_TEST_PATTERN_MODE
Пройдено: поддерживаемые тестовые шаблоны генерируются правильно.
test_test_patterns_2.jpg
test_tonemap_curve
Тестирует преобразование тестового шаблона из RAW в YUV с линейной картой тонов. Для этого теста требуется android.sensor.testPatternMode = 2
(COLOR_BARS) для создания идеального шаблона изображения для преобразования тональной карты. Гарантирует, что конвейер имеет правильные выходные цвета с линейной картой тонов и идеальным входным изображением (зависит от test_test_patterns
).
Протестированные API:
-
android.hardware.camera2.CaptureRequest#DISTORTION_CORRECTION_MODE
-
android.hardware.camera2.CaptureRequest#SENSOR_TEST_PATTERN_MODE
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
Пройдено: YUV и RAW похожи друг на друга.
test_tonemap_curve_raw_2.jpg
test_tonemap_curve_yuv_2.jpg
test_unified_timestamp
Проверяет, находятся ли события изображения и датчика движения в одном временном интервале.
Протестированные API:
-
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP
-
android.hardware.Sensor
-
android.hardware.SensorEvent
-
android.hardware.Sensor#TYPE_ACCELEROMETER
-
android.hardware.Sensor#TYPE_GYROSCOPE
Пройдено: временные метки движения находятся между двумя временными метками изображения.
test_vibration_restriction
Проверяет, работает ли вибрация устройства должным образом.
Протестированные API:
-
android.hardware.Sensor
-
android.hardware.SensorEvent
-
android.hardware.Sensor#TYPE_ACCELEROMETER
-
android.os.Vibrator
-
android.hardware.camera2.CameraDevice#setCameraAudioRestriction
Пройдено: устройство не вибрирует при отключении звука с помощью API ограничения звука камеры.
сцена 1
сцена1 представляет собой серую диаграмму. Серая диаграмма должна охватывать центральные 30 % поля зрения камеры. Ожидается, что серая диаграмма будет в некоторой степени бросать вызов 3A (автоэкспозиция, автоматический баланс белого, автофокусировка), поскольку в центральной области нет никаких особенностей. Однако запрос на захват определяет всю сцену, которая включает в себя достаточно функций для сходимости 3A.
Камеры RFoV можно тестировать на испытательном стенде WFoV или RFoV. Если камера RFoV тестируется на испытательном стенде WFoV, диаграмма масштабируется на ⅔, чтобы обеспечить некоторые границы серой диаграммы в поле зрения и помочь сходимости 3A. Более подробное описание стендов для тестирования камер см. в разделе Camera ITS-in-a-box .
сцена 1: полноразмерная диаграмма (слева). ⅔ масштабированная диаграмма (справа).
test_ae_precapture_trigger
Тестирует конечный автомат AE при использовании триггера предварительного захвата. Захватывает пять ручных запросов с отключенным AE. Последний запрос имеет триггер предварительного захвата AE, который следует игнорировать, поскольку AE отключен.
Протестированные API:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER
-
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
Пройдено: AE сходится.
test_auto_vs_manual
Тесты, в которых были сделаны автоматические и ручные снимки, выглядят одинаково.
Протестированные API:
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
-
android.hardware.camera2.CaptureResult#TONEMAP_CURVE
-
android.hardware.camera2.CaptureResult#TONEMAP_MODE
Успешно: усиление и преобразование баланса белого вручную, сообщаемые в каждом результате съемки, совпадают с estimate
автоматического баланса белого по алгоритму 3A камеры.
test_auto_vs_manual_auto.jpg
test_auto_vs_manual_wb.jpg
test_auto_vs_manual_manual_wb_tm.jpg
test_black_white
Проверяет, что устройство создает полностью черно-белые изображения. Делается два снимка: первый с чрезвычайно низким усилением и короткой выдержкой, в результате которого получается черная фотография, а второй с чрезвычайно высоким усилением и длинной выдержкой, в результате чего получается белая фотография.
Протестированные API:
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Pass: Создает черно-белые изображения. Насыщенные каналы белых изображений имеют значения RGB [255, 255, 255] с погрешностью менее 1%.
test_black_white_black.jpg | test_black_white_white.jpg |
test_black_white_plot_means.png
test_burst_capture
Проверяет, что весь конвейер захвата может соответствовать скорости полноразмерного захвата и процессорному времени.
Протестированные API:
Пройдено: захватывает серию полноразмерных изображений, проверяет отсутствие кадров и яркость изображения.
test_burst_sameness_manual
Делает 5 серий по 50 изображений с ручной настройкой съемки и проверяет их идентичность. Этот тест можно использовать для определения наличия спорадических кадров, которые обрабатываются по-разному или содержат артефакты.
Протестированные API:
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR
-
android.hardware.camera2.CameraMetadata#SYNC_MAX_LATENCY_PER_FRAME_CONTROL
Пройдено: изображения идентичны визуально и в значениях RGB.
Неудачно: показывает скачок или падение средней диаграммы RGB в начале каждого пакета.
- Допуск составляет 3% для
first_API_level
< 30. - Допуск составляет 2 % для
first_API_level
>= 30.
test_burst_sameness_manual_mean.jpg
test_burst_sameness_manual_plot_means.png
test_capture_result
Проверяет, что действительные данные возвращаются в объекты CaptureResult
. Выполняет автоматический, ручной и автоматический захват.
Протестированные API:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_REGIONS
-
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AF_REGIONS
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_REGIONS
-
android.hardware.camera2.CaptureRequest#CONTROL_MODE
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
-
android.hardware.camera2.CaptureResult#STATISTICS_LENS_SHADING_CORRECTION_MAP
-
android.hardware.camera2.CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
Пройдено: метаданные действительны для всех захватов, а ручные настройки не попадают во второй автоматический захват. Выводит на график коррекцию затенения объектива для снимков.
test_capture_result_plot_lsc_auto_ch0.png
test_crop_region_raw
Проверяет, что потоки RAW невозможно обрезать.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
-
android.hardware.camera2.CaptureResult#SCALER_CROP_REGION
-
android.hardware.camera2.CaptureRequest#SCALER_CROP_REGION
Пройдено: изображения YUV обрезаются по центру, но не изображения RAW.
test_crop_region_raw_comp_raw_crop.jpg
test_crop_region_raw_comp_raw_full.jpg
test_crop_region_raw_comp_yuv_crop.jpg
test_crop_region_raw_yuv_full.jpg
test_crop_regions
Тесты на то, что регионы посева работают. Делает полное изображение и создает фрагменты из 5 различных областей (углы и центр). Делает изображения с кадрированием для 5 областей. Сравнивает значения патча и изображения обрезки.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
-
android.hardware.camera2.CaptureRequest#SCALER_CROP_REGION
Пройдено: изображение обрезанной области соответствует фрагменту, соответствующему обрезанному изображению.
test_dng_noise_model
Проверяет правильность параметров необработанной модели DNG. На графике изображена измеренная дисперсия центрального участка серой карты в необработанных снимках, снятых в диапазоне чувствительности, и сравниваются эти значения с дисперсией, ожидаемой при каждой чувствительности с помощью модели шума DNG в камере HAL (на основе Параметры O,S, возвращаемые в объектах результатов захвата). Для получения более подробной информации о модели шума DNG загрузите следующий документ о модели шума DNG .
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL
-
android.hardware.camera2.CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
-
android.hardware.camera2.CaptureResult#SENSOR_NOISE_PROFILE
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Пройдено: параметры необработанной модели DNG верны. Ожидаемые значения RGB соответствуют фактически измеренным значениям RGB.
test_dng_noise_model_plog.png
test_ev_compensation_advanced
Проверяет, применяется ли компенсация величины экспозиции (EV). Тест увеличивает экспозицию в восемь этапов и сравнивает измеренную яркость с ожидаемой. Ожидаемые значения рассчитываются на основе яркости изображения без применения компенсации EV, и ожидаемое значение будет насыщаться, если рассчитанные значения превышают диапазон фактических значений изображения. Тест не пройден, если ожидаемые значения и измеренные значения не совпадают или изображения переэкспонированы в течение пяти шагов.
Протестированные API:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_EXPOSURE_COMPENSATION
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_LOCK
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_LOCK
-
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
-
android.hardware.camera2.CaptureResult#TONEMAP_CURVE
-
android.hardware.camera2.CaptureResult#TONEMAP_MODE
Пройдено: изображения показывают увеличение экспозиции без переэкспонирования в течение пяти шагов.
test_ev_compensation_advanced_plot_means.png
test_ev_compensation_basic
Проверяет, что компенсация EV применяется с использованием диапазона, созданного с помощью CONTROL_AE_COMPENSATION_STEP
. При каждом значении компенсации захватывается восемь кадров.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_AE_COMPENSATION_STEP
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_EXPOSURE_COMPENSATION
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_LOCK
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_LOCK
-
android.hardware.camera2.CaptureResult#CONTROL_AE_EXPOSURE_COMPENSATION
-
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
Пройдено: фиксируется увеличение яркости с увеличенной настройкой компенсации EV, и восемь кадров, снятых для каждой настройки компенсации EV, имеют стабильные значения яркости.
test_ev_compensation_basic.png
test_exposure_x_iso
Тесты на достижение постоянной экспозиции при изменении ISO и времени экспозиции. Делает серию снимков, в которых ISO и время экспозиции выбраны так, чтобы сбалансировать друг друга. Результаты должны иметь одинаковую яркость, но с течением времени изображение должно становиться более шумным. Проверяет, что средние значения пикселей выборки близки друг к другу. Гарантирует, что изображения не привязаны к 0 или 1 (из-за чего они будут выглядеть как плоские линии). Тест также можно запустить с изображениями RAW, установив флаг debug
в файле конфигурации.
Протестированные API:
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Пройдено: изображения имеют одинаковую яркость, но становятся более шумными при более высоком значении ISO. Плоскости RGB являются плоскими, когда значение экспозиции ISO* постоянно в тестируемом пространстве усиления.
Механизм отказа:
- В
test_exposure_plot_means.png
по мере увеличения значений множителя усиления (ось X) нормализованные средние значения плоскости RGB (ось Y) начинают отклоняться от значений множителя низкого усиления.
test_exposure_plot_means.png
test_exposure_mult=1.00.jpg | test_exposure_mult=64.00.jpg |
test_jpeg
Тесты, конвертирующие изображения YUV и изображения устройств в формате JPEG, выглядят одинаково. Тест берет центральные 10% изображения, вычисляет значения RGB и проверяет их совпадение.
Протестированные API:
Пройдено: средняя разница RGB между каждым изображением составляет менее 3%.
test_jpeg_fmt=jpg.jpg | test_jpeg=fmt=yuv.jpg |
test_latching
Проверяет, что настройки (экспозиция и усиление) фиксируются на правом кадре для камер FULL
и LEVEL_3
. Делает серию снимков, используя последовательные запросы, изменяя параметры запроса захвата между кадрами. Проверяет, имеют ли изображения ожидаемые свойства.
Протестированные API:
Пройдено: изображения [2, 3, 6, 8, 10, 12, 13] имеют увеличенное значение ISO или экспозицию и отображаются с более высокими средними значениями RGB в test_latching_plot_means.png
.
test_latching_i=00.jpg | test_latching_i=01.jpg | test_latching_i=02.jpg | |
test_latching_i=03.jpg | test_latching_i=04.jpg | test_latching_i=05.jpg | |
test_latching_i=06.jpg | test_latching_i=07.jpg | test_latching_i=08.jpg | |
test_latching_i=09.jpg | test_latching_i=10.jpg | test_latching_i=11.jpg | |
test_latching_i=12.jpg |
test_latching_plot_means.png
test_linearity
Тестирует, что обработку устройства можно инвертировать в линейные пиксели. Захватывает последовательность снимков, когда устройство направлено на однородную цель.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CaptureRequest#BLACK_LEVEL_LOCK
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
Успешно: значения R, G, B должны увеличиваться линейно с увеличением чувствительности.
test_linearity_plot_means.png
test_locked_burst
Тестирует блокировку 3A и пакет YUV (с использованием автоматической настройки). Этот тест предназначен для прохождения даже на ограниченных устройствах, у которых нет MANUAL_SENSOR
или PER_FRAME_CONTROLS
. Тест проверяет согласованность изображения YUV, в то время как проверка частоты кадров выполняется в CTS.
Протестированные API:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_LOCK
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_LOCK
Пройдено: снимки выглядят стабильно.
test_locked_burst_frame0.jpg
test_locked_burst_frame1.jpg
test_locked_burst_frame2.jpg
test_param_color_correction
Проверяет, что параметры android.colorCorrection.*
применяются, если они установлены. Делает снимки с разными значениями преобразования и усиления и проверяет, выглядят ли они соответственно по-разному. Преобразование и коэффициенты усиления выбираются таким образом, чтобы выходной сигнал стал все более красным или синим. Использует линейную карту тонов. Тональное отображение — это метод, используемый при обработке изображений для сопоставления одного набора цветов с другим, чтобы аппроксимировать внешний вид изображений с расширенным динамическим диапазоном в среде с более ограниченным динамическим диапазоном.
Протестированные API:
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
Пройдено: значения R и B увеличиваются в соответствии с трансформацией.
test_param_color_correction_plot_means.png
*Ось X — запросы на захват: 0 = единица, 1 = усиление красного цвета, 2 = усиление синего цвета.
test_param_color_correction_req=0.jpg
test_param_color_correctness_req=1.jpg (усиление R)
test_param_color_correction_req=2.jpg (увеличение B)
test_param_flash_mode
Проверяет применение параметра android.flash.mode
. Вручную устанавливает экспозицию на темной стороне, чтобы было видно, сработала вспышка или нет, и использует линейную карту тонов. Проверяет центр изображения плитки, чтобы увидеть, создан ли большой градиент, чтобы проверить, сработала ли вспышка.
Протестированные API:
Пройдено: центр изображения плитки имеет большой градиент, что означает, что сработала вспышка.
test_param_flash_mode_1.jpg
test_param_flash_mode_1_tile.jpg
test_param_flash_mode_2.jpg
test_param_flash_mode_2_tile.jpg
test_param_noise_reduction
Проверяет правильность применения параметра android.noiseReduction.mode
, если он установлен. Съемка изображений при слабом освещении камеры. Использует высокое аналоговое усиление, чтобы обеспечить зашумленность захваченного изображения. Захватывает три изображения: отключенное шумоподавление, «быстрое» и «высокое качество». Также захватывает изображение с низким усилением и отключенным шумоподавлением и использует его дисперсию в качестве базовой линии. Чем выше SNR (отношение сигнал/шум), тем лучше качество изображения.
Протестированные API:
Pass: SNR варьируется в зависимости от режима шумоподавления и ведет себя так же, как показано на графике ниже.
test_param_noise_reduction_plot_SNRs.png
0: ВЫКЛ, 1: БЫСТРО, 2: HQ, 3: МИН, 4: ZSL
test_param_noise_reduction_high_gain_nr=0.jpg
test_param_noise_reduction_high_gain_nr=1.jpg
test_param_noise_reduction_high_gain_nr=2.jpg
test_param_noise_reduction_high_gain_nr=3.jpg
test_param_noise_reduction_low_gain.jpg
test_param_shading_mode
Проверяет применение параметра android.shading.mode
.
Протестированные API:
-
android.hardware.camera2.CaptureRequest#SHADING_MODE
-
android.hardware.camera2.CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE
-
android.hardware.camera2.CaptureResult#STATISTICS_LENS_SHADING_CORRECTION_MAP
Пройдено: режимы затенения переключаются, а карты затенения объектива изменяются, как ожидалось.
test_param_shading_mode_ls_maps_mode_0_loop_0.png
test_param_shading_mode_ls_maps_mode_1_loop_0.png
test_param_shading_mode_ls_maps_mode_2_loop_0.png
test_param_tonemap_mode
Проверяет применение параметра android.tonemap.mode. Применяет разные кривые карты тонов к каждому каналу R, G, B и проверяет, что выходные изображения изменяются должным образом. Этот тест состоит из двух тестов: test1 и test2.
Протестированные API:
-
android.hardware.camera2.CameraMetadata#TONEMAP_MODE_CONTRAST_MODE
-
android.hardware.camera2.CameraMetadata#TONEMAP_MODE_FAST
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
Проходить:
- test1: Оба изображения имеют линейную карту тонов, но n=1 имеет более крутой градиент. Канал G (зеленый) ярче для изображения n=1.
- test2: Та же карта тонов, но разная длина. Изображения те же самые.
test_param_tonemap_mode_n=0.jpg | test_param_tonemap_mode_n=1.jpg |
test_post_raw_sensitivity_boost
Проверяет повышение чувствительности после RAW. Захватывает набор изображений RAW и YUV с разной чувствительностью, публикует комбинацию повышения чувствительности RAW и проверяет, соответствует ли среднее значение выходного пикселя настройкам запроса.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
-
android.hardware.camera2.CaptureRequest#CONTROL_POST_RAW_SENSITIVITY_BOOST
-
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Пройдено: изображения RAW становятся темнее по мере увеличения усиления, в то время как изображения YUV остаются постоянной яркости.
test_post_raw_sensitivity_boost_raw_s=3583_boost=0100.jpg
test_post_raw_sensitivity_boost_raw_s=1792_boost=0200.jpg
test_post_raw_sensitivity_boost_raw_s=0896_boost=0400.jpg
test_post_raw_sensitivity_boost_raw_s=0448_boost=0800.jpg
test_post_raw_sensitivity_boost_raw_s=0224_boost=1600.jpg
test_post_raw_sensitivity_boost_raw_s=0112_boost=3199.jpg
test_post_raw_sensitivity_boost_raw_plot_means.png
test_post_raw_sensitivity_boost_yuv_s=0112_boost=3199.jpg
test_post_raw_sensitivity_boost_yuv_s=0448_boost=0800.jpg
test_post_raw_sensitivity_boost_yuv_s=0896_boost=0400.jpg
test_post_raw_sensitivity_boost_yuv_s=1792_boost=0200.jpg
test_post_raw_sensitivity_boost_yuv_s=3585_boost=0100.jpg
test_post_raw_sensitivity_boost_yuv_plot_means.png
test_raw_burst_sensitivity
Захватывает набор необработанных изображений с возрастающим усилением и измеряет шум. Захватывает только в сыром виде, пакетно.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL
-
android.hardware.camera2.CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
Pass: каждый выстрел шумнее предыдущего, так как усиление увеличивается.
Использует дисперсию центральной ячейки сетки статистики.
test_raw_burst_sensitivity_variance.png
test_raw_exposure
Захватывает набор необработанных изображений с увеличением времени экспозиции и измеряет значения пикселей.
Протестированные API:
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
Пройдено: увеличение ISO (усиления) делает пиксели более чувствительными к свету, поэтому график смещается влево.
test_raw_exposure_s=55.png
(10⁰ — 1 мс, 10¹ — 10 мс, 10⁻¹ — 0,1 мс)
test_raw_exposure_s=132.png
test_raw_exposure_s=209.png
test_raw_exposure_s=286.png
test_raw_exposure_s=363.png
test_raw_exposure_s=440.png
test_raw_sensitivity
Захватывает набор необработанных изображений с повышенной чувствительностью и измеряет шум (дисперсию) в центре 10% изображения. Тестирует, что каждый выстрел шумнее предыдущего.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL
-
android.hardware.camera2.CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
Пас: дисперсия увеличивается с каждым выстрелом.
test_raw_sensitivity_variance.png
test_reprocess_noise_reduction
Проверяет, что android.noiseReduction.mode
применяется для повторной обработки запросов. Захватывает обработанные изображения при слабом освещении камеры. Использует высокое аналоговое усиление, чтобы обеспечить зашумленность захватываемого изображения. Захватывает три обработанных изображения: отключенное шумоподавление, «быстрое» и «высокое качество». Захватывает обработанное изображение с низким усилением и отключенным шумоподавлением и использует его дисперсию в качестве базовой линии.
Протестированные API:
Пройдено: FAST >= OFF, HQ >= FAST, HQ >> OFF
Типичный график зависимости SNR от NR_MODE
test_tonemap_sequence
Тестирует последовательность снимков с различными кривыми тональной карты. Делает 3 ручных снимка с линейной картой тонов. Делает 3 ручных снимка с тональной картой по умолчанию. Вычисляет дельту между каждой последовательной парой кадров.
Протестированные API:
Пройдено: есть 3 одинаковых кадра, за которыми следует другой набор из 3 одинаковых кадров.
test_tonemap_sequence_i=0.jpg
test_tonemap_sequence_i=1.jpg
test_tonemap_sequence_i=2.jpg
test_tonemap_sequence_i=3.jpg
test_tonemap_sequence_i=4.jpg
test_tonemap_sequence_i=5.jpg
test_yuv_jpeg_all
Проверяется работоспособность всех заявленных размеров и форматов для захвата изображений. Использует ручной запрос с линейной картой тонов, чтобы YUV и JPEG выглядели одинаково при преобразовании модулем image_processing_utils
. Изображения не сохраняются по умолчанию, но их можно сохранить, включив debug_mode
.
Протестированные API:
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
-
android.graphics.ImageFormat#JPEG
Пройдено: все центры изображений имеют максимальную разницу RMS (среднеквадратичное значение сигнала) в изображениях, преобразованных в RGB, с 3% от изображения YUV с самым высоким разрешением.
test_yuv_jpeg_all.png
test_yuv_plus_dng
Проверяет работоспособность заявленных размеров и форматов для захвата изображений.
Протестированные API:
Пройдено: тест завершается и возвращает запрошенные изображения.
test_yuv_plus_dng.jpg
test_yuv_plus_jpeg
Тестирует захват одного кадра как в формате YUV, так и в формате JPEG. Использует ручной запрос с линейной картой тонов, чтобы YUV и JPEG выглядели одинаково при преобразовании модулем image_processing_utils
.
Протестированные API:
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
-
android.graphics.ImageFormat#JPEG
Пройдено: изображения YUV и JPEG схожи и имеют разницу менее 1 % RMS (среднеквадратичное значение сигнала).
test_yuv_plus_jpg_jpg.jpg | test_yuv_plus_jpeg_yuv.jpg |
test_yuv_plus_raw
Тестируется захват одного кадра как в формате RAW/RAW10/RAW12, так и в формате YUV, если он поддерживается. Использует ручной запрос с линейной картой тонов, поэтому ожидается, что RAW и YUV будут одинаковыми. Сравнивает центральные 10% значений RGB преобразованных в RGB изображений. Журналы android.shading.mode
.
Протестированные API:
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
-
android.hardware.camera2.CaptureResult#STATISTICS_LENS_SHADING_CORRECTION_MAP
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
-
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_MODE
-
android.hardware.camera2.CaptureRequest#SHADING_MODE
-
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
-
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
-
android.hardware.graphics.ImageFormat#RAW10
-
android.hardware.graphics.ImageFormat#RAW12
Пройдено: YUV и необработанные изображения схожи и имеют разницу менее 3,5% RMS (среднеквадратичное значение сигнала).
test_yuv_plus_raw_shading=1_raw.jpg | test_yuv_plus_raw_shading=1_yuv.jpg |
сцена2_а
Scene2_a имеет три лица на сером фоне и нейтральную одежду. Лица подбираются с учетом широкого спектра оттенков кожи. Диаграмма должна иметь правильную ориентацию, чтобы распознавание лиц работало оптимально.
сцена2_а
test_autoframing
Тестирует поведение автокадрирования устройства камеры. Выполняет большое масштабирование, чтобы ни одно из лиц в сцене не было видно, включает режим автокадрирования, устанавливая AUTOFRAMING
в CaptureRequest
значение True
, и проверяет, можно ли обнаружить все лица в исходной сцене, когда состояние сходится (то есть, когда Для AUTOFRAMING_STATE
в CaptureResult
установлено значение AUTOFRAMING_STATE_CONVERGED
).
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_AUTOFRAMING_AVAILABLE
-
android.hardware.camera2.CaptureRequest#CONTROL_AUTOFRAMING
-
android.hardware.camera2.CaptureResult#CONTROL_AUTOFRAMING
-
android.hardware.camera2.CaptureResult#CONTROL_AUTOFRAMING_STATE
Пройдено: обнаружены все три лица.
test_display_p3
Тесты Отображение захвата P3 в формате JPEG с использованием API ColorSpaceProfiles
. Проверяет, что захваченный JPEG имеет соответствующий профиль ICC в заголовке и что изображение содержит цвета за пределами гаммы sRGB.
Протестированные API:
-
android.hardware.camera2.params.ColorSpaceProfiles
-
android.hardware.camera2.params.SessionConfiguration#setColorSpace
Пройден: JPEG содержит профиль Display P3 ICC и цвета за пределами гаммы sRGB.
test_effects
Захватывает кадр для поддерживаемых эффектов камеры и проверяет, правильно ли они сгенерированы. Тест проверяет только эффекты OFF
и MONO
, но сохраняет изображения для всех поддерживаемых эффектов.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_AVAILABLE_EFFECTS
-
android.hardware.camera2.CaptureRequest#CONTROL_EFFECT_MODE
Пройдено: захватывается изображение сцены с OFF
эффектами и монохромное изображение с эффектами, установленными на MONO
.
test_effects_MONO.jpg
test_format_combos
Тестирует различные комбинации выходных форматов.
Протестированные API:
android.hardware.camera2.CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP
android.hardware.camera2.params.StreamConfigurationMap#getOutputSizes()
android.hardware.camera2.CameraCaptureSession#captureBurst()
Пас: Все комбинации успешно собраны.
test_num_faces
Тестирует распознавание лиц.
Протестированные API:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Пройти: находит три лица.
test_num_faces_fd_mode_1.jpg
test_reprocess_uv_swap
Проверяет, что обработка YUV не меняет местами плоскости U и V. Это обнаруживается путем расчета суммы абсолютных разностей (SAD) между обработанным изображением и необработанным снимком. Если замена выходных плоскостей U и V повторно обработанного захвата приводит к увеличению SAD, то предполагается, что выходные данные имеют правильные плоскости U и V.
Протестированные API:
-
android.hardware.camera2.CameraDevice#createCaptureSession
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_YUV_REPROCESSING
-
android.hardware.camera2.CaptureRequest#EDGE_MODE
-
android.hardware.camera2.CaptureResult#NOISE_REDUCTION_MODE
Пройдено: плоскости U и V не меняются местами.
test_reprocess_uv_swap.png
сцена2_б
test_num_faces
Тестирует распознавание лиц с увеличенным разнообразием оттенков кожи в сценах с лицами.
Протестированные API:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Пройти: находит 3 лица.
test_num_faces_fd_mode_1.jpg
test_yuv_jpeg_capture_sameness
Захватывает два изображения, используя самые большие распространенные форматы YUV и JPEG с тем же соотношением сторон, что и самый большой формат JPEG, но не превышающее разрешение 1920x1440. Устанавливает jpeg.quality
на 100 и фиксирует запрос двойной поверхности. Преобразует оба изображения в массивы RGB и вычисляет трехмерную среднеквадратическую разницу (RMS) между двумя изображениями.
Кроме того, этот тест проверяет, что выходные данные YUV для всех поддерживаемых вариантов использования потока достаточно похожи на YUV со сценарием использования STILL_CAPTURE
.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#SCALER_AVAILABLE_STREAM_USE_CASES
-
android.hardware.camera2.CaptureRequest#JPEG_QUALITY
-
android.graphics.ImageFormat#JPEG
Пройдено: изображения YUV и JPEG для варианта использования STILL_CAPTURE
имеют разницу менее 3% RMS (среднеквадратичное значение сигнала); Изображения YUV для всех поддерживаемых вариантов использования имеют среднеквадратичное отличие менее 10 % от изображений YUV со сценарием использования STILL_CAPTURE
.
сцена2_с
test_num_faces
Тестирует распознавание лиц с увеличенным разнообразием оттенков кожи в сценах с лицами.
Протестированные API:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Пройти: находит 3 лица.
test_num_faces_fd_mode_1.jpg
test_jpeg_capture_perf_class
Тестирует задержку захвата JPEG для класса производительности S, как указано в разделе 2.2.7.2 Камера на CDD.
Пройдено: ДОЛЖНА иметь задержку захвата JPEG камерой 2 < 1000 мс для разрешения 1080p, измеренную с помощью теста производительности камеры CTS в условиях освещения ITS (3000K) для обеих основных камер.
test_camera_launch_perf_class
Тестирует задержку запуска камеры для класса производительности S, как указано в разделе 2.2.7.2 Камера в CDD.
Пройдено: ДОЛЖНА иметь задержку запуска камеры 2 (открытая камера до первого кадра предварительного просмотра) < 600 мс, измеренная с помощью теста производительности камеры CTS в условиях освещения ITS (3000K) для обеих основных камер.
test_default_camera_hdr
Проверяет, что захват камеры по умолчанию имеет режим Ultra HDR для класса производительности 15, как указано в разделе 2.2.7.2 Камера CDD.
Пройдено: захват камеры по умолчанию ДОЛЖЕН быть Ultra HDR для устройства с классом производительности 15.
сцена2_d
test_num_faces
Тестирует распознавание лиц с увеличенным разнообразием оттенков кожи в сценах с лицами.
Протестированные API:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Пройти: находит 3 лица.
сцена2_е
test_continous_picture
50 кадров разрешения VGA захватываются с первой установкой запроса захвата android.control.afMode = 4 (CONTINUOUS_PICTURE).
Протестированные API:
-
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
-
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
-
android.hardware.camera2.CaptureResult#CONTROL_AF_STATE
-
android.hardware.camera2.CaptureResult#CONTROL_AWB_STATE
Пройдено: система 3A стабилизируется к концу захвата 50 кадров.
test_num_faces
Тестирует распознавание лиц с увеличенным разнообразием оттенков кожи в сценах с лицами.
Протестированные API:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Пройти: находит 3 лица.
сцена2_ф
Scene2_f имеет три лица с белым фоном и белую одежду. Лица имеют широкий диапазон оттенков кожи и высокий контраст с фоном.
сцена2_ф
test_num_faces
Тестирует распознавание лиц с увеличенным разнообразием оттенков кожи в сценах с лицами.
Протестированные API:
-
android.hardware.camera2.CaptureResult#STATISTICS_FACES
-
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Пройти: находит 3 лица.
test_num_faces_fd_mode_1.jpg
сцена3
В сцене 3 используется диаграмма ISO12233, и в большинстве тестов используется метод извлечения диаграммы для поиска диаграммы в сцене. По этой причине большинство сохраненных изображений не имеют границ, как изображения для сцен 1, 2 или 4, а имеют только диаграмму. Для оптимальной работы искателя карт карта должна быть в правильной ориентации.
test_edge_enhancement
Проверяет правильность применения параметра android.edge.mode
. Захватывает изображения без повторной обработки для каждого режима границ и возвращает резкость выходного изображения и метаданные результата захвата. Обрабатывает запрос захвата с заданным режимом края, чувствительностью, временем экспозиции, расстоянием фокусировки и параметром выходной поверхности.
Пройдено: режим HQ
(2) резче, чем режим OFF
(0). Режим FAST
(1) резче, чем режим OFF
. Режим HQ
более резкий или равен режиму FAST
.
Протестированные API:
Затронутые параметры камеры:
-
EDGE_MODE
test_edge_enhancement_edge=0.jpg
test_edge_enhancement_edge=1.jpg (быстрый режим)
test_edge_enhancement_edge=2.jpg (режим высокого качества)
test_flip_mirror
Проверяет правильность ориентации изображения в соответствии с разделом CDD 7.5.2 «Фронтальная камера» [C-1-5] .
Зеркальные, перевернутые или повернутые изображения можно отличить по ромбу рядом с центром.
Пройдено: изображение не перевернуто, не зеркально отражено и не повернуто.
test_flip_mirror_scene_patch.jpg
test_imu_drift
Проверяет, имеет ли инерциальный измерительный блок (IMU) стабильный выходной сигнал в течение 30 секунд, пока устройство неподвижно и выполняет предварительный просмотр в высоком разрешении.
Протестированные API:
-
android.hardware.Sensor
-
android.hardware.SensorEvent
-
android.hardware.Sensor#TYPE_GYROSCOPE
-
android.hardware.Sensor#TYPE_ROTATION_VECTOR
Проходить:
- Дрейф гироскопа за время испытаний составляет менее 0,01 рад.
- Отклонение показаний гироскопа составляет менее 1E-7 рад 2 /с 2 /Гц за время испытания.
- Дрейф вектора вращения составляет менее 0,01 рад за время испытаний.
- (Пока не обязательно) дрейф гироскопа составляет менее 1 градуса в секунду.
test_imu_drift_gyro_drift.png
test_imu_drift_rotation_vector_drift.png
test_landscape_to_portrait
Проверяет, правильно ли работает переопределение альбомной ориентации на портретную для датчиков, ориентированных на альбомную ориентацию.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#SCALER_AVAILABLE_ROTATE_AND_CROP_MODES
-
android.hardware.camera2.CameraCharacteristics#SENSOR_ORIENTATION
-
android.hardware.camera2.CameraCharacteristics#getCameraCharacteristics
Пройдено: тест позволяет найти диаграмму с ожидаемым поворотом (0 градусов, если переопределение альбомной ориентации отключено, 90 градусов, если включено).
test_landscape_to_portrait.png
test_lens_movement_reporting
Проверяет, правильно ли сообщается о флаге движения объектива. Снимает серию из 24 изображений, причем первые 12 кадров находятся на оптимальном расстоянии фокусировки (согласно 3A), а последние 12 кадров — на минимальном расстоянии фокусировки. В районе 12 кадра объектив движется, из-за чего резкость падает. Резкость со временем стабилизируется по мере перемещения объектива в конечное положение. Флаг перемещения объектива должен быть установлен на всех кадрах, где резкость является промежуточной по отношению к резкости, в первых нескольких кадрах, когда объектив неподвижен на оптимальном фокусном расстоянии, и в последних нескольких кадрах, когда объектив неподвижен на минимальном фокусном расстоянии. Точный кадр, в котором движется объектив, не важен: проверяется, что флаг движения устанавливается при движении объектива.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE
-
android.hardware.camera2.CaptureResult#LENS_STATE
-
android.hardware.camera2.CaptureResult#LENS_FOCUS_DISTANCE
-
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP
-
android.hardware.camera2.CaptureRequest#LENS_FOCUS_DISTANCE
Pass: Флаг перемещения объектива имеет 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:
-
android.hardware.camera2.CaptureRequest#EDGE_MODE
-
android.hardware.camera2.CaptureRequest#REPROCESS_EFFECTIVE_EXPOSURE_FACTOR
Пройдено: резкость для различных режимов края правильная. HQ
(режим 2) резче, чем OFF
(режим 0), и улучшение между различными режимами аналогично.
test_reprocess_edge_enhancement_plot.png
сцена4
Сцена 4 состоит из черного круга на белом фоне внутри квадрата. Тесты в сцене 4 могут быть чувствительны к выравниванию, поэтому, начиная с версии 15, вы можете использовать check_alignment.py
в каталоге инструментов, чтобы включить проверку тестируемого устройства и выравнивания диаграммы.
сцена4
test_30_60fps_preview_fov_match
Тестирует, что видео предварительного просмотра с частотой 30 кадров в секунду и 60 кадров в секунду имеют одинаковое поле зрения. Тест захватывает два видео: одно с частотой 30 кадров в секунду, а другое — с 60 кадрами в секунду. Из каждого видео выбирается репрезентативный кадр и анализируется, чтобы убедиться, что изменения поля зрения в двух видео находятся в пределах спецификаций. Проверяет, что соотношение сторон круга остается постоянным, центр круга остается стабильным, а радиус круга остается постоянным.
Протестированные API:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE
-
android.hardware.camera2.CaptureRequest#SENSOR_FRAME_DURATION
-
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
-
android.hardware.camera2.CaptureResult#LENS_DISTORTION
-
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
-
android.hardware.camera2.CaptureResult#LENS_INTRINSIC_CALIBRATION
Пройдено: изображения не растянуты, центр изображений не отличается более чем на 3%, а максимальное изменение соотношения сторон между видео с частотой 30 и 60 кадров в секунду составляет не более 7,5%.
Механизмы отказа:
- Круг из видео 30 FPS существенно отличается по размеру от видео 60 FPS.
- Круг на захваченном изображении искажается конвейером обработки.
- Круг на захваченном изображении обрезается из-за запроса на захват с экстремальным соотношением сторон, уменьшающего высоту или ширину изображения.
- Круг на захваченном изображении имеет отражение в центре и не кажется полностью заполненным.
test_aspect_ratio_and_crop
Проверяет, не искажаются или неожиданно ли обрезаются изображения в конвейере изображений. Фотографирует круг по всем форматам. Проверяет, что круг не искажен, круг не перемещается из центра изображения и круг не меняет неправильно размер при различных соотношениях сторон или разрешениях.
Протестированные API:
-
android.hardware.camera2.CaptureResult#LENS_DISTORTION
-
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
-
android.hardware.camera2.CaptureResult#LENS_INTRINSIC_CALIBRATION
Пройдено: изображения не растягиваются, центры изображений не отличаются более чем на 3%, максимально возможное поле зрения (поле зрения) сохраняется.
Механизмы отказа:
- Камера не совмещена с кругом, отображаемым на планшете в центре захваченной сцены.
- Круг на захваченном изображении искажается конвейером обработки.
- Изображение с более низким разрешением дважды обрезается в конвейере изображений, создавая разное поле зрения между изображениями с высоким и низким разрешением.
- Круг на захваченном изображении обрезается из-за запроса на захват с экстремальным соотношением сторон, уменьшающего высоту или ширину изображения.
- Круг на захваченном изображении имеет отражение в центре и не кажется полностью заполненным.
test_multi_camera_alignment
Тестирует параметры калибровки камеры, связанные с позиционированием камеры в многокамерных системах. Используя физические дополнительные камеры с несколькими камерами, можно сделать снимок с помощью одной из физических камер. Находит центр круга. Проецирует центр окружности на мировые координаты для каждой камеры. Сравнивает разницу между центрами окружностей камер в мировых координатах. Перепроецирует мировую координату обратно в пиксельные координаты и сравнивает ее с оригиналами для проверки достоверности. Сравнивает размеры кругов, проверяя, различаются ли фокусные расстояния камер.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#getPhysicalCameraIds()
-
android.hardware.camera2.CameraCharacteristics#LENS_DISTORTION
-
android.hardware.camera2.CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
-
android.hardware.camera2.CameraCharacteristics#LENS_INTRINSIC_CALIBRATION
-
android.hardware.camera2.CameraCharacteristics#LENS_POSE_ROTATION
-
android.hardware.camera2.CameraCharacteristics#LENS_POSE_TRANSLATION
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
-
android.hardware.camera2.CaptureRequest#SCALER_CROP_REGION
-
android.hardware.camera2.CaptureRequest#DISTORTION_CORRECTION_MODE
Пройдено: центры и размеры кругов соответствуют ожидаемым на проецируемых изображениях по сравнению с изображениями, снятыми с использованием данных калибровки камеры и фокусных расстояний.
Механизмы отказа:
-
LENS_INTRINSIC_CALIBRATION
,LENS_POSE_TRANSLATION
илиLENS_POSE_ROTATION
— это расчетные значения, а не фактические данные калибровки. - Система камер не подходит для тестовой установки. Например, тестирование системы широкоугольных и сверхширокоугольных камер с помощью испытательного стенда RFoV. Дополнительную информацию см. в разделе Часто задаваемые вопросы о камере ITS-in-a-box1 .
test_preview_aspect_ratio_and_crop
Подобно тесту test_aspect_ratio_and_crop для снимков, этот тест проверяет поддерживаемые форматы предварительного просмотра, чтобы убедиться, что кадры предварительного просмотра не растянуты или не обрезаны ненадлежащим образом. Проверяет, что соотношение сторон круга не меняется, обрезанные изображения сохраняют круг в центре кадра, а размер круга не меняется для постоянного формата или с разными разрешениями (проверка поля зрения).
Протестированные API:
-
android.hardware.camera2.CaptureResult#LENS_DISTORTION
-
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
-
android.hardware.camera2.CaptureResult#LENS_INTRINSIC_CALIBRATION
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.media.MediaRecorder
-
android.media.CamcorderProfile
Пройдено: изображения не растягиваются, центры изображений не отличаются более чем на 3%, максимально возможное поле зрения (поле зрения) сохраняется.
test_preview_stabilization_fov
Проверяет поддерживаемые размеры предварительного просмотра, чтобы убедиться, что поле зрения обрезано правильно. Тест захватывает два видео: одно с ON
стабилизацией предварительного просмотра, а другое с OFF
стабилизацией предварительного просмотра. Из каждого видео выбирается репрезентативный кадр и анализируется, чтобы убедиться, что изменения поля зрения в двух видео находятся в пределах спецификации.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.media.MediaRecorder
-
android.media.CamcorderProfile
Пройдено: соотношение сторон круга остается примерно постоянным, расположение центра круга остается стабильным, а размер круга изменяется не более чем на 20%.
test_video_aspect_ratio_and_crop
Снимает видео круга внутри квадрата во всех видеоформатах. Извлекает ключевые кадры и проверяет, что соотношение сторон круга не меняется, обрезанные изображения сохраняют круг в центре, а размер круга не меняется для постоянного формата или с другим разрешением (проверка поля зрения).
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.hardware.camera2.CaptureResult#LENS_DISTORTION
-
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
-
android.hardware.camera2.CaptureResult#LENS_INTRINSIC_CALIBRATION
-
android.media.MediaRecorder
-
android.media.CamcorderProfile
Пройдено: Кадры видео не растянуты, центры кадров не отличаются более чем на 3%, максимально возможное FoV (поле зрения) сохраняется.
сцена5
Для сцены 5 требуется равномерно освещенная серая сцена. Это достигается за счет рассеивателя, расположенного над объективом камеры. Мы рекомендуем следующий рассеиватель: www.edmundoptics.com/optics/window-diffusers/optical-diffusers/opal-diffusing-glass/46168
.
Чтобы подготовить сцену, прикрепите рассеиватель перед камерой и направьте камеру на источник освещения мощностью около 2000 люкс. Изображения, снятые для сцены5, требуют рассеянного освещения без видимых особенностей. Ниже приведен пример изображения:
захват сцены5
test_lens_shading_and_color_uniformity
Проверяет, что коррекция затенения объектива применяется правильно и цвет монохромной однородной сцены распределяется равномерно. Выполняет этот тест на кадре YUV с автоматическим 3A. Затенение линзы оценивается на основе канала y. Измеряет среднее значение y для каждого указанного блока выборки и определяет годность или неудачу путем сравнения с центральным значением y. Тест на однородность цвета оценивается в пространстве r/g и b/g.
Протестированные API:
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
Пройдено: для прохождения теста при указанном радиусе изображения отклонение значений r/g и b/g должно быть менее 20 %.
сцена6
Scene6 представляет собой сетку из маленьких кругов с квадратом в одном углу, обозначающим ориентацию. Маленькие кружки необходимы для проверки функции масштабирования в большом диапазоне. Тесты в сцене 6 могут быть чувствительны к выравниванию, поэтому, начиная с версии 15, вы можете использовать check_alignment.py
в каталоге инструментов, чтобы включить проверку DUT и выравнивания диаграммы.
сцена6
test_in_sensor_zoom
Тестирует работу встроенной в матрицу камеры функции масштабирования, которая позволяет создавать обрезанные изображения в формате RAW.
Если для варианта использования потока установлено значение CROPPED_RAW
, тест выполняет два захвата в диапазоне масштабирования: изображение RAW с полным полем зрения (FoV) и обрезанное изображение RAW. Тест преобразует изображения в массивы RGB, уменьшает масштаб полноразмерного обрезанного изображения RAW до размера, сообщаемого SCALER_RAW_CROP_REGION
, и вычисляет среднеквадратическую 3D-разность (RMS) между двумя изображениями.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.hardware.camera2.CameraMetadata#SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW
-
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
-
android.hardware.camera2.CaptureResult#SCALER_RAW_CROP_REGION
Пройдено: среднеквадратическая 3D-разность (RMS) между уменьшенным кадрированным изображением RAW и изображением RAW с полным полем зрения меньше порогового значения, установленного в тесте.
test_zoom
Тестирует поведение масштабирования камеры. Делает снимки во всем диапазоне масштабирования и проверяет, увеличиваются ли круги по мере увеличения камеры. Для каждого формата (YUV, JPEG) один и тот же сеанс захвата камеры используется для сближения 3A и съемки.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
-
android.hardware.camera2.CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
-
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
-
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
Пройдено: относительный размер захваченного круга точно соответствует требуемому коэффициенту масштабирования, чтобы обеспечить правильное масштабирование камеры.
test_zoom, чтобы найти контур круга, ближайший к центру.
test_low_latency_zoom
Тестирует поведение масштабирования камеры с малой задержкой. Делает захваты в диапазоне масштабирования с помощью android.control.settingsOverride = 1 (SETTINGS_OVERRIDE_ZOOM)
и проверяет, соответствуют ли круги на выходных изображениях коэффициентам масштабирования в метаданных захвата. Один и тот же сеанс захвата камеры используется для объединения 3A и съемки.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_AVAILABLE_SETTINGS_OVERRIDES
-
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
-
android.hardware.camera2.CaptureRequest#CONTROL_SETTINGS_OVERRIDE
-
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
-
android.hardware.camera2.CaptureResult#CONTROL_SETTINGS_OVERRIDE
Пройдено: относительный размер захваченного круга точно соответствует метаданным результата коэффициента масштабирования.
test_preview_video_zoom_match
Проверяет, что во время записи и масштабирования предварительный просмотр видео и вывод видео отображаются и записывают один и тот же результат. Вычисляет размер круга, ближайшего к центру, при различных коэффициентах масштабирования и проверяет, увеличивается ли размер круга при увеличении коэффициента масштабирования.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
-
android.hardware.camera2.CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
-
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
-
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
Пройдено: относительный размер захваченного круга соответствует требуемому коэффициенту масштабирования в видео и предварительном просмотре.
VGA_640x480_key_frame.png (до масштабирования)
Preview_640x480_key_frame.png (до масштабирования)
VGA_640x480_key_frame.png (после масштабирования)
Preview_640x480_key_frame.png (после масштабирования)
test_preview_zoom
Проверяет, соответствует ли коэффициент масштабирования каждого кадра предварительного просмотра соответствующим метаданным захвата. Тест берет кадры предварительного просмотра в диапазоне масштабирования и находит контур круга, ближайший к центру. Затем тест проверяет, увеличивается ли выбранный круг и перемещается ли центр круга от центра изображения по мере увеличения камеры.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
-
android.hardware.camera2.CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
-
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
-
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
Пройдено: относительный размер выбранного круга соответствует заявленному коэффициенту масштабирования соответствующего результата захвата для всех кадров предварительного просмотра. Относительное расстояние выбранного круга от центра изображения соответствует указанному коэффициенту масштабирования соответствующего результата захвата всех кадров предварительного просмотра.
test_preview_zoom изображения, показывающие выбранный круг, ближайший к центру
test_session_characteristics_zoom
Проверяет диапазон коэффициента масштабирования для всех поддерживаемых конфигураций сеанса, перечисленных в CameraCharacteristics#INFO_SESSION_CONFIGURATION_QUERY_VERSION
. Если для каждой из этих конфигураций CameraDeviceSetup#isSessionConfigurationSupported
возвращает true, тест проверяет, может ли быть достигнут диапазон коэффициента масштабирования, возвращенный в CameraDeviceSetup#getSessionCharacteristics
.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#INFO_SESSION_CONFIGURATION_QUERY_VERSION
-
android.hardware.camera2.CameraDevice.CameraDeviceSetup#isSessionConfigurationSupported
-
android.hardware.camera2.CameraDevice.CameraDeviceSetup#getSessionCharacteristics
Пройдено: как минимальный, так и максимальный коэффициент масштабирования могут быть достигнуты для каждой поддерживаемой SessionConfiguration
указанной в CameraCharacteristics#INFO_SESSION_CONFIGURATION_QUERY_VERSION
.
сцена7
Сцена7 представляет собой прямоугольный кадр, разделенный на четыре равных квадранта, каждый из которых заполнен разным цветом. В центре прямоугольника находится таблица со скошенными краями для проверки резкости. Четыре маркера ArUco выровнены по четырем внешним углам прямоугольника, что помогает получить точные координаты основного кадра прямоугольника при различных коэффициентах масштабирования.
сцена7
test_multi_camera_switch
Этот тест подтверждает, что во время записи предварительного просмотра с различными коэффициентами масштабирования переключение между сверхшироким (UW) и широким (W) объективами приводит к одинаковым значениям RGB.
В тесте используются различные коэффициенты масштабирования в заранее заданном диапазоне для выполнения записи динамического предварительного просмотра и определения точки, в которой меняется физическая камера. Эта точка отмечает переход от линзы UW к линзе W.
Кадры, снятые в точке пересечения и до нее, анализируются на предмет автоматической экспозиции (AE), автоматического баланса белого (AWB) и автофокусировки (AF).
Проверка автоэкспозиции гарантирует, что изменение яркости находится в пределах ожидаемого диапазона для изображений объективов UW и W. Проверка AWB проверяет, что соотношения R/G и B/G находятся в пределах пороговых значений для изображений объективов UW и W. Проверка автофокусировки оценивает значение оценки резкости на основе средней величины градиента между изображениями объективов UW и W.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
-
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
-
android.media.CamcorderProfile
-
android.media.MediaRecorder
Пройдено: чтобы тест был пройден, все проверки AE, AWB и AF должны быть пройдены. Ниже приведены критерии для каждой проверки:
- Проверка автоэкспозиции: изменение яркости между изображениями объективов UW и W должно составлять менее 0,5%.
- Проверка AWB: разница между значениями R/G и B/G для изображений объективов UW и W должна быть менее 0,5%.
- Проверка автофокусировки: разница в резкости между изображениями объективов UW и W должна составлять менее 2%.
сцена8
Сцена8 представляет собой прямоугольный кадр, разделенный на четыре равные области, каждая из которых содержит портрет, снятый с разной экспозицией или наложенный разным цветовым оттенком (синий оттенок, увеличенная экспозиция, уменьшенная экспозиция, желтый оттенок). Четыре маркера ArUco выравниваются по четырем внешним углам прямоугольника для получения точных координат основного кадра прямоугольника.
сцена8
test_ae_awb_regions
Проверяет, что значения RGB и яркости различаются при предварительной записи в разных регионах автоматической экспозиции (AE) и автоматического баланса белого (AWB).
Тест записывает восьмисекундную запись предварительного просмотра, выполняя измерения AE и AWB в каждом квадранте в течение двух секунд каждый. Затем тест извлекает кадр из записи предварительного просмотра каждого региона и использует извлеченные кадры для выполнения следующих проверок AE и AWB:
- Проверка автоэкспозиции: проверяет, что кадр, замеряющий область с уменьшенной экспозицией, имеет увеличенное значение яркости более чем на 1 %, чем кадр, замеряющий область с увеличенной экспозицией. Это подтверждает, что изображения становятся ярче при замере темной области.
- Проверка AWB: проверяет, что соотношение красного и синего (средних значений RGB изображения) в кадре с синей областью замера более чем на 2 % выше, чем в кадре с желтой областью замера. Это подтверждает, что изображения имеют сбалансированное значение RGB при измерении желтой (теплой) или синей (холодной) области.
Протестированные API:
-
android.hardware.camera2.CaptureRequest#CONTROL_AWB_REGIONS
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_REGIONS
-
android.hardware.camera2.CameraCharacteristics#CONTROL_MAX_REGIONS_AE
-
android.hardware.camera2.CameraCharacteristics#CONTROL_MAX_REGIONS_AWB
Пройдено: обе проверки AE и AWB проходят успешно.
сцена9
Scene9 состоит из тысяч кругов произвольного размера и цвета, что позволяет создать сцену с очень низкой повторяемостью, что затрудняет работу алгоритмов сжатия JPEG.
сцена9
test_jpeg_high_entropy
Проверяет, что сжатие JPEG камеры работает на сцене 9 с высокой энтропией и коэффициентом качества JPEG, установленным на 100%. Коэффициент масштабирования увеличивается, чтобы сцена, отображаемая на планшете, заполнила поле зрения камеры.
Протестированные API:
Пройдено: файл JPEG правильно сжимается, записывается и считывается с диска.
test_jpeg_quality
Проверяет качество сжатия JPEG камеры. Шаг качества JPEG через android.jpeg.quality
и обеспечение правильного изменения таблиц квантования.
Протестированные API:
Пройдено: матрица квантования уменьшается с увеличением качества. (Матрица представляет коэффициент деления.)
Средние значения яркости/цветности матрицы DQT задней камеры Pixel 4 в сравнении с качеством JPEG
Пример неудачного теста
Обратите внимание, что для изображений очень низкого качества (jpeg.quality < 50) сжатие в матрице квантования не увеличивается.
сцена_видео
Сцена scene_video
— это видеосцена. Он состоит из четырех кругов разного цвета, движущихся вперед и назад с разной частотой кадров на белом фоне.
сцена_видео
test_preview_frame_drop
Проверяет, что запрошенная частота кадров предварительного просмотра поддерживается в динамической сцене. Этот тест выполняется на всех камерах, на которых установлены сторонние приложения.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.hardware.camera2.CaptureResult#CONTROL_AE_TARGET_FPS_RANGE
-
android.media.CamcorderProfile
-
android.media.MediaRecorder
Пройдено: частота кадров предварительного просмотра находится на максимальном уровне запрошенного диапазона частоты кадров, а среднее отклонение между последовательными кадрами меньше относительного допуска, установленного в тесте.
Scene_extensions
Тесты scene_extensions
предназначены для расширений камеры и должны использовать Camera ITS-in-a-Box , поскольку они требуют точного контроля над средой тестирования. Кроме того, необходимо контролировать все утечки света. Для этого может потребоваться накрыть испытательный стенд, тестируемое устройство и планшет тканью, а также устранить утечку света через передний экран тестируемого устройства.
сцена_hdr
Сцена scene_hdr
состоит из портрета слева и низкоконтрастного QR-кода справа.
сцена_hdr
test_hdr_extension
Тестирует расширение HDR . Делает снимки с включенным расширением и без него и проверяет, делает ли расширение более заметным QR-код.
Протестированные API:
-
android.hardware.camera2.CameraExtensionCharacteristics#getSupportedExtensions
-
android.hardware.camera2.CameraExtensionSession#capture
Пройдено: расширение HDR уменьшает количество изменений контрастности, необходимых для обнаружения QR-кода, или уменьшает градиент QR-кода.
Scene_low_light
Сцена scene_low_light
состоит из сетки квадратов различных оттенков серого на черном фоне, причем сетка квадратов ограничена красным контуром. Квадраты расположены в соответствии с ориентацией кривой Гильберта.
Scene_low_light
test_night_extension
Тестирует расширение Night . Делает снимки с включенным расширением и выполняет следующее:
- Обнаруживает наличие 20 квадратов
- Вычисляет яркость, ограниченную каждым квадратом
- Вычисляет среднее значение яркости первых 6 квадратов в соответствии с ориентацией сетки кривой Гильберта.
- Вычисляет разницу в значении яркости последовательных квадратов (например,квадрат2–квадрат1) до квадратов 5 и 6 (квадрат6–квадрат5) и находит среднее из пяти вычисленных разностей.
Протестированные API:
-
android.hardware.camera2.CameraExtensionCharacteristics#getSupportedExtensions
-
android.hardware.camera2.CameraExtensionSession#capture
Пройдено: среднее значение яркости первых 6 квадратов должно быть не менее 85, а средняя разница в значении яркости последовательных квадратов до квадратов 5 и 6 должна быть не менее 17.
Следующий график яркости показывает, как выглядит пройденный результат теста.
test_low_light_boost_extension
Тестирует режим AE Low Light Boost . Если Камера2 поддерживает режим усиления автоэкспозиции при слабом освещении, этот тест выполняется для Камеры2. Если расширение камеры ночного режима поддерживается и расширение поддерживает режим усиления AE при слабом освещении, то этот тест также выполняется для расширения камеры ночного режима. Этот тест устанавливает режим автоэкспозиции на усиление при слабом освещении, берет кадр из предварительного просмотра и выполняет следующее:
- Обнаруживает наличие 20 ящиков
- Вычисляет яркость, ограниченную каждым блоком
- Вычисляет среднее значение яркости первых 6 квадратов в соответствии с ориентацией сетки кривой Гильберта.
- Вычисляет разницу в значении яркости последовательных квадратов (например,квадрат2–квадрат1) до квадратов 5 и 6 (квадрат6–квадрат5) и находит среднее из пяти вычисленных разностей.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES
-
android.hardware.camera2.CameraMetadata#CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY
-
android.hardware.camera2.CameraExtensionCharacteristics#getSupportedExtensions
Пройдено: среднее значение яркости первых 6 квадратов должно быть не менее 70, а средняя разница в значении яркости последовательных квадратов до квадратов 5 и 6 должна быть не менее 17.
Scene_flash
Тесты scene_flash
требуют наличия темной сцены в блоке слияния датчиков.
test_auto_flash
Проверяет, что автоматическая вспышка срабатывает в темной сцене для фронтальных и задних камер. Для фронтальных камер автоматическая вспышка использует экран для освещения сцены, а не физическую вспышку. Тест проверяет срабатывание автоматической вспышки, проверяя, что центр мозаичного изображения становится ярче при включенной автоматической вспышке. Чтобы активировать автоматическую вспышку, освещение на испытательном стенде должно быть выключено. Свет можно выключить автоматически с помощью контроллера Arduino. Для корректной работы теста сцена должна быть полностью темной. Перед тестированием на устройстве необходимо установить приложение Jetpack Camera ( JCA ). Автоматическая вспышка для камер на задней панели зависит от состояния автоэкспозиции, но автоматическая вспышка для фронтальных камер не зависит от автоэкспозиции и срабатывает всегда.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_AVAILABLE
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER
-
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
-
android.hardware.camera2.CaptureRequest#FLASH_MODE
Пройдено: центр мозаичного изображения с включенной автоматической вспышкой ярче исходного изображения сцены для всех камер.
test_flash_strength
Тестирует, что контроль силы вспышки в режиме SINGLE
реализован корректно.
Проверяет, что если устройство поддерживает управление мощностью вспышки во время использования камеры в режиме SINGLE
, мощность вспышки изменяется в зависимости от запрошенных уровней мощности. Проверяет, что управление силой вспышки работает с разными AE_MODES
. Например, если режим автоматической экспозиции ON
или OFF
, уровень мощности вспышки влияет на яркость, а если режим ON_AUTO_FLASH
, уровень мощности вспышки не влияет на яркость. Для проведения испытания освещение на испытательном стенде должно быть выключено. Свет можно выключить автоматически с помощью контроллера Arduino. Для корректной работы теста сцена должна быть полностью темной.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_STRENGTH_DEFAULT_LEVEL
-
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_STRENGTH_MAXIMUM_LEVEL
-
android.hardware.camera2.CameraCharacteristics#FLASH_SINGLE_STRENGTH_DEFAULT_LEVEL
-
android.hardware.camera2.CameraCharacteristics#FLASH_SINGLE_STRENGTH_MAX_LEVEL
Проходить:
Когда режим автоматической экспозиции ON
или OFF
, яркость участков изображения увеличивается по мере увеличения уровня мощности вспышки от отсутствия вспышки до FLASH_SINGLE_STRENGTH_MAX_LEVEL
. Когда режим автоматической экспозиции установлен на ON_AUTO_FLASH
, разница в яркости участков изображения находится в пределах допуска, поскольку уровень мощности вспышки увеличивается от отсутствия вспышки до FLASH_SINGLE_STRENGTH_MAX_LEVEL
.
test_led_snapshot
Проверяет, что снимки светодиодов не насыщают и не окрашивают изображение.
В этом тесте к блоку датчиков добавляется контроллер освещения для управления освещением. Когда индикаторы OFF
, тест выполняет съемку с режимом AUTO_FLASH
установленным на ON
. Во время этого захвата тест запускает последовательность предварительного захвата с триггером aePrecapture
, установленным на START
, и устанавливает намерение захвата на Preview
чтобы выполнить захват со вспышкой.
Поскольку на снимке имеется характерная горячая точка из-за вспышки, тест вычисляет среднее значение изображения со вспышкой для всего снимка и проверяет, находится ли это значение в диапазоне (68, 102). Чтобы проверить, достаточно ли сбалансировано белое изображение, тест вычисляет соотношения красного/зеленого и синего/зеленого и проверяет, находятся ли эти соотношения в пределах 0,95 и 1,05.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_AVAILABLE
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
-
android.hardware.camera2.CaptureRequest#FLASH_MODE
Пройдено: Соотношения R/G и B/G находятся в пределах 0,95 и 1,05. Среднее значение флэш-изображения находится в диапазоне (68, 102).
test_preview_min_frame_rate
Проверяет правильность снижения частоты кадров предварительного просмотра в темной сцене. Чтобы этот тест работал правильно, освещение на испытательном стенде должно быть выключено контроллером или вручную оператором-испытателем.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.hardware.camera2.CaptureResult#CONTROL_AE_TARGET_FPS_RANGE
-
android.media.CamcorderProfile
-
android.media.MediaRecorder
Пройдено: частота кадров предварительного просмотра находится на минимальном уровне запрошенного диапазона частоты кадров, а разница между кадрами меньше абсолютного допуска, установленного в тесте.
test_torch_strength
Тестирует, что контроль мощности вспышки в режиме TORCH
реализован корректно.
Проверяет, что если устройство поддерживает управление мощностью вспышки во время использования камеры в режиме TORCH
, мощность фонаря изменяется в зависимости от запрошенных уровней мощности. Проверяет, что управление силой вспышки работает с разными AE_MODES
. Например, если режим автоматической экспозиции ON
или OFF
, уровень мощности вспышки влияет на яркость, а если режим ON_AUTO_FLASH
, уровень мощности вспышки не влияет на яркость. Проверяет, что мощность факела остается неизменной на протяжении всей серии, имитируя сеанс видеозахвата. Для проведения испытания освещение на испытательном стенде должно быть выключено. Свет можно выключить автоматически с помощью контроллера Arduino. Для корректной работы теста сцена должна быть полностью темной.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_STRENGTH_DEFAULT_LEVEL
-
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_STRENGTH_MAXIMUM_LEVEL
-
android.hardware.camera2.CameraCharacteristics#FLASH_TORCH_STRENGTH_DEFAULT_LEVEL
-
android.hardware.camera2.CameraCharacteristics#FLASH_TORCH_STRENGTH_MAX_LEVEL
Проходить:
Когда режим автоматической экспозиции ON
или OFF
, яркость фрагментов серийной съемки увеличивается по мере увеличения уровня мощности вспышки от отсутствия вспышки до FLASH_TORCH_STRENGTH_MAX_LEVEL
. Когда режим автоматической экспозиции установлен на ON_AUTO_FLASH
, разница в яркости участков серийной съемки находится в пределах допуска, поскольку уровень мощности вспышки увеличивается от отсутствия вспышки до FLASH_TORCH_STRENGTH_MAX_LEVEL
.
датчик_fusion
Тесты слияния датчиков требуют определенного движения телефона перед шахматной доской и маркерами ArUco. Для получения оптимальных результатов убедитесь, что испытательная таблица установлена ровно. Неплоские диаграммы влияют на расчеты вращения во многих тестах. Таблица должна заполнить заднюю часть коробки для слияния датчиков и распечатать ее размером 17 x 17 дюймов (43 x 43 см). Тесты sensor_fusion
можно автоматизировать с помощью Sensor Fusion Box .
Схема объединения датчиков
Таблица слияния датчиков, которая находится на задней стороне блока слияния датчиков.
test_lens_intrinsic_калибровка
Проверяет, что оптический центр объектива изменяется при его перемещении из-за оптической стабилизации изображения (OIS). Если поддерживаются собственные образцы объектива, проверяется изменение оптического центра собственных образцов объектива при движении объектива из-за оптической стабилизации изображения (OIS).
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#LENS_INTRINSIC_CALIBRATION
-
android.media.MediaRecorder
-
android.media.CamcorderProfile
Пройдено: оптический центр линзы изменяется на один пиксель или более. Если поддерживаются собственные образцы линзы, оптические центры собственных образцов линзы изменяются на один пиксель или более.
Пример графика test_lens_intrinsic_calibration
, показывающего изменения главных точек в пикселях для каждого кадра
test_multi_camera_frame_sync
Тесты показывают, что временные метки кадров, снятых логической камерой, находятся в пределах 10 мс путем вычисления углов квадратов на шахматной доске для определения временной метки.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
-
android.hardware.camera2.CameraCharacteristics#getPhysicalCameraIds()
-
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
-
android.hardware.camera2.params.OutputConfiguration#setPhysicalCameraId()
Успешно: Угол между изображениями с каждой камеры существенно не меняется при повороте телефона.
test_preview_distortion
Проверяет корректировку искажений в каждом кадре предварительного просмотра, снятом при различных уровнях масштабирования. Для каждого кадра предварительного просмотра тест вычисляет идеальные точки на основе внутренних и внешних характеристик камеры. На изображении в качестве примера идеальные точки показаны зеленым цветом; фактические точки показаны красным. Ошибка искажения рассчитывается на основе среднеквадратичного (RMS) расстояния в пикселях между фактическими и идеальными точками. Зеленые и красные блики на изображении используются для визуального обнаружения области ошибки искажения.
Изображение шахматной доски с идеальными точками зеленого цвета и фактическими точками красными.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
-
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
-
android.hardware.camera2.CameraCharacteristics#getPhysicalCameraIds()
-
android.media.CamcorderProfile
-
android.media.MediaRecorder
Пройдено: нормализованная ошибка искажения каждого кадра предварительного просмотра меньше порогового значения, установленного в тесте.
test_preview_stabilization
Тесты показали, что стабилизированное предварительное видео вращается меньше, чем гироскоп.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.media.MediaRecorder
-
android.media.CamcorderProfile
Пройдено: максимальный угол поворота кадров составляет менее 70 % от угла поворота гироскопа.
Ниже приведены примеры видео со стабилизацией и без нее.
Пример видео со стабилизацией
Пример видео без стабилизации
test_sensor_fusion
Проверяет разницу временных меток между камерой и гироскопом для приложений AR и VR. Телефон поворачивается на 90 градусов 10 раз в шахматном порядке. Движение составляет около 2 с туда и обратно. Этот тест пропускается, если гироскоп не включен или если параметр REALTIME
источника меток времени не включен.
Тест test_sensor_fusion
генерирует несколько графиков. Два наиболее важных графика для отладки:
test_sensor_fusion_gyro_events
: показывает события гироскопа телефона во время теста. Движение в направлениях x и y означает, что телефон ненадежно закреплен на монтажной пластине, что снижает вероятность прохождения теста. Количество тактов в графике зависит от скорости записи для сохранения кадров.test_sensor_fusion_gyro_events
test_sensor_fusion_plot_rotations
: показывает выравнивание событий гироскопа и камеры. Этот график должен отображать совпадающее движение камеры и гироскопа с точностью +/- 1 мс.test_sensor_fusion_plot_rotations
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#LENS_FACING
-
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_TIMESTAMP_SOURCE
-
android.hardware.camera2.CameraMetadata#SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME
-
android.hardware.camera2.CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE
-
android.hardware.camera2.CaptureRequest#SENSOR_FRAME_DURATION
-
android.hardware.camera2.CaptureRequest#SENSOR_TIMESTAMP
-
android.hardware.camera2.CaptureResult#SENSOR_ROLLING_SHUTTER_SKEW
Пройдено: смещение временных меток камеры и гироскопа составляет менее 1 мс согласно разделу CDD 7.3.9 «Высокоточные датчики» [C-2-14] .
Механизмы отказа:
- Ошибка смещения: смещение камеры-гироскопа откалибровано неправильно с точностью до +/- 1 мс.
- Пропадание кадров: конвейер недостаточно быстр, чтобы последовательно захватывать 200 кадров.
- Ошибки сокета:
adb
не может надежно подключиться к тестируемому устройству достаточно долго для выполнения теста. - Диаграмма установлена не ровно. График
test_sensor_fusion_plot_rotations
содержит кадры, в которых вращение гироскопа и камеры значительно различается по мере того, как камера вращается в неплоских частях диаграммы. - Камера установлена не ровно. График
test_sensor_fusion_gyro_events
показывает движение в плоскостях X и Y. Эта неисправность чаще встречается у фронтальных камер, поскольку задняя камера часто имеет выступ на остальной части корпуса телефона, что создает наклон при установке задней части телефона на монтажную пластину.
test_video_stabilization
Тесты показали, что стабилизированное видео вращается меньше, чем гироскоп.
Протестированные API:
-
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
-
android.media.MediaRecorder
-
android.media.CamcorderProfile
Пройдено: максимальный угол поворота кадров составляет менее 60 % от угла поворота гироскопа.
Ниже приведены примеры видео со стабилизацией и без нее.
Пример видео со стабилизацией
Пример видео без стабилизации
Feature_combination
Тесты feature_combination
проверяют правильность работы функций при одновременном включении нескольких функций камеры. В этих тестах используется то же изображение шахматной доски, что и в сцене слияния датчиков .
test_feature_combination
Тестируется все комбинации различных комбинаций потоков, стабилизация предварительного просмотра, целевой диапазон FPS, 10-битное HDR-видео и Ultra HDR, которые поддерживаются устройством камеры. Этот тест требует очень много памяти, поэтому мы рекомендуем использовать хост с объемом оперативной памяти не менее 128 ГБ.
Для Android 15 и более поздних версий файл конфигурации включает поле log_feature_combo_support
, для которого по умолчанию установлено значение False
. Если для поля log_feature_combo_support
установлено значение True
, тест запускает все комбинации поддерживаемых функций и записывает результаты в файл прототипа, не проваливая тест. Для тестирования на соответствие поле log_feature_combo_support
должно быть установлено в False
.
Протестированные API:
-
android.hardware.camera2.CameraDevice.CameraDeviceSetup#isSessionConfigurationSupported
-
android.hardware.camera2.CameraDevice.CameraDeviceSetup#createCaptureRequest
Пройдено: для каждой поддерживаемой комбинации функций:
- Поток предварительного просмотра стабилизируется, если стабилизация предварительного просмотра включена.
- Частота кадров предварительного просмотра находится в пределах настроенного
AE_TARGET_FPS_RANGE
. - Цветовое пространство записанного потока предварительного просмотра соответствует установленному.
- Захват Ultra HDR имеет действительную карту усиления.