Примечания к выпуску Android 12 Camera Image Test Suite

Ряд камер ИТС изменения включены в релиз 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 все отдельные тесты теперь загружают свои сцены. Хотя загрузка сцены для каждого теста увеличивает общее время тестирования, она позволяет отлаживать отдельные тесты.

Для получения дополнительной информации об отдельных изменениях тестов см изменений Test .

Следующие модули 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 Test

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

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

файлы config.yml

С рамками Mobly, вы можете настроить устройство под тестом (ИУ) и диаграмму планшет в 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"
      camera: 0
      scene: scene1

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

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

Проведение индивидуальных тестов

Индивидуальные тесты могут быть запущены только для отладки , потому что их результаты не сообщается 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 от каждого отдельного теста хранятся в /tmp/CameraITS_######## каталог упрощения отладки , как вся необходимая информация для вопросов 3A отладки регистрируются.

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

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

scene0 / test_jitter.py

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

scene1_1 / test_black_white.py

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

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

Название теста Первый уровень API Утверждения
scene1_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 Утверждения
scene1_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.

scene3 / test_flip_mirror.py

test_flip_mirror тест работает на ОГРАНИЧЕННЫМИ камер в Android 12.

scene4 / test_aspect_ratio_and_crop.py

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

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

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

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

Рисунок 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

scene4 / test_multi_camera_alignment.py

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

Код 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 feature detection

Рисунок 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, значение тестового шаблона Гр, 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

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