Esta página fornece uma lista abrangente dos testes do Conjunto de teste de imagens da câmera (ITS), que faz parte do Verificador do Conjunto de Teste de Compatibilidade do Android (CTS). Os testes ITS são testes funcionais, o que significa que eles não medem a qualidade da imagem, mas que todas as funções da câmera anunciadas estão funcionando conforme o esperado. Este documento permite que desenvolvedores e testadores entendam o que os testes individuais fazem e como depurar falhas de teste.
O Camera ITS controla os testes de acordo com as propriedades da câmera necessárias, o nível da API e
o nível da classe de desempenho de mídia (MPC, na sigla em inglês). Para o nível da API, o ITS usa
ro.product.first_api_level
para bloquear testes adicionados a um nível específico da API que
testam experiências negativas do usuário quanto à funcionalidade em níveis mais baixos da API. O ITS
usa ro.vendor.api_level
para bloquear testes de recursos adicionados a um nível específico
da API que exigem uma nova capacidade de hardware. Se
ro.odm.build.media_performance_class
for definido para um
dispositivo, o ITS vai exigir que testes específicos sejam executados, dependendo do nível de MPC.
Os testes são agrupados por cena da seguinte maneira:
- scene0:capturar metadados, instabilidade, giroscópio, vibração
- scene1:exposição, sensibilidade, compensação de VE, YUV x JPEG/RAW.
- scene2:detecção facial, testes que exigem cenas de cores ou escuridão completa.
- scene3: aprimoramento de borda, movimento de lente
- scene4:proporção, corte, campo de visão
- scene5: sombreamento de lentes
- scene6: aplicar zoom
- scene_extensions:extensões de câmera
- sensor_fusion:ajuste de marcação de tempo da câmera/giroscópio
Consulte as seções individuais para conferir uma descrição de cada cena.
cena 0
Os testes do Scene0 não exigem informações de cena específicas. No entanto, o smartphone precisa estar parado durante o teste de giroscópio e vibração.
captura_de_burst_de_teste
Verifica se todo o pipeline de captura pode acompanhar a velocidade da captura em tamanho total e o tempo de CPU.
APIs testadas:
Aprovado:captura uma sequência de imagens em tamanho original, e a câmera é rápida o suficiente para evitar o tempo limite.
despejo_resultado_da_captura_de_teste
Testa se um resultado de captura é retornado de uma captura manual e, em seguida, o despeja.
APIs testadas:
Aprovado:conclui a captura e despeja os resultados dela.
viés_giros_de_teste
Testa se o giroscópio tem saída estável quando o dispositivo está parado. Os dados são plotados como uma média de 20 pontos de dados.
APIs testadas:
Aprovado:o delta da leitura do giroscópio é menor que 0,01 ao longo do tempo.
test_gyro_bias_plot.png
instabilidade_do_teste
Mede a instabilidade nos carimbos de data/hora da câmera.
APIs testadas:
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP
android.hardware.camera2.CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE
Aprovado:há um delta de pelo menos 30 ms entre os frames.
test_jitter_plot.png (Observe o pequeno intervalo do eixo y. a instabilidade é pequena nesse gráfico.)
metadados_teste
Testa a validade de entradas de metadados. Analisa os resultados da captura e os
objetos de características da câmera. Este teste usa valores de exposição e ganho de auto_capture_request
porque o conteúdo da imagem não é importante.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
android.hardware.camera2.CameraCharacteristics#SCALER_CROPPING_TYPE
android.hardware.camera2.CameraCharacteristics#SENSOR_BLACK_LEVEL_PATTERN
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_TIMESTAMP_SOURCE
android.hardware.camera2.CaptureRequest#SENSOR_FRAME_DURATION
android.hardware.camera2.CaptureResult#SENSOR_ROLLING_SHUTTER_SKEW
Aprovado:o nível do hardware, as tags rollingShutterSkew
, frameDuration
,
timestampSource
, croppingType
, blackLevelPattern
, pixel_pitch
, FoV,
a distância hiperfocal estão presentes e têm valores válidos.
test_param_sensitivity_burst
Testa se o parâmetro android.sensor.sensitivity
é aplicado corretamente no
burst. Inspeciona apenas os metadados de saída.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Aprovado:os dados de saída têm uma tolerância de erro menor que 0,2%.
leitura_teste_gravação
Testa se o dispositivo grava os valores corretos de exposição e ganho lendo os metadados de captura.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_EXPOSURE_TIME_RANGE
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
android.hardware.camera2.CaptureResult#SENSOR_EXPOSURE_TIME
android.hardware.camera2.CaptureResult#SENSOR_SENSITIVITY
Aprovado:leia e grave os valores correspondentes em todas as imagens.
eventos_sensor_teste
Testa se o dispositivo consulta e imprime eventos do sensor para dispositivos que anunciam suporte à fusão do sensor. Os sensores esperados são o acelerômetro, giroscópio e magnetômetro. Esse teste só funciona se a tela estiver ligada, ou seja, o dispositivo não está no modo de espera.
APIs testadas:
Aprovado:os eventos de cada sensor são recebidos.
teste_padrão_de_cor_sólida
Testa se os padrões de teste de cor sólida são gerados corretamente para desativar o som da câmera. Se houver suporte para a desativação do som da câmera, será necessário oferecer compatibilidade com padrões de teste de cores sólidas. Se não houver suporte para a desativação do som da câmera, os padrões de teste de cor sólida só serão testados se o recurso for anunciado.
Se imagens RAW forem compatíveis, a atribuição de cores também será testada. As cores testadas são preto, branco, vermelho, azul e verde. Para câmeras sem suporte a imagens RAW, apenas o preto é testado.
APIs testadas:
android.hardware.camera2.CameraCharacteristic#SENSOR_AVAILABLE_TEST_PATTERN_MODES
android.hardware.camera2.CaptureResult#SENSOR_TEST_PATTERN_DATA
android.hardware.camera2.CaptureResult#SENSOR_TEST_PATTERN_MODE
Aprovado:os padrões sólidos de teste compatíveis têm a cor correta e há baixa variação na imagem.
teste_padrão_de_teste
Testa o parâmetro android.sensor.testPatternMode
para capturar frames para cada
padrão válido e verifica se os frames foram gerados corretamente para cores
sólidas e barras de cores. Esse teste inclui as seguintes etapas:
- Captura imagens para todos os padrões de teste compatíveis.
- Executa uma verificação de correção simples para padrões de teste de cores sólidas e barras de cores.
APIs testadas:
android.hardware.camera2.CameraCharacteristic#SENSOR_AVAILABLE_TEST_PATTERN_MODES
android.hardware.camera2.CaptureResult#SENSOR_TEST_PATTERN_MODE
Aprovado:os padrões de teste com suporte são gerados corretamente.
padrão_de_teste_2.jpg
curva_tonemap_de_teste
Testa a conversão do padrão de teste de RAW para YUV com tonemap linear. Neste teste,
é necessário usar android.sensor.testPatternMode = 2
(COLOR_BARS) para gerar um padrão de imagem
perfeito para a conversão de tons. Garante que o pipeline tenha saídas de cor adequadas
com tonemap linear e entrada de imagem ideal (depende de test_test_patterns
).
APIs testadas:
android.hardware.camera2.CaptureRequest#DISTORTION_CORRECTION_MODE
android.hardware.camera2.CaptureRequest#SENSOR_TEST_PATTERN_MODE
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
Aprovado:o YUV e o RAW são parecidos.
teste_tonemap_curve_raw_2.jpg
teste_tonemap_curve_yuv_2.jpg
test_unified_timestamp
Testa se os eventos de imagem e do sensor de movimento estão no mesmo domínio de tempo.
APIs testadas:
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP
android.hardware.Sensor
android.hardware.SensorEvent
android.hardware.Sensor#TYPE_ACCELEROMETER
android.hardware.Sensor#TYPE_GYROSCOPE
Aprovado:os carimbos de data/hora de movimento ficam entre os dois carimbos de data/hora da imagem.
restrição_vibração_teste
Testa se a vibração do dispositivo está funcionando conforme o esperado.
APIs testadas:
android.hardware.Sensor
android.hardware.SensorEvent
android.hardware.Sensor#TYPE_ACCELEROMETER
android.os.Vibrator
android.hardware.camera2.CameraDevice#setCameraAudioRestriction
Aprovado:o dispositivo não vibra quando o som é desativado pela API de restrição de áudio da câmera.
cena1
cena1 é um gráfico cinza. O gráfico cinza precisa cobrir 30% do centro do campo de visão da câmera. Espera-se que o gráfico cinza desafie os 3A (exposição automática, balanço automático de branco, foco automático) moderadamente, já que a região central não tem atributos. No entanto, a solicitação de captura especifica toda a cena, incluindo recursos suficientes para a convergência de 3A.
As câmeras RFoV podem ser testadas no ambiente WFoV ou no equipamento de teste RFoV. Se uma câmera RFoV for testada no equipamento de teste WFoV, o gráfico será dimensionado em 2⁄3 para garantir alguns limites para o gráfico cinza no campo de visão e ajudar a convergir 3A. Para descrições mais detalhadas dos suportes de teste da câmera, consulte Camera ITS-in-a-box.
cena1: gráfico em tamanho original (à esquerda). Gráfico com escala de 2⁄3 (à direita).
teste_3a
Testa a convergência de 3A com um objetivo moderadamente desafiador.
APIs testadas:
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
Aprovado:3A converge, e os valores de 3A retornados são válidos.
teste_ae_af
Testa individualmente os algoritmos de exposição automática (AE) e foco automático (AF) de 3A.
APIs testadas:
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
Aprovado:3A converge, e os valores de 3A retornados são legais.
teste_ae_precapture_trigger
Testa a máquina de estado AE ao usar o gatilho de pré-captura. Captura cinco solicitações manuais com AE desativado. A última solicitação tem um acionador de pré-captura de AE, que precisa ser ignorado porque o AE está desativado.
APIs testadas:
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
Aprovado:o AE converge.
teste_automático_vs_manual
Os testes que capturam imagens automáticas e manuais têm a mesma aparência.
APIs testadas:
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
android.hardware.camera2.CaptureResult#TONEMAP_CURVE
android.hardware.camera2.CaptureResult#TONEMAP_MODE
Aprovado:ganhos e transformações manuais do balanço de branco informados em cada resultado de captura
correspondem ao balanço automático de branco estimate
do algoritmo 3A da câmera.
test_auto_vs_manual_auto.jpg
test_auto_vs_manual_wb.jpg
test_auto_vs_manual_manual_wb_tm.jpg
teste_preto_branco
Testa se o dispositivo produz imagens em preto e branco completas. Faz duas capturas: a primeira com ganho extremamente baixo e exposição curta, o que resulta em uma foto preta, e a segunda com ganho extremamente alto e exposição longa, o que resulta em uma foto branca.
APIs testadas:
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Aprovado:produz imagens em preto e branco. Os canais saturados de imagens brancas têm valores RGB de [255, 255, 255] com uma margem de erro inferior a 1% de diferença.
teste_preto_branco_preto.jpg | teste_preto_branco_branco.jpg |
test_black_white_plot_means.png
test_burst_sameness_manual
Faz 5 sequências de 50 imagens com configuração de captura manual e verifica se todas são iguais. Esse teste pode ser usado para identificar se há frames esporádicos processados de maneira diferente ou com artefatos.
APIs testadas:
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR
android.hardware.camera2.CameraMetadata#SYNC_MAX_LATENCY_PER_FRAME_CONTROL
Aprovado:as imagens são visualmente idênticas e em valores RGB.
Com falha:mostra um pico ou uma queda no gráfico médio RGB no início de cada burst.
- A tolerância é de 3% para
first_API_level
< 30 - A tolerância é de 2% para
first_API_level
>= 30.
test_burst_sameness_manual_mean.jpg
test_burst_sameness_manual_plot_means.png
resultado_da_captura_de_teste
Testa se os dados válidos são retornados em objetos CaptureResult
. Faz uma captura automática,
manual e automática.
APIs testadas:
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AE_REGIONS
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AF_REGIONS
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AWB_REGIONS
android.hardware.camera2.CaptureRequest#CONTROL_MODE
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
android.hardware.camera2.CaptureResult#STATISTICS_LENS_SHADING_CORRECTION_MAP
android.hardware.camera2.CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
Aprovado:os metadados são válidos para todas as capturas, e as configurações manuais não vazam para a segunda captura automática. Traça a correção de sombreamento da lente para as capturas.
"test_capture_result_plot_lsc_auto_ch0.png"
região_bruto_de_teste
Testa se os streams RAW não podem ser cortados.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
android.hardware.camera2.CaptureResult#SCALER_CROP_REGION
android.hardware.camera2.CaptureRequest#SCALER_CROP_REGION
Aprovado:as imagens YUV são cortadas no centro, mas não as RAW.
test_crop_region_raw_comp_raw_crop.jpg
test_crop_region_raw_comp_raw_full.jpg
região_de_crop_teste_raw_comp_yuv_crop.jpg
test_crop_region_raw_yuv_full.jpg
regiões_de_crop_teste
Testes que funcionam com as regiões de corte. Usa uma imagem completa e cria patches de cinco regiões diferentes (cantos e centro). Extrai imagens com o corte definido para as cinco regiões. Compara o patch e os valores da imagem de corte.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
android.hardware.camera2.CaptureRequest#SCALER_CROP_REGION
Aprovado:a imagem da região cortada corresponde ao patch que corresponde à imagem de corte.
teste_modelo_de_ruído_dng
Verifica se os parâmetros do modelo bruto DNG estão corretos. O gráfico mostra a variância medida de um patch central do cartão cinza em fotos brutas capturadas em um intervalo de sensibilidades e compara esses valores com a variância esperada em cada sensibilidade pelo modelo de ruído DNG na HAL da câmera (com base nos parâmetros O,S retornados nos objetos de resultado da captura). Para mais detalhes sobre o modelo de ruído DNG, faça o download do seguinte documento no Modelo de ruído DNG.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL
android.hardware.camera2.CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
android.hardware.camera2.CaptureResult#SENSOR_NOISE_PROFILE
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Aprovado:os parâmetros do modelo bruto DNG estão corretos. Os valores RGB esperados correspondem aos valores RGB reais medidos.
modelo_de_ruído_dng_teste_plog.png
teste_ev_compensação_avançado
Testa se a compensação de valor de exposição (EV) é aplicada. O teste aumenta a exposição em oito etapas e verifica o brilho medido em relação ao brilho esperado. Os valores esperados são calculados com base no brilho da imagem sem compensação EV aplicada. O valor esperado será saturado se os valores calculados excederem o intervalo real de valores da imagem. O teste vai falhar se os valores esperados e medidos não forem correspondentes ou as imagens forem superexpostas em cinco etapas.
APIs testadas:
android.hardware.camera2.CaptureRequest#CONTROL_AE_EXPOSURE_COMPENSATION
android.hardware.camera2.CaptureRequest#CONTROL_AE_LOCK
android.hardware.camera2.CaptureRequest#CONTROL_AWB_LOCK
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
android.hardware.camera2.CaptureResult#TONEMAP_CURVE
android.hardware.camera2.CaptureResult#TONEMAP_MODE
Aprovado:as imagens mostram um aumento da exposição sem superexposição em cinco etapas.
test_ev_offset_advanced_plot_means.png
teste_básico_ev_compensação
Testa se a compensação de VE é aplicada usando um intervalo criado com
CONTROL_AE_COMPENSATION_STEP
. Oito frames são capturados em cada valor de
compensação.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#CONTROL_AE_COMPENSATION_STEP
android.hardware.camera2.CaptureRequest#CONTROL_AE_EXPOSURE_COMPENSATION
android.hardware.camera2.CaptureRequest#CONTROL_AE_LOCK
android.hardware.camera2.CaptureRequest#CONTROL_AWB_LOCK
android.hardware.camera2.CaptureResult#CONTROL_AE_EXPOSURE_COMPENSATION
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
Aprovado:captura o aumento na luma com o aumento da configuração de compensação de VE, e os oito frames capturados para cada configuração de compensação de VE têm valores de luma estáveis.
teste_ev_compensação_básica.png
exposição_teste
Testa se uma exposição constante é alcançada conforme o ISO e o tempo de exposição variam. Faz uma série de fotos com ISO e tempo de exposição escolhidos para equilibrar uma à outra.
Os resultados precisam ter o mesmo brilho, mas a imagem vai ficar
mais ruído ao longo da sequência. Verifica se os valores médios de pixels de amostra estão próximos uns dos outros. Garante que as imagens não sejam fixadas a 0 ou 1, o que as faria parecer com linhas planas. O teste também pode ser executado com imagens RAW, definindo a sinalização debug
no arquivo de configuração.
APIs testadas:
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Aprovado:as imagens têm o mesmo brilho, mas ficam mais barulhentos com um ISO mais alto. Os planos RGB ficam planos quando o valor de ISO*exposure (link em inglês) permanece constante sobre o espaço de ganho testado.
test_exposure_plot_means.png
test_exposure_mult=1.00.jpg | test_exposure_mult=64.00.jpg |
teste_jpeg
Os testes que converteram imagens YUV e imagens JPEG do dispositivo têm a mesma aparência. O teste usa os 10% centrais da imagem, calcula o valor RGB e verifica se eles correspondem.
APIs testadas:
Aprovado:a diferença média de RGB entre cada imagem é inferior a 3%.
teste_jpeg_fmt=jpg.jpg | test_jpeg=fmt=yuv.jpg |
trava_teste
Testa se as configurações (exposição e ganho) travam o frame certo para câmeras FULL
e
LEVEL_3
. Faz uma série de fotos usando solicitações consecutivas, variando os parâmetros da solicitação de captura entre elas. Verifica se as imagens têm as propriedades esperadas.
APIs testadas:
Aprovado:as imagens [2, 3, 6, 8, 10, 12, 13] aumentaram o ISO ou a exposição e aparecem
com médias RGB mais altas em test_latching_plot_means.png
.
test_latching_i=00.jpg | test_latching_i=01.jpg | test_latching_i=02.jpg | |
test_latching_i=03.jpg | test_latching_i=04.jpg | test_latching_i=05.jpg | |
test_latching_i=06.jpg | test_latching_i=07.jpg | test_latching_i=08.jpg | |
test_latching_i=09.jpg | test_latching_i=10.jpg | test_latching_i=11.jpg | |
test_latching_i=12.jpg |
test_latching_plot_means.png
linearidade_teste
Testa se o processamento do dispositivo pode ser invertido em pixels lineares. Captura uma sequência de fotos com o dispositivo apontado para um alvo uniforme.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
android.hardware.camera2.CaptureRequest#BLACK_LEVEL_LOCK
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
Aprovado:os valores de R, G e B precisam aumentar linearmente com maior sensibilidade.
test_linearity_plot_means.png
test_locked_burst
Testa o bloqueio 3A e o burst YUV (usando a configuração automática). Esse teste foi projetado para ser aprovado
mesmo em dispositivos limitados que não tenham MANUAL_SENSOR
ou PER_FRAME_CONTROLS
.
O teste verifica a consistência da imagem YUV enquanto a verificação de frame rate é realizada no CTS.
APIs testadas:
android.hardware.camera2.CaptureRequest#CONTROL_AE_LOCK
android.hardware.camera2.CaptureRequest#CONTROL_AWB_LOCK
Aprovado:as capturas têm aparência consistente.
test_locked_burst_frame0.jpg
test_locked_burst_frame1.jpg
test_locked_burst_frame2.jpg
correção_de_cor_do_parâmetro_de_teste
Testa se os parâmetros android.colorCorrection.*
são aplicados quando definidos.
Tira fotos com valores de transformação e ganho diferentes e testa se elas têm aparência
correspondentemente diferente. A transformação e os ganhos são escolhidos para tornar a saída cada vez mais vermelha ou azul. Usa um tonemap linear. O mapeamento de tons é uma técnica
usada no processamento de imagens para mapear um conjunto de cores a outro e aproximar a
aparência de imagens de alto intervalo dinâmico em um meio com um alcance dinâmico
mais limitado.
APIs testadas:
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
Aprovado:os valores de R e B são otimizados de acordo com a transformação.
test_param_color_correction_plot_means.png
*O eixo X são as solicitações de captura: 0 = unidade, 1=intensificação de vermelho, 2= aumento de azul
teste_param_cor_correto_correto_req=0.jpg
test_param_color_ dinâmica_req=1.jpg (intensificação de R)
test_param_color_exaction_req=2.jpg (intensificação B)
test_param_exposure_time
Testa se o parâmetro android.sensor.exposureTime
é aplicado.
APIs testadas:
Aprovado:cada imagem é mais clara do que a anterior.
test_param_exposure_time_frame0.jpg
test_param_exposure_time_plot.png
test_param_flash_mode
Testa se o parâmetro android.flash.mode
é aplicado. Define manualmente a
exposição como sendo exibida no lado escuro, para que fique óbvio se o flash foi disparado
ou não, e usa um tonemap linear. Verifica o centro com a imagem do bloco para conferir
se há um grande gradiente criado para conferir se o flash foi disparado.
APIs testadas:
Aprovado:o centro da imagem do bloco tem um gradiente grande, o que significa que o flash foi disparado.
test_param_flash_mode_1.jpg
test_param_flash_mode_1_tile.jpg
test_param_flash_mode_2.jpg
test_param_flash_mode_2_tile.jpg
Redução de ruído no parâmetro de teste
Testa se o parâmetro android.noiseReduction.mode
é aplicado corretamente
quando definido. Captura imagens com a câmera mal iluminada. Usa um alto ganho analógico para
garantir que a imagem capturada tenha ruído. Captura três imagens, para NR desativado, "rápido"
e "alta qualidade". Também captura uma imagem com baixo ganho e NR desativado e usa
a variância como valor de referência. Quanto maior for a relação sinal-ruído (SNR, na sigla em inglês),
melhor será a qualidade da imagem.
APIs testadas:
Aprovado:a SNR varia com diferentes modos de redução de ruído e se comporta de maneira semelhante ao gráfico abaixo.
Gráfico_redução_para_parâmetro_de_teste_SNRs.png
0: DESATIVADO, 1: RÁPIDO, 2: Sede, 3: MÍNIMO , 4: ZSL
test_param_noise_reduction_high_gain_nr=0.jpg
test_param_noise_reduction_high_gain_nr=1.jpg
test_param_noise_reduction_high_gain_nr=2.jpg
test_param_noise_reduction_high_gain_nr=3.jpg
test_param_noise_reduction_low_gain.jpg
test_param_sensitivity
Testa se o parâmetro android.sensor.sensitivity
é aplicado. O teste
aumenta a sensibilidade em cinco etapas com exposição fixa para cada foto.
APIs testadas:
Aprovado:RGB significa que o centro 10% fica mais claro com o aumento da sensibilidade.
test_param_sensitivity_iso=0055.jpg
test_param_sensitivity_iso=1819.jpg
test_param_sensitivity_iso=3583.jpg
test_param_sensitivity_iso=5347.jpg
test_param_sensitivity_iso=7111.jpg
test_param_sensitivity_plot.png
modo_de_sombreamento_do_parâmetro_de teste
Testa se o parâmetro android.shading.mode
é aplicado.
APIs testadas:
android.hardware.camera2.CaptureRequest#SHADING_MODE
android.hardware.camera2.CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE
android.hardware.camera2.CaptureResult#STATISTICS_LENS_SHADING_CORRECTION_MAP
Aprovado:os modos de sombreamento são alternados, e os mapas de sombreamento da lente são modificados conforme esperado.
test_param_shading_mode_ls_maps_mode_0_loop_0.png
test_param_shading_mode_ls_maps_mode_1_loop_0.png
test_param_shading_mode_ls_maps_mode_2_loop_0.png
test_param_tonemap_mode
Testa se o parâmetro android.tonemap.mode é aplicado. Aplica curvas de mapeamento de tons diferentes a cada canal R, G e B e verifica se as imagens de saída foram modificadas conforme o esperado. Esse teste é composto por dois testes: test1 e test2.
APIs testadas:
android.hardware.camera2.CameraMetadata#TONEMAP_MODE_CONTRAST_MODE
android.hardware.camera2.CameraMetadata#TONEMAP_MODE_FAST
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
Aprovado:
- test1: as duas imagens têm um tonemap linear, mas n=1 tem um gradiente mais íngreme. O canal G (verde) é mais claro para a imagem n=1.
- test2: mesmo mapa de tons, mas com comprimentos diferentes. As imagens são iguais.
test_param_tonemap_mode_n=0.jpg | test_param_tonemap_mode_n=1.jpg |
teste_após_intensificação_de_sensitividade_bruta
Verifica após otimização de sensibilidade RAW. Captura um conjunto de imagens RAW e YUV com sensibilidade diferente, publica a combinação de otimização de sensibilidade RAW e verifica se a média do pixel de saída corresponde às configurações da solicitação.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
android.hardware.camera2.CaptureRequest#CONTROL_POST_RAW_SENSITIVITY_BOOST
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Aprovado:as imagens RAW ficam mais escuras com o aumento da intensidade, enquanto as imagens YUV permanecem constantes com brilho.
test_post_raw_sensitivity_boost_raw_s=3583_boost=0100.jpg
test_post_raw_sensitivity_boost_raw_s=1792_boost=0200.jpg
test_post_raw_sensitivity_boost_raw_s=0896_boost=0400.jpg
test_post_raw_sensitivity_boost_raw_s=0448_boost=0800.jpg
test_post_raw_sensitivity_boost_raw_s=0224_boost=1600.jpg
test_post_raw_sensitivity_boost_raw_s=0112_boost=3199.jpg
teste_post_raw_sensitivity_boost_raw_plot_means.png
test_post_raw_sensitivity_boost_yuv_s=0112_boost=3199.jpg
test_post_raw_sensitivity_boost_yuv_s=0448_boost=0800.jpg
test_post_raw_sensitivity_boost_yuv_s=0896_boost=0400.jpg
test_post_raw_sensitivity_boost_yuv_s=1792_boost=0200.jpg
test_post_raw_sensitivity_boost_yuv_s=3585_boost=0100.jpg
test_post_raw_sensitivity_boost_yuv_plot_means.png
test_raw_burst_sensitivity
Captura um conjunto de imagens brutas com ganhos crescentes e mede o ruído. Captura somente dados brutos, em uma sequência.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL
android.hardware.camera2.CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
Aprovado:cada tacada tem mais ruído do que a anterior, já que o ganho aumenta.
Usa a variância da célula de grade de estatísticas centrais.
test_raw_burst_sensitivity_variance.png
teste_bruto_exposição
Captura um conjunto de imagens brutas com tempo de exposição crescente e mede os valores dos pixels.
APIs testadas:
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
Aprovado:aumentar o ISO (ganho) torna os pixels mais sensíveis à luz, então o gráfico se move para a esquerda.
test_raw_exposure_s=55.png
(100 é 1 ms, 101 é 10 ms, 10-1 é 0,1 ms)
test_raw_exposure_s=132.png
test_raw_exposure_s=209.png
test_raw_exposure_s=286.png
test_raw_exposure_s=363.png
test_raw_exposure_s=440.png
test_sensibilidade_bruto
Captura um conjunto de imagens brutas com sensibilidades crescentes e mede o ruído (variância) nos 10% centrais da imagem. Testa se cada tomada tem mais ruído que o anterior.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL
android.hardware.camera2.CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
Aprovado:a variância aumenta a cada tacada.
test_raw_sensitivity_variance.png
teste_redução_de_ruído_do_reprocessamento
Testa se android.noiseReduction.mode
é aplicado para solicitações de reprocessamento.
Captura imagens reprocessadas com a câmera mal iluminada. Usa um alto ganho analógico
para garantir que a imagem de captura tenha ruído. Captura três imagens reprocessadas, para NR
desativado, "rápido" e "alta qualidade". Captura uma imagem reprocessada com baixo ganho e
NR desativado e usa a variância disso como o valor de referência.
APIs testadas:
Aprovação: RÁPIDO >= DESLIGADO, sede >= RÁPIDO, sede >> DESATIVADO
Gráfico SNR x NR_MODE típico
teste_tonemap_sequência
Testa uma sequência de fotos com diferentes curvas de tonemap. Captura três imagens manuais com um tonemap linear. Captura três imagens manuais com o tonemap padrão. Calcula o delta entre cada par de frames consecutivo.
APIs testadas:
Aprovado:há três frames idênticos seguidos por um conjunto diferente de três frames idênticos.
teste_tonemap_sequência_i=0.jpg
teste_tonemap_sequência_i=1.jpg
teste_tonemap_sequência_i=2.jpg
teste_tonemap_sequência_i=3.jpg
teste_tonemap_sequência_i=4.jpg
teste_tonemap_sequência_i=5.jpg
teste_yuv_jpeg_all
Testa se todos os tamanhos e formatos informados para captura de imagem funcionam. Usa uma solicitação
manual com um tonemap linear para que o YUV e o JPEG tenham a mesma aparência quando
convertidos pelo módulo image_processing_utils
. As imagens não são salvas por
padrão, mas podem ser salvas ativando debug_mode
.
APIs testadas:
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
android.graphics.ImageFormat#JPEG
Aprovado:todos os centros de imagens têm uma diferença máxima de RMS (raiz do valor médio quadrado de um sinal) nas imagens convertidas em RGB com 3% da imagem YUV de maior resolução.
teste_yuv_jpeg_all.png
teste_yuv_plus_dng
Testa se os tamanhos e formatos informados para captura de imagem funcionam.
APIs testadas:
Aprovado:o teste é concluído e as imagens solicitadas são retornadas.
teste_yuv_plus_dng.jpg
teste_yuv_plus_jpeg
Testa a captura de um único frame como saídas YUV e JPEG. Usa uma solicitação
manual com um tonemap linear para que o YUV e o JPEG tenham a mesma aparência quando
convertidos pelo módulo image_processing_utils
.
APIs testadas:
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
android.graphics.ImageFormat#JPEG
Aprovado:as imagens YUV e JPEG são semelhantes e têm menos de 1% de diferença em RMS (raiz do valor médio quadrado de um sinal).
teste_yuv_plus_jpg_jpg.jpg | teste_yuv_plus_jpeg_yuv.jpg |
teste_yuv_plus_raw
Testa a captura de um único frame como saídas RAW/RAW10/RAW12 e YUV, se
compatível. Usa uma solicitação
manual com tonemap linear para que os dados brutos e YUV sejam iguais. Compara
os valores RGB do centro de 10% das imagens convertidas em RGB. Registrosandroid.shading.mode
.
APIs testadas:
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
android.hardware.camera2.CaptureRequest#CONTROL_MODE
android.hardware.camera2.CaptureRequest#SHADING_MODE
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
android.hardware.graphics.ImageFormat#RAW10
android.hardware.graphics.ImageFormat#RAW12
Aprovado:as imagens YUV e brutas são semelhantes e têm menos de 3,5% de diferença em RMS (raiz do valor médio quadrado de um sinal).
teste_yuv_plus_raw_shading=1_raw.jpg | teste_yuv_plus_raw_shading=1_yuv.jpg |
cena2_a
cena2_a tem três rostos com fundo cinza e roupas neutras. Os rostos são escolhidos para ter uma ampla gama de tons de pele. O gráfico precisa estar na orientação correta para que a detecção facial funcione de maneira ideal.
cena2_a
teste_automático_flash
Testa se o flash automático é acionado em uma cena escura. Verifica se o flash automático é acionado verificando se o centro da imagem do bloco tem um gradiente grande. Para acionar o flash automático, o tablet e as luzes no equipamento de teste precisam estar desligados. O tablet é desligado pelo teste, e as luzes podem ser apagadas automaticamente com o controle Arduino. A cena precisa estar completamente escura para que o teste funcione corretamente. Assim, a abertura do tablet traseiro precisa estar completamente coberta pelo tablet da cena, e a abertura frontal precisa estar coberta por uma abertura e pelo smartphone DUT para bloquear a entrada de luz difusa no equipamento.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_AVAILABLE
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
android.hardware.camera2.CaptureRequest#FLASH_MODE
Aprovado:o centro da imagem do bloco tem um gradiente grande, o que significa que o flash automático foi disparado.
teste_autoenquadramento
Testa o comportamento do enquadramento automático do dispositivo de câmera. Executa um zoom grande para que nenhum dos rostos na cena fique visível, ativa o modo de enquadramento automático definindo AUTOFRAMING
em CaptureRequest
como True
e verifica se todos os rostos na cena original podem ser detectados quando o estado converge (ou seja, quando AUTOFRAMING_STATE
em CaptureResult
está definido como AUTOFRAMING_STATE_CONVERGED
).
APIs testadas:
android.hardware.camera2.CameraCharacteristics#CONTROL_AUTOFRAMING_AVAILABLE
android.hardware.camera2.CaptureRequest#CONTROL_AUTOFRAMING
android.hardware.camera2.CaptureResult#CONTROL_AUTOFRAMING
android.hardware.camera2.CaptureResult#CONTROL_AUTOFRAMING_STATE
Aprovado:os três rostos são detectados.
tela_teste_p3
Testa a captura do Display P3 em JPEG usando a API ColorSpaceProfiles
. Testa se o JPEG
capturado tem um
perfil ICC
adequado no cabeçalho e se a imagem contém cores fora da gama sRGB.
APIs testadas:
android.hardware.camera2.params.ColorSpaceProfiles
android.hardware.camera2.params.SessionConfiguration#setColorSpace
Aprovado:o JPEG contém um perfil ICC do Display P3 e cores fora da gama sRGB.
efeitos_testes
Captura o frame dos efeitos de câmera com suporte e verifica se eles foram gerados
corretamente. O teste verifica apenas os efeitos OFF
e MONO
, mas salva as imagens para
todos os efeitos com suporte.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#CONTROL_AVAILABLE_EFFECTS
android.hardware.camera2.CaptureRequest#CONTROL_EFFECT_MODE
Aprovado:captura a imagem da cena com os efeitos OFF
e uma imagem monocromática
com efeitos definidos como MONO
.
efeitos_de_teste_MONO.jpg
Combos_formato_de_teste
Testa diferentes combinações de formatos de saída.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP
android.hardware.camera2.params.StreamConfigurationMap#getOutputSizes()
android.hardware.camera2.CameraCaptureSession#captureBurst()
Aprovado:todas as combinações foram capturadas.
qualidade_jpeg_teste
Testa a qualidade da compactação JPEG da câmera. Defina as qualidades de JPEG com
android.jpeg.quality
e garanta que as tabelas de quantização mudem
corretamente.
APIs testadas:
Aprovado:a matriz de quantização diminui com o aumento da qualidade. (A matriz representa o fator de divisão.)
Médias da matriz de luma/chroma DQT da câmera traseira do Pixel 4 em comparação com a qualidade JPEG
Exemplo de teste com falha
Observe que, para imagens de qualidade muito baixa (jpeg.quality < 50), não há aumento de compactação na matriz de quantização.
número_de_rostos_de_teste
Testa a detecção facial.
APIs testadas:
android.hardware.camera2.CaptureResult#STATISTICS_FACES
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Aprovado:encontra três rostos.
teste_num_faces_fd_mode_1.jpg
taxa_mínimo_de_frames da visualização do teste
Testa se o frame rate da visualização diminui corretamente em uma cena escura. Para que esse teste funcione corretamente, as luzes no equipamento de teste precisam ser apagadas pelo controlador ou manualmente pelo operador de teste.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.hardware.camera2.CaptureResult#CONTROL_AE_TARGET_FPS_RANGE
android.media.CamcorderProfile
android.media.MediaRecorder
Aprovado:o frame rate da visualização está no mínimo do intervalo solicitado, e a variação entre os frames é menor que a tolerância absoluta definida no teste.
teste_reprocess_uv_swap
Testes para que o reprocessamento YUV não troque os planos U e V. Isso é detectado pelo cálculo da soma das diferenças absolutas (SAD, na sigla em inglês) entre a imagem reprocessada e uma captura não reprocessada. Se a troca dos planos de saída U e V da captura reprocessada resultar em um aumento do SAD, presume-se que a saída tenha os planos U e V corretos.
APIs testadas:
android.hardware.camera2.CameraDevice#createCaptureSession
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_YUV_REPROCESSING
android.hardware.camera2.CaptureRequest#EDGE_MODE
android.hardware.camera2.CaptureResult#NOISE_REDUCTION_MODE
Aprovado:os aviões U e V não são trocados.
teste_reprocess_uv_swap.png
cena2_b
número_de_rostos_de_teste
Testa a detecção facial com maior diversidade de tons de pele em cenas faciais.
APIs testadas:
android.hardware.camera2.CaptureResult#STATISTICS_FACES
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Aprovado:encontra três rostos.
teste_num_faces_fd_mode_1.jpg
teste_yuv_jpeg_captura_igualdade
Captura duas imagens usando os maiores formatos comuns YUV e JPEG com a mesma
proporção do maior formato JPEG que não excede uma resolução de 1920 x 1440.
Define jpeg.quality
como 100 e captura uma solicitação de superfície dupla. Converte ambas as imagens em matrizes RGB e calcula a diferença do quadrado médio raiz 3D (RMS, na sigla em inglês) entre as duas imagens.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#SCALER_AVAILABLE_STREAM_USE_CASES
android.hardware.camera2.CaptureRequest#JPEG_QUALITY
android.graphics.ImageFormat#JPEG
Aprovado:as imagens YUV e JPEG são semelhantes e têm menos de 1% de diferença em RMS (raiz do valor médio quadrado de um sinal).
cena2_c
número_de_rostos_de_teste
Testa a detecção facial com maior diversidade de tons de pele em cenas faciais.
APIs testadas:
android.hardware.camera2.CaptureResult#STATISTICS_FACES
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Aprovado:encontra três rostos.
teste_num_faces_fd_mode_1.jpg
test_jpeg_capture_perf_class
Testa a latência de captura JPEG para a classe de desempenho S, conforme especificado na seção 2.2.7.2 Câmera do CDD.
Aprovado:PRECISA ter latência de captura JPEG da Camera2 menor que 1.000 ms para resolução de 1080p, conforme medido pelo PerformanceTest da câmera CTS em condições de iluminação ITS (3.000K) para as duas câmeras principais.
test_camera_launch_perf_class
Testa a latência de inicialização da câmera para a classe de desempenho S, conforme especificado na seção 2.2.7.2 Câmera do CDD.
Aprovado:PRECISA ter latência de inicialização da câmera2 (abrir a câmera no primeiro frame de visualização) < 600 ms, conforme medido pelo PerformanceTest da câmera CTS em condições de iluminação ITS (3.000K) para ambas as câmeras principais.
cena2_d
número_de_rostos_de_teste
Testa a detecção facial com maior diversidade de tons de pele em cenas faciais.
APIs testadas:
android.hardware.camera2.CaptureResult#STATISTICS_FACES
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Aprovado:encontra três rostos.
cena2_e
imagem_contínua_do_teste
50 frames de resolução VGA são capturados com a configuração inicial de solicitação de captura.
android.control.afMode = 4 (CONTINUOUS_PICTURE).
APIs testadas:
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
android.hardware.camera2.CaptureResult#CONTROL_AF_STATE
android.hardware.camera2.CaptureResult#CONTROL_AWB_STATE
Aprovado:o sistema 3A é ajustado ao final de uma captura de 50 frames.
número_de_rostos_de_teste
Testa a detecção facial com maior diversidade de tons de pele em cenas faciais.
APIs testadas:
android.hardware.camera2.CaptureResult#STATISTICS_FACES
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Aprovado:encontra três rostos.
cena2_f
cenário2_f tem três rostos com fundo branco e roupas brancas. Os rostos têm uma ampla variedade de tons de pele e alto contraste com o plano de fundo.
cena2_f
número_de_rostos_de_teste
Testa a detecção facial com maior diversidade de tons de pele em cenas faciais.
APIs testadas:
android.hardware.camera2.CaptureResult#STATISTICS_FACES
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Aprovado:encontra três rostos.
teste_num_faces_fd_mode_1.jpg
cena3
O Scene3 usa o gráfico ISO12233, e a maioria dos testes usa um método de extração de gráficos para encontrar o gráfico na cena. Por esse motivo, a maioria das imagens salvas não tem bordas como as imagens das cenas 1, 2 ou 4, mas apenas o gráfico. O gráfico precisa estar na orientação correta para que o localizador de gráficos funcione de maneira ideal.
consistência_teste_3a
Testa a consistência 3A.
APIs testadas:
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
android.hardware.camera2.CaptureRequest#LENS_FOCUS_DISTANCE
android.hardware.camera2.CaptureResult#SENSOR_EXPOSURE_TIME
android.hardware.camera2.CaptureResult#SENSOR_SENSITIVITY
Aprovado:3A converge para exposição, ganho, awb (equilíbrio automático de branco) e fd (distância de foco) três vezes dentro da tolerância.
aprimoramento_da_borda_de_teste
Testa se o parâmetro android.edge.mode
é aplicado corretamente. Captura
imagens sem reprocessamento para cada modo de borda e retorna nitidez da imagem
de saída e dos metadados do resultado da captura. Processa uma solicitação de captura com um determinado
modo de borda, sensibilidade, tempo de exposição, distância do foco e parâmetro de superfície
de saída.
Aprovado:o modo HQ
(2) é mais nítido que o modo OFF
(0). Modo FAST
(1) mais nítido
que o modo OFF
. Modo HQ
mais nítido ou igual ao modo FAST
.
APIs testadas:
Parâmetros da câmera afetados:
EDGE_MODE
test_edge_enhancement_edge=0.jpg
test_edge_enhancement_edge=1.jpg (modo rápido)
test_edge_enhancement_edge=2.jpg (modo de alta qualidade)
espelho_de_virar_teste
Testa se a imagem está orientada corretamente de acordo com a seção 7.5.2 do CDD: câmera frontal [C-1-5].
Imagens espelhadas, invertidas ou giradas podem ser identificadas pelo recurso de diamante próximo ao centro.
Aprovado:a imagem não foi invertida, espelhada nem girada.
test_flip_mirror_scene_patch.jpg
testar_paisagem_para_retrato
Testa se as funções de paisagem para retrato modificam corretamente as funções de sensores orientados a paisagem.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#SCALER_AVAILABLE_ROTATE_AND_CROP_MODES
android.hardware.camera2.CameraCharacteristics#SENSOR_ORIENTATION
android.hardware.camera2.CameraCharacteristics#getCameraCharacteristics
Aprovado:o teste é capaz de localizar um gráfico com a rotação esperada (0 grau quando a substituição de paisagem para retrato está desativada, 90 graus quando ativada).
teste_paisagem_para_portrait.png
test_lens_movement_reporting
Testa se o sinal de movimento da lente é relatado corretamente. Captura uma sequência de 24 imagens, com os primeiros 12 frames na distância de foco ideal (conforme encontrado por 3A) e os últimos 12 frames na distância mínima de foco. Perto do frame 12, a lente se move, fazendo com que a nitidez caia. A nitidez acaba se estabilizando à medida que a lente se move para a posição final. A sinalização de movimento da lente precisa ser declarada em todos os frames em que a nitidez é intermediária em relação à nitidez nos primeiros frames, com a lente estacionária na distância focal ideal, e nos últimos alguns frames em que a lente está estacionária na distância focal mínima. O enquadramento exato em que a lente se move não é importante. O que é verificado é se a sinalização de movimento é declarada quando a lente está se movendo.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE
android.hardware.camera2.CaptureResult#LENS_STATE
android.hardware.camera2.CaptureResult#LENS_FOCUS_DISTANCE
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP
android.hardware.camera2.CaptureRequest#LENS_FOCUS_DISTANCE
Aprovado:o indicador de movimento da lente é True
no enquadramento com mudança de nitidez.
Mecanismos de falha:
lens_moving: True
(android.hardware.camera2.CaptureResult#LENS_STATE
= 1) emtest_log.DEBUG
é declarado apenas em frames em que a nitidez não muda.- Os frames com
lens_moving: False
(android.hardware.camera2.CaptureResult#LENS_STATE
= 0) emtest_log.DEBUG
têm uma diferença de nitidez em comparação com os primeiros frames a uma distância focal ideal ou os últimos frames a uma distância mínima de foco.
teste_reprocessar_borda_aprimorada
Testa se os métodos de reprocessamento com suporte para aprimoramento de borda funcionam corretamente. Processa uma solicitação de captura com um determinado modo de borda de reprocessamento e compara modos diferentes para capturar com os modos de borda de reprocessamento desativados.
APIs testadas:
android.hardware.camera2.CaptureRequest#EDGE_MODE
android.hardware.camera2.CaptureRequest#REPROCESS_EFFECTIVE_EXPOSURE_FACTOR
Aprovado:a nitidez para os diferentes modos de borda está correta. HQ
(modo 2) é
mais nítido que OFF
(modo 0), e a melhoria entre modos diferentes é semelhante.
test_reprocess_edge_enhancement_plot.png
cena4
A Scene4 consiste em um círculo preto sobre um fundo branco dentro de um quadrado.
cena4
proporção_de_aspecto_teste_e_corte
Testa se as imagens ficam distorcidas ou cortadas inesperadamente no pipeline de imagem. Tira fotos de um círculo sobre todos os formatos. Verifica se o círculo não está distorcido, se não se move do centro da imagem e se ele não muda de tamanho incorretamente com diferentes proporções ou resoluções.
APIs testadas:
android.hardware.camera2.CaptureResult#LENS_DISTORTION
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
android.hardware.camera2.CaptureResult#LENS_INTRINSIC_CALIBRATION
Aprovado:as imagens não são esticadas, o centro delas não difere em mais de 3% e o campo de visão (foV) máximo possível é preservado.
Mecanismos de falha:
- A câmera não está alinhada com o círculo mostrado no tablet, no centro da cena capturada.
- O círculo na imagem capturada é distorcido pelo pipeline de processamento.
- A imagem de resolução mais baixa é cortada duas vezes no pipeline da imagem, criando um campo de visão diferente entre imagens de alta e baixa resolução.
- O círculo na imagem capturada é cortado devido a uma solicitação de captura de proporção extrema que reduz a altura ou largura da imagem.
- O círculo na imagem capturada tem um reflexo no centro e não aparece totalmente preenchido.
teste_alinhamento_várias_câmeras
Testa os parâmetros de calibração relacionados ao posicionamento da câmera em sistemas com várias delas. Usando as subcâmeras físicas de várias câmeras, tira uma foto com uma das câmeras físicas. Encontra o centro do círculo. Projeta o centro do círculo nas coordenadas mundiais de cada câmera. Compara a diferença entre os centros dos círculos das câmeras em coordenadas mundiais. Reprojeta a coordenada mundial de volta com as coordenadas de pixel e compara com as originais como uma verificação de validade. Compara os tamanhos dos círculos, verificando se as distâncias focais das câmeras são diferentes.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#getPhysicalCameraIds()
android.hardware.camera2.CameraCharacteristics#LENS_DISTORTION
android.hardware.camera2.CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
android.hardware.camera2.CameraCharacteristics#LENS_INTRINSIC_CALIBRATION
android.hardware.camera2.CameraCharacteristics#LENS_POSE_ROTATION
android.hardware.camera2.CameraCharacteristics#LENS_POSE_TRANSLATION
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
android.hardware.camera2.CaptureRequest#SCALER_CROP_REGION
android.hardware.camera2.CaptureRequest#DISTORTION_CORRECTION_MODE
Aprovado:os centros e os tamanhos dos círculos são os esperados nas imagens projetadas em comparação com as capturadas usando dados de calibração da câmera e distâncias focais.
Mecanismos de falha:
LENS_INTRINSIC_CALIBRATION
,LENS_POSE_TRANSLATION
ouLENS_POSE_ROTATION
são valores de design, e não dados reais de calibração.- O sistema de câmeras não é adequado para a configuração de teste. Por exemplo, testar um sistema de câmera grande e ultra grande angular com o equipamento de teste RFoV. Para ver mais informações, consulte Perguntas frequentes1 sobre a câmera ITS-in-a-box.
proporção_e_corte_da_visualização_do_teste
Semelhante ao teste test_aspect_ratio_and_crop para capturas estáticas, ele verifica os formatos de visualização compatíveis para garantir que os frames não sejam esticados ou cortados incorretamente. Verifica se a proporção do círculo não muda, as imagens cortadas mantêm o círculo no centro do frame e o tamanho do círculo não muda para um formato constante ou com resoluções diferentes (verificação de campo de visão).
APIs testadas:
android.hardware.camera2.CaptureResult#LENS_DISTORTION
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
android.hardware.camera2.CaptureResult#LENS_INTRINSIC_CALIBRATION
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.media.MediaRecorder
android.media.CamcorderProfile
Aprovado:as imagens não são esticadas, o centro delas não difere em mais de 3% e o campo de visão (foV, na sigla em inglês) máximo possível é preservado.
estabilização_da_visualização_teste
Verifica os tamanhos de visualização compatíveis para garantir que o campo de visão seja cortado corretamente.
O teste captura dois vídeos, um com estabilização de visualização ON
e outro
com estabilização de visualização OFF
. Um frame representativo é selecionado em cada vídeo e analisado para garantir que as mudanças de campo de visão nos dois vídeos estejam de acordo com as especificações.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.media.MediaRecorder
android.media.CamcorderProfile
Aprovado:a proporção do círculo permanece constante, a localização central do círculo permanece estável e o tamanho do círculo não muda mais de 20%.
proporção_e_corte_do_aspecto_do_vídeo_teste
Captura vídeos de um círculo dentro de um quadrado em todos os formatos de vídeo. Extrai os frames-chave e verifica se a proporção do círculo não muda, as imagens cortadas mantêm o círculo no centro e o tamanho dele não muda para um formato constante ou com uma resolução diferente (verificação de campo de visão).
APIs testadas:
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.hardware.camera2.CaptureResult#LENS_DISTORTION
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
android.hardware.camera2.CaptureResult#LENS_INTRINSIC_CALIBRATION
android.media.MediaRecorder
android.media.CamcorderProfile
Aprovado:os frames de vídeo não são esticados, o centro dos frames não difere em mais de 3% e o campo de visão (foV, na sigla em inglês) máximo possível é preservado.
cena5
A Scene5 requer uma cena cinza com iluminação uniforme. Isso é feito com um difusor
colocado sobre a lente da câmera. Recomendamos o seguinte difusor:
www.edmundoptics.com/optics/window-diffusers/optical-diffusers/opal-diffusing-glass/46168
.
Para preparar a cena, coloque um difusor na frente da câmera e aponte a câmera para uma fonte de iluminação de aproximadamente 2.000 lux. As imagens capturadas na cena 5 precisam de iluminação difusa sem recursos evidentes. Confira a seguir um exemplo de imagem:
captura da cena 5
Sombreamento_da_lente_de_teste_e_uniformidade_de_cor
Testa se a correção de sombreamento da lente é aplicada corretamente e se a cor de um cenário uniforme monocromático é distribuída de maneira uniforme. Executa esse teste em um frame YUV com 3A automático. O sombreamento da lente é avaliado com base no canal Y. Mede o valor médio y de cada bloco de amostra especificado e determina aprovação ou falha comparando com o valor central y. O teste de uniformidade de cor é avaliado no espaço r/g e b/g.
APIs testadas:
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
Aprovado:no raio especificado da imagem, a variação do valor de r/g e b/g precisa ser menor que 20% para ser aprovado no teste.
cena6
A Scene6 é uma grade de pequenos círculos com um quadrado em um canto para indicar a orientação. Os círculos pequenos são necessários para testar a função de zoom em um intervalo grande.
cena6
zoom_no_sensor_teste
Testa o comportamento do recurso de zoom no sensor da câmera, que produz imagens RAW recortadas.
Com o caso de uso de stream definido como
CROPPED_RAW
,
o teste faz duas capturas no intervalo de zoom: uma imagem RAW de campo de visão completo (FoV) e uma imagem RAW cortada. O teste converte as imagens em matrizes RGB, reduz a imagem RAW recortada em tamanho original para o tamanho informado por SCALER_RAW_CROP_REGION
e calcula a diferença 3D do quadrado médio (RMS, na sigla em inglês) entre as duas imagens.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.hardware.camera2.CameraMetadata#SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
android.hardware.camera2.CaptureResult#SCALER_RAW_CROP_REGION
Aprovado:a diferença do quadrado médio de raiz 3D (RMS, na sigla em inglês) entre a imagem RAW cortada e a imagem RAW completa do campo de visão é menor que 1%.
teste_zoom
Testa o comportamento do zoom da câmera. Faz capturas no intervalo do zoom e verifica se os círculos aumentam à medida que a câmera aumenta o zoom.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
android.hardware.camera2.CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
Aprovado:o tamanho relativo do círculo capturado é preciso em relação à proporção de zoom solicitada para garantir que o zoom da câmera esteja correto.
test_zoom para encontrar o contorno do círculo mais próximo do centro.
teste_baixa_latência_zoom
Testa o comportamento do zoom de baixa latência da câmera. Faz capturas no intervalo de zoom com android.control.settingsOverride = 1 (SETTINGS_OVERRIDE_ZOOM)
e verifica se os círculos nas imagens de saída correspondem às proporções de zoom nos metadados de captura.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#CONTROL_AVAILABLE_SETTINGS_OVERRIDES
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
android.hardware.camera2.CaptureRequest#CONTROL_SETTINGS_OVERRIDE
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
android.hardware.camera2.CaptureResult#CONTROL_SETTINGS_OVERRIDE
Aprovado:o tamanho relativo do círculo capturado é preciso em relação aos metadados de resultado da proporção de zoom.
test_preview_video_zoom_match
Testa se, ao gravar e aplicar zoom, a visualização de vídeo e a saída de vídeo exibem e gravam a mesma saída. Calcula o tamanho do círculo mais próximo do centro em diferentes proporções de zoom e verifica se o tamanho do círculo aumenta conforme a proporção de zoom aumenta.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
android.hardware.camera2.CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
Aprovado:o tamanho relativo do círculo capturado é preciso em relação à proporção de zoom solicitada no vídeo e na visualização.
VGA_640x480_key_frame.png (antes do zoom)
preview_640x480_key_frame.png (antes do zoom)
VGA_640x480_key_frame.png (após o zoom)
preview_640x480_key_frame.png (após o zoom)
cena_extensions
Os testes scene_extensions
são para extensões de câmera e precisam usar o
Camera ITS-in-a-Box,
já que exigem um controle preciso do ambiente de teste.
cena_hdr
A cena scene_hdr
consiste em um retrato à esquerda e um QR code
de baixo contraste à direita.
cena_hdr
teste_extensão_hdr
Testa a extensão HDR. Faz capturas com e sem a extensão ativada e verifica se a extensão torna o QR code mais detectável.
APIs testadas:
android.hardware.camera2.CameraExtensionCharacteristics#getSupportedExtensions
android.hardware.camera2.CameraExtensionSession#capture
Aprovado:a extensão HDR reduz o número de mudanças de contraste necessárias para detectar o QR code ou reduz o gradiente no código.
noite_cena
A cena scene_night
consiste em um círculo branco com quatro círculos
menores dentro dele, todos em um plano de fundo preto. O círculo menor no
canto superior direito é mais escuro que os outros para indicar a orientação.
noite_cena
extensão_noite_teste
Testa a extensão Night. Faz capturas com e sem a extensão ativada e verifica o seguinte:
- A captura com a extensão "Noite" ativada leva mais tempo.
- A captura com a extensão "Noite" ativada é mais clara ou tem artefatos de cena com melhor aparência.
APIs testadas:
android.hardware.camera2.CameraExtensionCharacteristics#getSupportedExtensions
android.hardware.camera2.CameraExtensionSession#capture
Aprovado:em comparação com uma captura sem a extensão Night, uma captura com essa extensão ativada leva pelo menos 0,5 segundo a mais. A captura precisa ser pelo menos 10% mais brilhante, ou os pontos cinzas na cena precisam ter valores de 20 pixels a menos que o centro do círculo ao redor.
fusão_do_sensor
Os testes de fusão de sensores exigem movimentos específicos do smartphone em frente a um padrão
quadrado. Para obter os melhores resultados, certifique-se de que o gráfico de teste esteja bem montado. Gráficos
que não são planos afetam os cálculos de rotação para muitos dos testes.
Os testes sensor_fusion
podem ser automatizados com a
Caixa de fusão do sensor.
Imagem do quadriculado
test_multi_camera_frame_sync
Os testes que mostram carimbos de data/hora de frames capturados pela câmera lógica têm até 10 ms com o cálculo dos ângulos de quadrados dentro do tabuleiro para determinar o carimbo de data/hora.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
android.hardware.camera2.CameraCharacteristics#getPhysicalCameraIds()
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
android.hardware.camera2.params.OutputConfiguration#setPhysicalCameraId()
Aprovado:o ângulo entre as imagens de cada câmera não muda significativamente quando o smartphone é girado.
estabilização_da_visualização_de_teste
Testa que o vídeo de prévia estabilizado gira menos do que o giroscópio.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.media.MediaRecorder
android.media.CamcorderProfile
Aprovado:a rotação máxima do ângulo nos frames é inferior a 70% da rotação do giroscópio.
Confira a seguir exemplos de vídeos com e sem estabilização.
Exemplo de vídeo com estabilização
Vídeo de amostra sem estabilização
fusão do sensor_de_teste
Testa a diferença de carimbo de data/hora entre a câmera e o giroscópio para aplicativos
de RA e RV. O smartphone é girado 90 graus 10 vezes na frente do
padrão de quadriculado. O movimento dura cerca de dois segundos. Esse
teste será ignorado se nenhum giroscópio estiver incluído ou se o parâmetro REALTIME
da origem do carimbo de data/hora
não estiver ativado.
O teste test_sensor_fusion
gera vários gráficos. Os dois gráficos mais
importantes para depuração são:
test_sensor_fusion_gyro_events
: mostra os eventos do giroscópio do smartphone durante o teste. O movimento na direção x e y implica que o smartphone não está montado com segurança no disco de fixação, reduzindo a probabilidade de aprovação do teste. O número de ciclos no gráfico depende da velocidade de gravação para salvar frames.test_sensor_fusion_gyro_events
test_sensor_fusion_plot_rotations
: mostra o alinhamento dos eventos do giroscópio e da câmera. Esse gráfico deve mostrar o movimento correspondente entre a câmera e o giroscópio para +/-1 ms.rotações_de_gráfico_de_fusão_do_sensor_de_teste
APIs testadas:
android.hardware.camera2.CameraCharacteristics#LENS_FACING
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_TIMESTAMP_SOURCE
android.hardware.camera2.CameraMetadata#SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME
android.hardware.camera2.CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE
android.hardware.camera2.CaptureRequest#SENSOR_FRAME_DURATION
android.hardware.camera2.CaptureRequest#SENSOR_TIMESTAMP
android.hardware.camera2.CaptureResult#SENSOR_ROLLING_SHUTTER_SKEW
Aprovado:o deslocamento dos carimbos de data/hora da câmera e do giroscópio é inferior a 1 ms, de acordo com a seção 7.3.9 Sensores de alta fidelidade do C-2-14 (CDD).
Mecanismos de falha:
- Erro de deslocamento: o deslocamento da câmera e do giroscópio não está calibrado corretamente para dentro de +/-1 ms.
- Quedas de frames: o pipeline não é rápido o suficiente para capturar 200 frames consecutivos.
- Erros de soquete:
adb
não pode se conectar de maneira confiável ao DUT por tempo suficiente para executar o teste. - O gráfico não está montado de forma plana. O gráfico
test_sensor_fusion_plot_rotations
tem frames em que o giroscópio e a rotação da câmera variam consideravelmente conforme a câmera gira pelas partes não planas do gráfico. - A câmera não está em um suporte plana. O gráfico
test_sensor_fusion_gyro_events
mostra o movimento nos planos X e Y. Essa falha é mais comum em câmeras frontais, porque a câmera traseira geralmente tem uma saliência elevada para o resto do smartphone, criando uma inclinação ao montar a parte de trás do smartphone no disco de fixação.
estabilização_de_vídeo_teste
Testes que indicam que o vídeo estabilizado gira menos do que o giroscópio.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.media.MediaRecorder
android.media.CamcorderProfile
Aprovado:a rotação máxima do ângulo nos frames é inferior a 60% da rotação do giroscópio.
Confira a seguir exemplos de vídeos com e sem estabilização.
Exemplo de vídeo com estabilização
Vídeo de amostra sem estabilização
snapshot_led_de_teste
Testa se os instantâneos de LED não saturam nem tonalizam a imagem.
Este teste adiciona um controlador de iluminação à caixa de fusão do sensor para
controlar as luzes. Com as luzes definidas como OFF
, o teste faz uma captura com
o modo AUTO_FLASH
definido como ON
. Durante essa captura, o teste executa uma
sequência de pré-captura com o gatilho aePrecapture
definido como START
e define a
intent de captura como Preview
para fazer a captura com flash.
Como a captura tem um ponto de acesso distinto devido ao flash, o teste calcula a média da imagem em flash de toda a captura e verifica se o valor está dentro do intervalo (68, 102). Para verificar se a imagem tem um equilíbrio de branco razoável, o teste calcula as proporções R/G e B/G e verifica se elas estão entre 0,95 e 1,05.
APIs testadas:
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_AVAILABLE
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
android.hardware.camera2.CaptureRequest#FLASH_MODE
Aprovado:as proporções R/G e B/G estão dentro de 0,95 e 1,05. A média da imagem em Flash está dentro do intervalo (68, 102).