Camera Image Test Suite (ITS) — это фреймворк для проведения тестов изображений, полученных с помощью камеры Android. Общая цель каждого теста в ITS — настроить камеру определенным образом, сделать один или несколько снимков и проверить, содержат ли они ожидаемые данные изображения. Многие тесты требуют, чтобы камера была направлена на определенную целевую диаграмму или освещена с определенной интенсивностью.
ITS находится в тестовой среде CTS Verifier в папке cts/apps/CameraITS . Устройства должны пройти тесты ITS, соответствующие поддерживаемым функциям, заявленным фреймворком камеры для сторонних приложений в качестве подмножества CTS.
Настраивать
Для запуска тестов ITS необходимо выполнить следующие действия:
- Испытуемое устройство (DUT)
- Основной компьютер (например, настольный компьютер или ноутбук под управлением Linux)
- Сцена, которую запечатлела камера.
Настройка тестируемого устройства (DUT).
Для настройки тестируемого устройства выполните следующие шаги:
- Подключите тестируемое устройство к компьютеру через USB.
- Предоставьте хосту права доступа к тестируемому устройству через ADB.
Установите приложение CTS Verifier (
CtsVerifier.apk) на устройство. Для получения дополнительной информации см. раздел «Использование CTS Verifier» .extract root/out/host/linux-x86/cts-verfier/android-cts-verifier.zipcd android-cts-verifieradb install -r -g CtsVerifier.apkНа тестируемом устройстве запустите стандартное приложение камеры и закройте все окна, которые появляются при запуске, чтобы избежать помех во время тестирования.
Настройка хоста
Для работы 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 CameraITSsource 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.pypython tools/run_all_tests.py camera=1python tools/run_all_tests.py scenes=2,1,0python tools/run_all_tests.py camera=0 scenes=scene_telepython 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_fusionpython tools/run_all_tests.py scenes=sensor_fusion camera=0python tools/run_all_tests.py scenes=scene_flash,feature_combinationpython 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.ymlpython tools/run_all_tests.py camera=<camera-id> scenes=scene_ip
Проведение тестов ITS
В этом разделе описывается, как запускать тесты ITS.
Вызов тестов
После настройки устройства, хост-машины (включая окружение) и физической сцены запустите тесты ITS, используя следующий процесс.
Откройте приложение CTS Verifer. В меню тестов выберите «Тест Camera ITS» .
С хост-машины запустите тесты 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.Чтобы подтвердить соответствие тестам требованиям, нажмите зеленую кнопку с галочкой. После этого пункт « Тест 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 камеры.
Для создания модели шума для каждой камеры запустите скрипт
dng_noise_model.pyиз каталогаtools. В результате будет получен фрагмент кода на языке C. Дополнительную информацию о настройке камеры и среды захвата см. в документеDngNoiseModel.pdfв каталогеtools.Для реализации модели шума для устройства скопируйте и вставьте фрагмент кода на языке C в HAL камеры.
Проверка модели шума
Автоматизированный тест ITS tests/scene1_1/test_dng_noise_model.py проверяет модель шума, подтверждая корректность значений шума для экспозиции и усиления, предоставленных в данных камеры.