Примечания к выпуску набора тестов изображений камеры Android 12

Ряд изменений Camera ITS включен в выпуск Android 12. На этой странице представлены изменения, которые можно разделить на четыре основные категории:

Рефакторинг на Python 3

Из-за устаревания Python 2.7 в январе 2020 года вся кодовая база Camera ITS была преобразована в Python 3. В Android 12 требуются следующие версии и библиотеки Python:

Основная программа запуска тестов, tools/run_all_tests.py , остается такой же, как и в версиях Android 11 или ниже, и переработана для Python 3.

Все отдельные тесты подвергаются рефакторингу и используют новый класс настройки тестов, определенный в tests/its_base_test.py . Большинство названий и функций тестов остаются прежними. В Android 12 все отдельные тесты теперь загружают свои сцены. Хотя загрузка сцены для каждого теста увеличивает общее время тестирования, она позволяет отлаживать отдельные тесты.

Дополнительные сведения об отдельных изменениях тестов см. в разделе Изменения тестов .

Следующие модули Python подверглись рефакторингу с изменением имени:

  • pymodules/its/caps.pyutils/camera_properties_utils.py
  • pymodules/its/cv2image.pyutils/opencv_processing_utils.py
  • pymodules/its/device.pyutils/its_session_utils.py
  • pymodules/its/error.pyutils/error_util.py
  • pymodules/its/image.pyutils/image_processing_utils.py
  • pymodules/its/objects.pyutils/capture_request_utils.py
  • pymodules/its/target.pyutils/target_exposure_utils.py
  • tools/hw.pyutils/sensor_fusion_utils.py

Внедрение тестовой среды Mobly

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

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

файлы config.yml

С помощью платформы Mobly вы можете настроить тестируемое устройство (DUT) и планшет с диаграммой в классе its_base_test . config.yml (YAML) используется для создания испытательного стенда Mobly. В этом файле конфигурации можно настроить несколько испытательных стендов, например, планшет и испытательный стенд для слияния датчиков. В разделе контроллера каждого тестового стенда вы можете указать device_ids , чтобы идентифицировать соответствующие устройства Android для средства выполнения тестов. В дополнение к идентификаторам устройств в тестовом классе передаются другие параметры, такие как brightness планшета, chart_distance , debug_mode , camera_id и scene_id . Общие значения тестовых параметров:

brightness: 192  (all tablets except Pixel C)
chart_distance: 31.0  (rev1/rev1a box for FoV < 90° cameras)
chart_distance: 22.0 (rev2 test rig for FoV > 90° cameras)

Тестирование на планшете

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

Ниже приведен пример файла config.yml для запуска на планшете.

TestBeds:
  - Name: TEST_BED_TABLET_SCENES
    # Test configuration for scenes[0:4, 6, _change]
    Controllers:
        AndroidDevice:
          - serial: 8A9X0NS5Z
            label: dut
          - serial: 5B16001229
            label: tablet

    TestParams:
      brightness: 192
      chart_distance: 22.0
      debug_mode: "False"
      chart_loc_arg: ""
      camera: 0
      scene: <scene-name>  # if <scene-name> runs all scenes

Тестовый стенд можно вызвать с помощью tools/run_all_tests.py . Если значения командной строки отсутствуют, тесты выполняются со значениями файла config.yml . Кроме того, вы можете переопределить значения файла конфигурации camera и scene в командной строке, используя команды, аналогичные Android 11 или более ранней версии.

Например:

python tools/run_all_tests.py
python tools/run_all_tests.py camera=1
python tools/run_all_tests.py scenes=2,1,0
python tools/run_all_tests.py camera=1 scenes=2,1,0

Тестирование слияния датчиков

Для тестирования слияния датчиков имя испытательного стенда должно включать ключевое слово SENSOR_FUSION . Правильный тестовый стенд определяется протестированными сценами. Android 12 поддерживает контроллеры Arduino и Canakit для объединения датчиков .

Ниже приведен пример файла config.yml для запуска слияния датчиков.

Testbeds
  - Name: TEST_BED_SENSOR_FUSION
    # Test configuration for sensor_fusion/test_sensor_fusion.py
    Controllers:
        AndroidDevice:
          - serial: 8A9X0NS5Z
            label: dut

    TestParams:
      fps: 30
      img_size: 640,480
      test_length: 7
      debug_mode: "False"
      chart_distance: 25
      rotator_cntl: arduino         # cntl can be arduino or canakit
      rotator_ch: 1
      camera: 0

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

python tools/run_all_tests.py scenes=sensor_fusion
python tools/run_all_tests.py scenes=sensor_fusion camera=0

Несколько испытательных стендов

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

Ниже приведен пример файла config.yml с тестовыми стендами для планшетов и датчиков.

Testbeds
  - Name: TEST_BED_TABLET_SCENES
    # Test configuration for scenes[0:4, 6, _change]
    Controllers:
        AndroidDevice:
          - serial: 8A9X0NS5Z
            label: dut
          - serial: 5B16001229
            label: tablet

    TestParams:
      brightness: 192
      chart_distance: 22.0
      debug_mode: "False"
      chart_loc_arg: ""
      camera: 0
      scene: <scene-name>  # if <scene-name> runs all scenes

  - Name: TEST_BED_SENSOR_FUSION
    # Test configuration for sensor_fusion/test_sensor_fusion.py
    Controllers:
        AndroidDevice:
          - serial: 8A9X0NS5Z
            label: dut

    TestParams:
      fps: 30
      img_size: 640,480
      test_length: 7
      debug_mode: "False"
      chart_distance: 25
      rotator_cntl: arduino         # cntl can be arduino or canakit
      rotator_ch: 1
      camera: 0

Ручное тестирование

Ручное тестирование по-прежнему поддерживается в Android 12. Однако испытательный стенд должен идентифицировать тестирование как таковое с помощью ключевого слова MANUAL в названии испытательного стенда. Кроме того, испытательный стенд не может включать идентификатор планшета.

Ниже приведен пример файла config.yml для ручного тестирования.

TestBeds:
  - Name: TEST_BED_MANUAL
    Controllers:
        AndroidDevice:
          - serial: 8A9X0NS5Z
            label: dut

    TestParams:
      debug_mode: "False"
      chart_distance: 31.0
      camera: 0
      scene: scene1

Тестирование сцен без планшетов

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

Запуск отдельных тестов

Отдельные тесты можно запускать только в целях отладки, поскольку их результаты не передаются в CTS Verifier . Поскольку файлы config.yml нельзя перезаписать в командной строке для camera и scene , эти параметры должны быть правильными в файле config.yml для отдельного рассматриваемого теста. Кроме того, если в файле конфигурации имеется более одного тестового стенда, вы должны указать тестовый стенд с флагом --test_bed . Например:

python tests/scene1_1/test_black_white.py --config config.yml --test_bed TEST_BED_TABLET_SCENES

Тестовые артефакты

В Android 12 тестовые артефакты для Camera ITS хранятся аналогично Android 11 или более ранней версии, но со следующими изменениями:

  • В каталоге тестового артефакта /tmp CameraITS_ добавлено к 8-символьной случайной строке для ясности.
  • Результаты теста и ошибки сохраняются в test_log.DEBUG для каждого теста вместо test_name_stdout.txt и test_name_stderr.txt .
  • Logcats DUT и планшета из каждого отдельного теста хранятся в /tmp/CameraITS_######## упрощает отладку, поскольку вся информация, необходимая для отладки проблем 3A, регистрируется.

Тестовые изменения

В Android 12 сцены планшета представляют собой файлы PNG, а не файлы PDF. Использование файлов PNG позволяет большему количеству моделей планшетов правильно отображать сцены.

сцена0/test_jitter.py

Тест test_jitter выполняется на физических скрытых камерах в Android 12.

сцена1_1/test_black_white.py

Для Android 12 test_black_white имеет функции как test_black_white так и test_channel_saturation .

В следующей таблице описаны два отдельных теста в Android 11.

Название теста Первый уровень API Утверждения
сцена1_1/test_black_white.py ВСЕ Короткая экспозиция, значения RGB с низким усилением ~ [0, 0, 0]
Длительная экспозиция, значения RGB с высоким коэффициентом усиления ~[255, 255, 255]
scene1_1/test_channel_saturation.py 29 Уменьшен допуск на различия [255, 255, 255] для устранения цветового оттенка в белых изображениях.

В следующей таблице описывается объединенный тест scene1_1/test_black_white.py в Android 12.

Название теста Первый уровень API Утверждения
сцена1_1/test_black_white.py ВСЕ Короткая экспозиция, значения RGB с низким усилением ~ [0, 0, 0]
Длительная экспозиция, значения RGB с высоким коэффициентом усиления ~[255, 255, 255] и уменьшенный допуск между значениями для устранения цветового оттенка на белых изображениях.

scene1_1/test_burst_sameness_manual.py

Тест test_burst_sameness_manual выполняется на физических скрытых камерах в Android 12.

scene1_2/test_tonemap_sequence.py

Тест test_tonemap_sequence выполняется на ОГРАНИЧЕННЫХ камерах в Android 12.

scene1_2/test_yuv_plus_raw.py

Тест test_yuv_plus_raw выполняется на физических скрытых камерах в Android 12.

scene2_a/test_format_combos.py

Тест test_format_combos выполняется на ОГРАНИЧЕННЫХ камерах в Android 12.

сцена3/test_flip_mirror.py

Тест test_flip_mirror выполняется на ОГРАНИЧЕННЫХ камерах в Android 12.

сцена4/test_aspect_ratio_and_crop.py

Поиск кругов в scene4/test_aspect_ratio_and_crop.py был переработан в Android 12.

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

Контуры и критерии их выбора показаны на следующем изображении.

Концептуальный рисунок контуров и критерии выбора

Рисунок 1. Концептуальный рисунок контуров и критерии выбора

Метод Android 12 проще и работает для решения проблемы с обрезкой ограничительной рамки на некоторых планшетах с дисплеем. Все кандидаты круга регистрируются в целях отладки.

В Android 12 тест урожая выполняется для устройств FULL и LEVEL3 . Android 11 или более ранние версии пропускают утверждения теста урожая для FULL устройств.

В следующей таблице перечислены утверждения для test_aspect_ratio_and_crop.py , которые соответствуют заданному уровню устройства и первому уровню API.

Уровень устройства Первый уровень API Утверждения
ОГРАНИЧЕННОЕ ВСЕ Соотношение сторон
Поле зрения для форматов 4:3, 16:9, 2:1
ПОЛНЫЙ < 31 Соотношение сторон
Поле зрения для форматов 4:3, 16:9, 2:1
ПОЛНЫЙ ≥ 31 Обрезать
Соотношение сторон
Поле зрения для форматов 4:3, 16:9, 2:1
УРОВЕНЬ 3 ВСЕ Обрезать
Соотношение сторон
Поле зрения для форматов 4:3, 16:9, 2:1

сцена4/test_multi_camera_alignment.py

Метод undo_zoom() для YUV-захватов в scene4/test_multi_camera_alignment.py был переработан для более точного учета кадрирования на датчиках, которые не соответствуют соотношению сторон снимка.

Код Android 11 Python 2

zoom_ratio = min(1.0 * yuv_w / cr_w, 1.0 * yuv_h / cr_h)
circle[i]['x'] = cr['left'] + circle[i]['x'] / zoom_ratio
circle[i]['y'] = cr['top'] + circle[i]['y'] / zoom_ratio
circle[i]['r'] = circle[i]['r'] / zoom_ratio

Код Android 12 Python 3

yuv_aspect = yuv_w / yuv_h
relative_aspect = yuv_aspect / (cr_w/cr_h)
if relative_aspect > 1:
  zoom_ratio = yuv_w / cr_w
  yuv_x = 0
  yuv_y = (cr_h - cr_w / yuv_aspect) / 2
else:
  zoom_ratio = yuv_h / cr_h
  yuv_x = (cr_w - cr_h * yuv_aspect) / 2
  yuv_y = 0
circle['x'] = cr['left'] + yuv_x + circle['x'] / zoom_ratio
circle['y'] = cr['top'] + yuv_y + circle['y'] / zoom_ratio
circle['r'] = circle['r'] / zoom_ratio

Sensor_fusion/test_sensor_fusion.py

В Android 12 добавлен метод обнаружения особенностей изображений для теста слияния сенсоров.

В версиях ниже Android 12 все изображение используется для поиска 240 лучших функций, которые затем маскируются по центру на 20%, чтобы избежать эффектов скользящего затвора, при этом минимальное требование к функциям составляет 30 функций.

Если функций, обнаруженных этим методом, недостаточно, Android 12 сначала маскирует область обнаружения функций до центра на 20% и ограничивает максимальные функции до двухкратного минимального требования к функциям.

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

разница в обнаружении функций между Android 11 и Android 12. Обнаружение функции sensor_fusion

Рисунок 2. Разница в обнаружении функций между Android 11 и Android 12.

Новые тесты

scene0/test_solid_color_test_pattern.py

Новый тест test_solid_color_test_pattern включен для Android 12. Этот тест включен для всех камер и описан в следующей таблице.

Место действия Название теста Первый уровень API Описание
0 test_solid_color_test_pattern 31 Подтверждает вывод сплошного цветного изображения и возможность программирования цвета изображения.

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

Параметры

  • cameraPrivacyModeSupport : определяет, поддерживает ли камера режим конфиденциальности.
  • android.sensor.testPatternMode : устанавливает режим тестового шаблона. В этом тесте используется SOLID_COLOR .
  • android.sensor.testPatternData : устанавливает значения тестовых шаблонов R, Gr, Gb, G для режима тестового шаблона.

Описание тестового шаблона сплошного цвета см. в разделе SENSOR_TEST_PATTERN_MODE_SOLID_COLOR .

Метод

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

Захват YUV настроен на полностью насыщенные тестовые шаблоны BLACK , WHITE , RED , GREEN и BLUE . Поскольку определение тестового шаблона соответствует шаблону Байера датчика, цветовые каналы должны быть установлены для каждого цвета, как показано в следующей таблице.

Цвет testPatternData (RGGB)
ЧЕРНИТЬ (0, 0, 0, 0)
БЕЛЫЙ (1, 1, 1, 1)
КРАСНЫЙ (1, 0, 0, 0)
ЗЕЛЕНЫЙ (0, 1, 1, 0)
СИНИЙ (0, 0, 0, 1)

Таблица утверждений

В следующей таблице описаны тестовые утверждения для test_solid_color_test_pattern.py .

Камера
Первый уровень API
Тип камеры Заявленные цвета
31 Байер ЧЕРНЫЙ, БЕЛЫЙ, КРАСНЫЙ, ЗЕЛЕНЫЙ, СИНИЙ
31 МОНОНУКЛЕОЗ ЧЕРНО-БЕЛЫЙ
< 31 Байер/МОНО ЧЕРНИТЬ

Тесты класса производительности

scene2_c/test_camera_launch_perf_class.py

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

scene2_c/test_jpeg_capture_perf_class.py

Проверяет, что задержка захвата JPEG 1080p составляет менее 1 секунды как для передней, так и для задней основных камер со сценой лица scene2_c.