Камера ИТС

Camera Image Test Suite (ITS) — это платформа для тестирования изображений, созданных камерой Android. Общая цель каждого теста в ITS — настроить камеру определенным образом, сделать один или несколько снимков и проверить их, чтобы определить, содержат ли они ожидаемые данные изображения. Многие тесты требуют, чтобы камера была направлена ​​на определенную целевую карту или была освещена определенной интенсивностью.

ITS находится в тестовом пакете CTS Verifier в cts/apps/CameraITS . Устройства должны пройти тесты ITS, соответствующие поддерживаемым функциям, рекламируемым платформой камеры для сторонних приложений как подмножества CTS.

Настраивать

Для запуска тестов ITS необходимо настроить следующее:

  • Тестируемое устройство (DUT)
  • Хост-машина (например, настольный компьютер или ноутбук с Linux)
  • Сцена, которую снимает камера

Настройка тестируемого устройства (DUT)

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

  1. Подключите тестируемое устройство к хост-машине через USB.
  2. Предоставьте хосту разрешения на доступ к DUT через ADB.
  3. Установите приложение CTS Verifier ( CtsVerifier.apk ) на устройство. Дополнительные сведения см. в разделе Использование CTS Verifier .

    extract root/out/host/linux-x86/cts-verfier/android-cts-verifier.zip
    cd android-cts-verifier
    adb install -r -g CtsVerifier.apk

Настройка хоста

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

Чтобы настроить хост-компьютер, убедитесь, что установлено следующее программное обеспечение.

Инструменты платформы Android SDK

Должны быть установлены инструменты платформы Android SDK, а ADB должен находиться в пути к исполняемому файлу оболочки или терминала, работающего на хост-компьютере. Информацию об общедоступной версии инструментов платформы Android SDK см. в примечаниях к выпуску инструментов платформы SDK .

Питон

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

Мобли

Для Android 12 и выше необходимо установить тестовую среду Mobly. Mobly позволяет настроить тестируемое устройство и графический планшет в классе its_base_test . Чтобы установить тестовую среду Mobly, запустите:

pip install mobly

Настройка среды

Чтобы настроить тестовую среду, запустите:

cd CameraITS
source build/envsetup.sh

Эта команда проверяет установку Python, настраивает переменную среды PYTHONPATH и запускает модульные тесты для модулей utils/*.py . Если на терминале не выводится никаких ошибок, среда готова к запуску тестов ITS.

Настройка сцены

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

При ручном тестировании убедитесь в следующем:

  • ИУ находится на штативе
  • ИУ направлено на правильную сцену для каждого теста. (Сценарий тестирования ITS предлагает изменить настройки сцены перед запуском тестов в новой сцене.)
  • DUT подключается к хост-машине через USB.
  • ИУ не перемещается во время тестового запуска.
  • Сцена освещается постоянным, неколеблющимся источником света. (Не используйте флуоресцентный свет, поскольку он вызывает мерцание.)

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

Ориентация телефона должна быть установлена ​​так, чтобы камера делала снимки без вращения. Самый простой способ проверить это — использовать сцены с лицами в сцене 2. Большинство телефонов имеют альбомную ориентацию: телефон повернут против часовой стрелки для задней камеры и по часовой стрелке для передней камеры.

Конфигурационные файлы

Используя платформу Mobly, вы должны создать файл конфигурации config.yml для определения тестового стенда Mobly. Ниже приведены примеры для различных случаев использования.

Файл config.yml сцен для планшетов

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

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"  # "True" or "False"; quotes needed
      lighting_cntl: <controller-type>  # "arduino" or "None"; quotes needed
      lighting_ch: <controller-channel>
      camera: 0
      foldable_device: "False". # set "True" if testing foldable
      scene: <scene-name>  # if <scene-name> runs all scenes

Чтобы вызвать тестовый стенд, запустите tools/run_all_tests.py . Если нет значений командной строки, определяющих камеры или сцены, тест запускается со значениями файла config.yml . Если для камер или сцен существуют значения командной строки, они переопределяют значения в разделе TestParams файла config.yml . Например:

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 config.yml

Ниже приведен пример файла config_yml для тестов sensor_fusion . Для тестирования sensor_fusion ключевое слово SENSOR_FUSION должно быть в названии испытательного стенда. Android 13 и более поздних версий поддерживают только контроллер Arduino для объединения датчиков из-за предварительного просмотра и тестирования стабилизации видео. Android 12 поддерживает контроллеры Arduino и Canakit.

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
      rotator_ch: 1
      camera: 0

Чтобы запустить тесты sensor_fusion с помощью поля Sensor Fusion , запустите:

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

Файл config.yml с несколькими испытательными стендами

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

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

Ручное тестирование файла config.yml

Ниже приведен пример файла config.yml для ручного тестирования. Начиная с Android 14, ручное тестирование поддерживается для всех тестов, кроме тестов scene_extensions . Для ручного тестирования в названии испытательного стенда должно быть ключевое слово MANUAL . Кроме того, раздел AndroidDevice не может включать раздел с серийным номером или этикеткой для планшета.

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

    TestParams:
      debug_mode: "False"
      camera: 0
      scene: 1

Запуск ИТС-тестов

В этом разделе описывается, как запускать тесты ITS.

Вызов тестов

После настройки устройства, хост-компьютера (включая среду) и физической сцены запустите тесты ITS, используя следующий процесс.

  1. Откройте приложение CTS Verifer. В меню тестов выберите Camera ITS Test .

  2. На хост-компьютере запустите тесты ITS из каталога CameraITS/ . Например, для устройства с передней и задней камерами выполните следующую команду:

    python tools/run_all_tests.py

    Скрипт перебирает камеры и тестовые сцены на основе файла config.yml . Для отладки настроек мы рекомендуем запустить одну из сцен scene2 с одним тестом для быстрого результата.

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

    Preparing to run ITS on camera 0
    Start running ITS on camera:  0
    Press Enter after placing camera 0 to frame the test scene:
    scene1_1
    The scene setup should be: A grey card covering at least the   middle 30% of the scene
    Running vendor 3A on device
    Capture an image to check the test scene
    Capturing 1 frame with 1 format [yuv]
    Please check scene setup in /tmp/tmpwBOA7g/0/scene1_1.jpg
    Is the image okay for ITS scene1_1? (Y/N)
    

    При каждом запуске сценария распечатывается журнал, показывающий PASS , FAIL , FAIL* или SKIP для каждого теста ITS. FAIL* означает, что тест не пройден, но, поскольку тест еще не обязателен, он сообщит CtsVerifier как PASS . SKIP означает, что тест пройден, поскольку устройство не объявило о тестируемой базовой возможности. Например, если устройство не объявляет через интерфейсы камеры, что оно поддерживает DNG, тесты, связанные с захватом файлов DNG, пропускаются и засчитываются как PASS .

  3. Чтобы подтвердить, что тесты соответствуют требованиям, нажмите кнопку с зеленой галочкой. Запись Camera ITS Test в меню тестов CTS Verifier становится зеленой и означает, что телефон прошел Camera ITS.

Параллельное тестирование тестируемого устройства

Устройства под управлением Android 14 или более поздней версии поддерживают параллельное тестирование DUT. Это позволяет тестировать тестируемые устройства параллельно на нескольких установках, что ускоряет общее тестирование. Например, параллельное тестирование позволяет одновременно тестировать камеру 0 на одной установке и камеру 1 на другой установке. Все тестирование для сеансов параллельного тестирования агрегируется в сеансе CTS Verifier на эталонном DUT. Вы должны запустить параллельное тестирование с управлением освещением Arduino, поскольку ручное управление освещением не поддерживается при параллельном тестировании. Убедитесь, что разные каналы на одном и том же контроллере Arduino управляют освещением каждой установки.

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

TestBeds:
  - Name: TEST_BED_TABLET_SCENES_INDEX_0
    Controllers:
        AndroidDevice:
          - serial: <device-id-0>
            label: dut
          - serial: <tablet-id-0>
            label: tablet
    TestParams:
      brightness: 192
      chart_distance: 22.0
      debug_mode: "False"
      lighting_cntl: "arduino"
      lighting_ch: <controller-channel-0>
      camera: 0
      scene: <scene-name>  # if <scene-name> left as-is runs all scenes
      foldable_device: "False"

  - Name: TEST_BED_TABLET_SCENES_INDEX_1
    Controllers:
        AndroidDevice:
          - serial: <device-id-1>
            label: dut
          - serial: <tablet-id-1>
            label: tablet
    TestParams:
      brightness: 192
      chart_distance: 22.0
      debug_mode: "False"
      lighting_cntl: "arduino"
      lighting_ch: <controller-channel-1>
      camera: 1
      scene: <scene-name>  # if <scene-name> left as-is runs all scenes
      foldable_device: "False"

  # TEST_BED_SENSOR_FUSION represents testbed index 2
  # Parallel sensor_fusion is currently unsupported due to Arduino requirements
  - Name: TEST_BED_SENSOR_FUSION
    # Test configuration for sensor_fusion
    Controllers:
        AndroidDevice:
          - serial: <device-id>
            label: dut
    TestParams:
      fps: 30
      img_size: 640,480
      test_length: 7
      debug_mode: "False"
      chart_distance: 25
      rotator_cntl: "arduino"
      rotator_ch: <controller-channel-2>
      camera: <camera-id>
      foldable_device: "False"
      tablet_device: "False"
      lighting_cntl: "None"
      lighting_ch: <controller-channel>
      scene: "sensor_fusion"

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

for i in 0 1 2; do python3 tools/run_all_tests.py testbed_index=$i num_testbeds=3 & done; wait

Модель шума DNG

Устройства, рекламирующие возможность захвата RAW или DNG, должны предоставлять модель шума в метаданных результата захвата каждого необработанного кадра. Эта модель шума должна быть встроена в HAL камеры для каждой камеры (например, передней и задней камер) на устройстве, которое заявляет о поддержке.

Реализация модели шума

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

  1. Чтобы создать модель шума для каждой камеры, запустите скрипт dng_noise_model.py в каталоге tools . Это выводит фрагмент кода C. Дополнительную информацию о настройке камеры и среды захвата см. в документе DngNoiseModel.pdf в каталоге tools .

  2. Чтобы реализовать модель шума для устройства, вырежьте и вставьте фрагмент кода C в HAL камеры.

Проверка модели шума

Автоматический ITS tests/scene1_1/test_dng_noise_model.py проверяет модель шума, проверяя правильность значений шума для экспозиции кадра и усиления, указанных в данных камеры.