Camera Image Test Suite (ITS) é uma estrutura para executar testes em imagens produzidas por uma câmera Android. O objetivo geral de cada teste no ITS é configurar a câmera de uma maneira específica, capturar uma ou mais fotos e examinar as fotos para ver se elas contêm os dados de imagem esperados. Muitos dos testes exigem que a câmera seja apontada para um gráfico de alvo específico ou iluminada com uma intensidade específica.
O ITS está localizado no equipamento de teste do CTS Verifier em cts/apps/CameraITS
. Os dispositivos devem passar nos testes ITS correspondentes aos recursos suportados anunciados pela estrutura da câmera para aplicativos de terceiros como um subconjunto do CTS.
Configurar
Para executar testes ITS, o seguinte deve ser configurado:
- Um dispositivo em teste (DUT)
- Uma máquina host (por exemplo, um desktop ou laptop Linux)
- Uma cena que a câmera fotografa
Configuração do dispositivo em teste (DUT)
Para configurar um DUT, siga estas etapas:
- Conecte o DUT a uma máquina host via USB.
- Conceda permissões para o host acessar o DUT pelo ADB.
Instale o aplicativo CTS Verifier (
CtsVerifier.apk
) no dispositivo. Para obter mais informações, consulte Usando o verificador CTS .extract root/out/host/linux-x86/cts-verfier/android-cts-verifier.zip
cd android-cts-verifier
adb install -r -g CtsVerifier.apk
Configuração do host
O ITS exige que a máquina host esteja conectada ao DUT por meio de USB, seja capaz de usar o ADB para controle e comunicação do dispositivo e tenha o software necessário instalado.
Para configurar sua máquina host, certifique-se de que o software a seguir esteja instalado.
Ferramentas da plataforma Android SDK
As ferramentas da plataforma Android SDK devem estar instaladas e o ADB deve estar no caminho executável do shell ou terminal em execução na máquina host. Para obter a versão pública das ferramentas da plataforma Android SDK, consulte Notas de versão das ferramentas da plataforma SDK .
Pitão
Python deve estar instalado na máquina host. Recomendamos o uso de uma distribuição Python integrada para garantir suporte para versões compatíveis. Para obter detalhes sobre quais versões do Python e do pacote instalar para uma versão específica, consulte as notas de versão do Camera ITS para a versão correspondente.
Mobly
Para Android 12 e superior, a estrutura de teste Mobly deve estar instalada. Mobly permite configurar um DUT e um tablet gráfico na classe its_base_test
. Para instalar a estrutura de teste Mobly, execute:
pip install mobly
Configuração do ambiente
Para configurar o ambiente de teste, execute:
cd CameraITS
source build/envsetup.sh
Este comando verifica a instalação do Python, configura a variável de ambiente PYTHONPATH
e executa testes de unidade nos módulos utils/*.py
. Se nenhum erro for impresso no terminal, o ambiente está pronto para executar os testes ITS.
Se você vir a mensagem de erro libtinfo.so.6: no version information available (required by /bin/sh)
no tempo de execução, execute o seguinte comando para renomear o arquivo libtinfo.so.6
.
mv $ENV_DIRECTORY/lib/libtinfo.so.6 $ENV_DIRECTORY/lib/libtinfo.so.6.bak
Configuração de cena
Para configurar as cenas, recomendamos usar a configuração Camera ITS-in-a-box para facilitar a automação, confiabilidade e eficiência nos testes. Os equipamentos de teste ITS-in-a-box suportam todos os requisitos de iluminação, centralização e alteração de gráficos para ITS. Além disso, o ITS-in-a-box é necessário para testes de extensões de câmera .
Para testes manuais, certifique-se do seguinte:
- O DUT está em um tripé
- O DUT é apontado para a cena correta para cada teste. (O script de teste ITS fornece avisos para alterar a configuração da cena antes de iniciar os testes em uma nova cena.)
- O DUT está conectado à máquina host por USB.
- O DUT não se move durante a execução do teste.
- A cena é iluminada com uma fonte de luz constante e não flutuante. (Não use luz fluorescente porque isso provoca cintilação.)
O script de teste ITS exibe um prompt solicitando ao usuário que altere a configuração da cena antes de iniciar os testes em uma nova cena.
A orientação do telefone deve ser definida para que a câmera tire imagens sem rotação. A maneira mais fácil de verificar isso é com as cenas de rosto na cena2. A maioria dos telefones tem o telefone na orientação paisagem, com o telefone girado no sentido anti-horário para a câmera traseira e no sentido horário para a câmera frontal.
Arquivos de configuração
Usando a estrutura Mobly, você deve criar um arquivo de configuração config.yml
para definir o ambiente de teste do Mobly. A seguir estão exemplos para diferentes casos de uso.
Arquivo config.yml de cenas baseadas em tablet
A seguir está um exemplo de arquivo config.yml
para cenas baseadas em tablet. Para testes baseados em tablet, a palavra-chave TABLET
deve estar no nome do ambiente de teste. Durante a inicialização, o executor de testes Mobly inicializa os parâmetros no arquivo e os passa para os testes individuais.
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
Para invocar a plataforma de teste, execute tools/run_all_tests.py
. Se não houver valores de linha de comando especificando câmeras ou cenas, o teste será executado com os valores do arquivo config.yml
. Se houver valores de linha de comando para câmeras ou cenas, eles substituirão os valores na seção TestParams
do arquivo config.yml
. Por exemplo:
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
arquivo config.yml da cena sensor_fusion
A seguir está um exemplo de arquivo config_yml
para testes sensor_fusion
. Para testes sensor_fusion
, a palavra-chave SENSOR_FUSION
deve estar no nome do testbed. O Android 13 e superior suportam apenas o controlador Arduino para fusão de sensores devido à visualização e aos testes de estabilização de vídeo. O Android 12 oferece suporte aos controladores Arduino e 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
Para executar testes sensor_fusion
com a caixa de fusão de sensores , execute:
python tools/run_all_tests.py scenes=sensor_fusion
python tools/run_all_tests.py scenes=sensor_fusion camera=0
Arquivo config.yml de vários testbeds
A seguir está um exemplo de arquivo config.yml
com vários testbeds, um testbed para tablet e um testbed sensor_fusion
. O ambiente de teste correto é determinado pelas cenas testadas.
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
Arquivo config.yml de teste manual
A seguir está um exemplo de arquivo config.yml
para teste manual. A partir do Android 14, o teste manual é compatível com todos os testes, exceto os testes scene_extensions
. Para testes manuais, a palavra-chave MANUAL
deve estar no nome do testbed. Além disso, a seção AndroidDevice
não pode incluir uma seção serial ou de rótulo para um tablet.
TestBeds:
- Name: TEST_BED_MANUAL
Controllers:
AndroidDevice:
- serial: 8A9X0NS5Z
label: dut
TestParams:
debug_mode: "False"
camera: 0
scene: 1
Executando testes ITS
Esta seção descreve como executar testes ITS.
Invocando testes
Após a configuração do dispositivo, da máquina host (incluindo o ambiente) e da cena física, execute os testes ITS usando o processo a seguir.
Abra o aplicativo CTS Verifer. No menu de testes, selecione Teste ITS da câmera .
Na máquina host, execute os testes ITS do diretório
CameraITS/
. Por exemplo, para um dispositivo com câmeras frontal e traseira, execute o seguinte comando:python tools/run_all_tests.py
O script percorre câmeras e cenas de teste com base no arquivo
config.yml
. Para configurações de depuração, recomendamos executar uma das cenasscene2
com um único teste para obter um retorno mais rápido.Para testes manuais, antes de iniciar a execução do conjunto de testes ITS em cada cena, o script tira uma foto da cena atual, salva-a como JPEG, imprime o caminho do JPEG no console e pede ao usuário para confirmar se a imagem está ok. Isso captura e confirma loops de fluxo até que o usuário confirme que a imagem está correta. A seguir estão as mensagens neste fluxo.
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)
Cada execução do script imprime um log mostrando PASS, FAIL ou SKIP para cada teste ITS, onde SKIP indica que o teste foi aprovado porque o dispositivo não anunciou o recurso subjacente que está sendo testado. Por exemplo, se um dispositivo não anunciar por meio das interfaces da câmera que oferece suporte a DNG, os testes relacionados à captura de arquivo DNG serão ignorados e contados como aprovados.
Para confirmar que os testes atenderam aos requisitos do teste, toque no botão de marca de seleção verde. A entrada Camera ITS Test no menu de testes do CTS Verifier fica verde e significa que o telefone passou no Camera ITS.
Teste DUT paralelo
Dispositivos com Android 14 ou superior são compatíveis com testes DUT paralelos. Isso permite testar DUTs em paralelo com vários equipamentos para acelerar os testes gerais. Por exemplo, o teste paralelo permite testar a câmera 0 em um equipamento e a câmera 1 em outro equipamento ao mesmo tempo. Todos os testes para sessões de teste paralelas são agregados na sessão do CTS Verifier no DUT de referência. Você deve executar testes paralelos com o controle de iluminação do Arduino, pois o controle manual de iluminação não é compatível com testes paralelos. Certifique-se de que um canal diferente no mesmo controlador Arduino controle a iluminação de cada equipamento.
A seguir está um exemplo de arquivo config.yml
que define três testbeds para execução em paralelo.
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"
Para executar os testbeds em paralelo, use o seguinte comando:
for i in 0 1 2; do python3 tools/run_all_tests.py testbed_index=$i num_testbeds=3 & done; wait
Modelo de ruído DNG
Os dispositivos que anunciam a capacidade de capturar RAW ou DNG devem fornecer um modelo de ruído nos metadados do resultado da captura de cada imagem bruta. Esse modelo de ruído deve ser incorporado ao HAL da câmera para cada câmera (por exemplo, câmeras frontal e traseira) no dispositivo que reivindica suporte.
Implementação do modelo de ruído
Para implementar um modelo de ruído, siga estas etapas para gerar um modelo de ruído e incorporar o modelo no HAL da câmera.
Para gerar um modelo de ruído para cada câmera, execute o script
dng_noise_model.py
no diretóriotools
. Isso gera um trecho de código C. Para obter mais informações sobre como configurar a câmera e o ambiente de captura, consulte o documentoDngNoiseModel.pdf
no diretóriotools
.Para implementar o modelo de ruído para o dispositivo, recorte e cole o trecho de código C no HAL da câmera.
Validação do modelo de ruído
O tests/scene1_1/test_dng_noise_model.py
valida o modelo de ruído verificando se os valores de ruído para a exposição e ganho da foto fornecidos nos dados da câmera estão corretos.