Обзор ITS камеры,Обзор ITS камеры

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

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

Настраивать

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

  • Испытуемое устройство (DUT)
  • Основной компьютер (например, настольный компьютер или ноутбук под управлением Linux)
  • Сцена, которую запечатлела камера.

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

Для настройки тестируемого устройства выполните следующие шаги:

  1. Подключите тестируемое устройство к компьютеру через USB.
  2. Предоставьте хосту права доступа к тестируемому устройству через 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
  4. На тестируемом устройстве запустите стандартное приложение камеры и закройте все окна, которые появляются при запуске, чтобы избежать помех во время тестирования.

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

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

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

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

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

Python

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

Мобли

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

pip install mobly

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

Для настройки тестовой среды выполните следующую команду:

cd CameraITS
source build/envsetup.sh

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

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

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

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

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

В тестовом скрипте ITS пользователю предлагается изменить настройки сцены перед началом тестирования в новой сцене.

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

Файлы конфигурации

При использовании фреймворка 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=0 scenes=scene_tele
python tools/run_all_tests.py camera=0.4 scenes=4,scene6_tele

файл sensor_fusion scene 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
python tools/run_all_tests.py scenes=scene_flash,feature_combination
python tools/run_all_tests.py scenes=checkerboard camera=1

Файл 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

Файл config.yml для тестирования стенда Gen2

Ниже приведён пример файла config.yml тестовой платформы TEST_BED_GEN2 . Эта тестовая платформа используется для тестов scene_ip , которые используют систему Gen2. В следующем примере показаны параметры тестовой платформы, когда система Gen2 доступна и тесты scene_ip не пропускаются.

Testbeds
  - Name: TEST_BED_GEN2
    # Test configuration for scene_ip/test_default_jca_ip.py
    Controllers:
        AndroidDevice:
          - serial: <device-id>  # quotes needed if serial id entirely numeric
            label: dut
    TestParams:
      debug_mode: "False"  # quotes are needed here
      chart_distance: 30
      rotator_cntl: gen2_rotator   # gen2 rig specific. "None" if gen2 rig not available
      rotator_ch: 0
      camera: <camera-id>
      foldable_device: "False"  # "True" if testing foldable device
      tablet_device: "False"  # "True" if testing tablet device
      lighting_cntl: gen2_lights  # gen2 rig specific. "None" if gen2 rig not available
      lighting_ch: 1
      scene: scene_ip

В следующем примере показаны параметры тестового стенда, когда установка Gen2 недоступна и тесты scene_ip пропускаются.

Testbeds
  - Name: TEST_BED_GEN2
    # Test configuration for scene_ip/test_default_jca_ip.py
    Controllers:
        AndroidDevice:
          - serial: <device-id>  # quotes needed if serial id entirely numeric
            label: dut
    TestParams:
      debug_mode: "False"  # quotes are needed here
      chart_distance: 30
      rotator_cntl: "None"   # gen2 rig specific. "None" if gen2 rig not available
      rotator_ch: <controller-channel>
      camera: <camera-id>
      foldable_device: "False"  # "True" if testing foldable device
      tablet_device: "False"  # "True" if testing tablet device
      lighting_cntl: "None"  # gen2 rig specific. "None" if gen2 rig not available
      lighting_ch: <controller-channel>
      scene: scene_ip

Для запуска теста scene_ip используйте одну из следующих команд:

python tests/scene_ip/test_default_jca_ip.py -c config.yml
python tools/run_all_tests.py camera=<camera-id> scenes=scene_ip

Проведение тестов ITS

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

Вызов тестов

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

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

  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)
    

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

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

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

Устройства под управлением Android 14 или выше поддерживают параллельное тестирование тестируемых устройств (DUT). Это позволяет тестировать 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-файлов, должны предоставлять модель шума в метаданных результатов захвата каждого RAW-снимка. Эта модель шума должна быть встроена в HAL камеры для каждой камеры (например, фронтальной и тыловой камер) на устройстве, заявляющем о поддержке этой функции.

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

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

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

  2. Для реализации модели шума для устройства скопируйте и вставьте фрагмент кода на языке C в HAL камеры.

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

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