Camera Image Test Suite (ITS) — это фреймворк для проведения тестов изображений, полученных с помощью камеры Android. Цель каждого теста в ITS — настроить камеру определённым образом, сделать один или несколько снимков и проверить их на наличие ожидаемых данных. Многие тесты требуют, чтобы камера была направлена на определённую целевую таблицу или освещена с определённой интенсивностью.
ITS находится в тестовой среде CTS Verifier в папке cts/apps/CameraITS
. Устройства должны пройти тесты ITS, соответствующие поддерживаемым функциям, заявленным фреймворком камеры для сторонних приложений как подмножество CTS.
Настраивать
Для проведения тестов ИТС необходимо настроить следующее:
- Тестируемое устройство (DUT)
- Хост-компьютер (например, настольный компьютер или ноутбук с Linux)
- Сцена, которую фотографирует камера
Настройка тестируемого устройства (DUT)
Чтобы настроить DUT, выполните следующие действия:
- Подключите проверяемое устройство к хост-компьютеру через USB.
- Предоставьте хосту разрешения на доступ к DUT через ADB.
Установите приложение 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 Platform должны быть установлены, а ADB должен быть указан в пути к исполняемому файлу оболочки или терминала, запущенного на хост-компьютере. Информация о публично выпущенной версии инструментов Android SDK Platform представлена в примечаниях к выпуску инструментов SDK Platform .
Питон
На хост-компьютере должен быть установлен 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-in-a-box, обеспечивающий простоту автоматизации, надежность и эффективность тестирования. Тестовые стенды ITS-in-a-box поддерживают все требования ITS к освещению, центрированию и замене таблиц. Кроме того, ITS-in-a-box необходим для тестирования расширений камеры .
Для ручного тестирования убедитесь в следующем:
- Испытуемый прибор установлен на штативе.
- Для каждого теста тестируемое устройство (DUT) направляется на правильную сцену. (Тестовый сценарий ITS предоставляет подсказки для изменения настроек сцены перед началом тестов в новой сцене.)
- Испытуемое устройство подключается к хост-компьютеру через 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=0 scenes=scene_tele
python tools/run_all_tests.py camera=0.4 scenes=4,scene6_tele
Файл конфигурации сцены sensor_fusion.yml
Ниже приведён пример файла config_yml
для тестов sensor_fusion
. Для тестирования sensor_fusion
в имени испытательного стенда должно присутствовать ключевое слово SENSOR_FUSION
. Android 13 и более поздние версии поддерживают только контроллер Arduino для тестирования Sensor Fusion из-за необходимости предварительного просмотра и стабилизации видео. 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 (/docs/compatibility/cts/camera-its-box-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, используя следующий процесс.
Откройте приложение CTS Verifer. В меню тестов выберите «Camera ITS Test» .
На хост-компьютере запустите тесты 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
пройден).Чтобы подтвердить соответствие теста требованиям, нажмите кнопку с зелёной галочкой. Пункт «Тест ITS камеры» в меню тестов CTS Verifier станет зелёным, что означает, что телефон прошёл тест ITS камеры.
Параллельное тестирование DUT
Устройства под управлением Android 14 и выше поддерживают параллельное тестирование тестируемых устройств. Это позволяет тестировать тестируемые устройства параллельно на нескольких устройствах для ускорения общего тестирования. Например, параллельное тестирование позволяет одновременно тестировать камеру 0 на одном устройстве и камеру 1 на другом. Все тесты параллельных сеансов тестирования объединяются в сеансе CTS Verifier на эталонном устройстве. Необходимо запускать параллельное тестирование с управлением освещением 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
проверяет модель шума, проверяя правильность значений шума для экспозиции и усиления снимка, предоставленных в данных камеры.