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 позволяет настроить 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 требуется для тестирования расширений камеры .
Для ручного тестирования убедитесь в следующем:
- Тестируемый прибор установлен на штативе.
- Для каждого теста тестируемое устройство указывается на правильную сцену. (Тестовый сценарий 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=1 scenes=2,1,0
Файл конфигурации сцены 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
Файл 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, используя следующий процесс.
Откройте приложение 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*
указывает на то, что тест не пройден, но поскольку тест еще не является обязательным, тест будет сообщен какPASS
для CtsVerifier.SKIP
указывает на то, что тест был пройден, поскольку устройство не объявило о базовой тестируемой возможности. Например, если устройство не объявляет через интерфейсы камеры, что оно поддерживает DNG, тесты, связанные с захватом файлов DNG, пропускаются и считаются какPASS
.Чтобы подтвердить, что тесты соответствуют требованиям теста, нажмите зеленую кнопку с галочкой. Запись Camera ITS Test в меню тестов CTS Verifier затем становится зеленой и означает, что телефон прошел Camera ITS.
Параллельное тестирование DUT
Устройства под управлением 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, должны предоставлять модель шума в метаданных результата захвата каждого необработанного снимка. Эта модель шума должна быть встроена в HAL камеры для каждой камеры (например, передней и задней камер) на устройстве, которое заявляет о поддержке.
Реализация модели шума
Чтобы реализовать модель шума, выполните следующие действия, чтобы создать модель шума и внедрить ее в HAL камеры.
Чтобы сгенерировать модель шума для каждой камеры, запустите скрипт
dng_noise_model.py
в каталогеtools
. Это выведет фрагмент кода C. Для получения дополнительной информации о настройке камеры и среды захвата см. документDngNoiseModel.pdf
в каталогеtools
.Чтобы реализовать модель шума для устройства, вырежьте и вставьте фрагмент кода C в HAL камеры.
Проверка модели шума
Автоматизированный тест ITS tests/scene1_1/test_dng_noise_model.py
проверяет модель шума, проверяя правильность значений шума для экспозиции и усиления снимка, указанных в данных камеры.