Testes ITS da câmera

Esta página oferece uma lista abrangente dos testes do conjunto de teste de imagem da câmera (ITS, na sigla em inglês), que faz parte do Verificador do conjunto de teste de compatibilidade do Android (CTS). Os testes de ITS são funcionais, ou seja, eles não medem a qualidade da imagem, mas verificam se todas as funções anunciadas da câmera 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.

Os testes de ITS da câmera são bloqueados por propriedades de câmera necessárias, nível da API e 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 em um nível específico da API que testa experiências negativas do usuário para a funcionalidade em níveis mais baixos da API. O ITS usa ro.vendor.api_level para bloquear testes de recursos adicionados em um nível de API específico que exigem um novo recurso de hardware. Se ro.odm.build.media_performance_class for definido para um dispositivo, o ITS exigirá que testes específicos sejam executados, dependendo do nível do MPC.

Os testes são agrupados por cena da seguinte maneira:

  • scene0:capture metadados, jitter, giroscópio, vibração.
  • scene1: exposição, sensibilidade, compensação de EV, YUV em comparação com JPEG/RAW
  • scene2:detecção facial, testes que exigem cenas coloridas.
  • scene3: aprimoramento de borda, movimento de lente
  • scene4:proporção, corte e campo de visão
  • scene5:sombreamento da lente
  • scene6:Zoom
  • scene7: interruptor de várias câmeras
  • scene8: medição de regiões AE e AWB
  • scene9:compressão JPEG
  • scene_extensions:extensões de câmera
  • scene_flash:flash automático, frame rate mínimo
  • scene_video:quedas de frame
  • sensor_fusion:compensação de tempo da câmera/do giroscópio
  • feature_combination:combinações de recursos

Consulte as seções individuais para conferir a descrição de cada cena.

scene0

Os testes do Scene0 não exigem informações de cena específicas. No entanto, o smartphone precisa estar parado para o teste de giroscópio e vibração.

test_jitter

Mede a variação nos carimbos de data/hora da câmera.

APIs testadas:

Aprovado:há pelo menos um delta de 30 ms entre os frames.

test_jitter_plot.png

test_jitter_plot.png (Observe o pequeno intervalo do eixo y. O jitter é pequeno nesta representação.)

metadados_teste

Testa a validade das entradas de metadados. Analisa os resultados da captura e os objetos de características da câmera. Este teste usa a exposição auto_capture_request e os valores de ganho porque o conteúdo da imagem não é importante.

APIs testadas:

Pass:nível de hardware, rollingShutterSkew, tags frameDuration, timestampSource, croppingType, blackLevelPattern, pixel_pitch, FoV, distância hiperfocal estão presentes e têm valores válidos.

test_request_capture_match

Testa se o dispositivo grava a exposição e os valores de ganho corretos lendo os metadados de captura.

APIs testadas:

Aprovado:os valores de metadados de solicitação e captura correspondem em todas as fotos.

test_sensor_events

Testa que o dispositivo consulta e imprime eventos de sensor para dispositivos que anunciam suporte à fusão de sensores. Os sensores esperados sã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:

Pass:os eventos de cada sensor são recebidos.

test_solid_color_test_pattern

Testes que padrões de teste de cores sólidas são gerados corretamente para silenciar a câmera. Se o silenciamento da câmera for compatível, os padrões de teste de cores sólidas precisarão ser compatíveis. Se o recurso de silenciamento da câmera não for compatível, os padrões de teste de cores sólidas só serão testados se o recurso for anunciado.

Se as 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 que não oferecem suporte a imagens RAW, apenas o preto é testado.

APIs testadas:

Aprovado:os padrões de teste sólidos 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 de cada padrão de teste válido e verifica se os frames são gerados corretamente para cores sólidas e barras de cores. Este teste inclui as seguintes etapas:

  1. Captura imagens de todos os padrões de teste compatíveis.
  2. Realiza uma verificação de correção simples para o padrão de teste de cor sólida e as barras de cor.

APIs testadas:

Aprovado:os padrões de teste com suporte são gerados corretamente.

test_test_patterns_2

padrão_de_teste_2.jpg

test_tonemap_curve

Testa a conversão do padrão de teste de RAW para YUV com um mapa de tons linear. Esse teste requer android.sensor.testPatternMode = 2 (COLOR_BARS) para gerar um padrão de imagem perfeito para a conversão de tonemap. 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:

Aprovado:o YUV e o RAW são parecidos.

test_tonemap_curve_raw_2

test_tonemap_curve_raw_2.jpg

test_tonemap_curve_yuv_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:

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:

Aprovado:o dispositivo não vibra quando silenciado pela API de restrição de áudio da câmera.

scene1

cena1 é um gráfico cinza. O gráfico cinza precisa cobrir 30% do centro do campo de visão da câmera. O gráfico cinza deve desafiar o 3A (exposição automática, equilíbrio de branco automático, foco automático) moderadamente, já que a região central não tem recursos. No entanto, a solicitação de captura especifica toda a cena, o que inclui recursos suficientes para a 3A convergir.

As câmeras RFoV podem ser testadas no ambiente WFoV ou no equipamento de teste RFoV. Se uma câmera de 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 Câmera ITS-in-a-box.

cena1

cena1: gráfico de tamanho completo (à esquerda). Gráfico com escala de ⅔ (à direita).

test_ae_precapture_trigger

Testa a máquina de estados da AE ao usar o acionador de pré-captura. Captura cinco solicitações manuais com a AE desativada. A última solicitação tem um gatilho de pré-captura de AE, que precisa ser ignorado porque a AE está desativada.

APIs testadas:

Aprovação:a AE converge.

test_auto_vs_manual

Os testes que capturaram fotos automáticas e manuais são iguais.

APIs testadas:

Aprovado:os ganhos e a transformação do balanço de branco manual informados em cada resultado de captura correspondem ao balanço de branco automático estimate do algoritmo 3A da câmera.

test_auto_vs_manual_auto

test_auto_vs_manual_auto.jpg

test_auto_vs_manual_wb

test_auto_vs_manual_wb.jpg

test_auto_vs_manual_manual_wb_tm

test_auto_vs_manual_manual_wb_tm.jpg

test_black_white

Testa se o dispositivo produz imagens em preto e branco. 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:

Aprovação: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 de menos de 1% de diferença.

test_black_white_black test_black_white_black
teste_preto_branco_preto.jpg test_black_white_white.jpg

teste_gráfico_preto_branco_significado

test_black_white_plot_means.png

test_burst_capture

Verifica se todo o pipeline de captura pode acompanhar a velocidade da captura em tamanho total e o tempo de CPU.

APIs testadas:

Pass:captura uma série de imagens em tamanho real, verifica quedas de frames e o brilho da imagem.

test_burst_sameness_manual

Tira 5 sequências de 50 imagens com a configuração de captura manual e verifica se elas são idênticas. Esse teste pode ser usado para identificar se há frames esporádicos que são processados de maneira diferente ou têm artefatos.

APIs testadas:

Aprovado:as imagens são visualmente idênticas e têm valores RGB idênticos.

Falha:mostra um pico ou queda do gráfico de média RGB no início de cada explosão.

  • 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

test_burst_sameness_manual_mean.jpg

test_burst_sameness_manual_plot_means

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:

Pass:os metadados são válidos para todas as capturas, e as configurações manuais não são transmitidas 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

"test_capture_result_plot_lsc_auto_ch0.png"

test_crop_region_raw

Teste se os streams RAW não podem ser descartados.

APIs testadas:

Aprovado:as imagens YUV são cortadas no centro, mas as imagens RAW não são.

região_de_crop_teste_comp_bruto_comp

test_crop_region_raw_comp_raw_crop.jpg

região_de_crop_teste_raw_comp_raw_full

test_crop_region_raw_comp_raw_full.jpg

test_crop_region_raw_comp_yuv_crop

test_crop_region_raw_comp_yuv_crop.jpg

região_de_crop_teste_raw_yuv_full

test_crop_region_raw_yuv_full.jpg

test_crop_regions

Teste se as regiões de corte funcionam. Usa uma imagem completa e cria patches de cinco regiões diferentes (cantos e centro). Tira imagens com o corte definido para as cinco regiões. Compara os valores do patch e da imagem cortada.

APIs testadas:

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 várias sensibilidades e compara esses valores com a variação esperada em cada sensibilidade pelo modelo de ruído DNG no 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 documento a seguir sobre o modelo de ruído DNG.

APIs testadas:

Aprovado:os parâmetros do modelo bruto DNG estão corretos. Os valores RGB esperados correspondem aos valores RGB reais medidos.

test_dng_noise_model_plog

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 comparação com o brilho esperado. Os valores esperados são calculados com base no brilho da imagem sem compensação de EV aplicada, e o valor esperado será saturado se os valores calculados excederem o intervalo real do valor da imagem. O teste falha se os valores esperados e medidos não corresponderem ou se as imagens forem superexpostas em cinco etapas.

APIs testadas:

Aprovado:as imagens mostram o aumento da exposição sem superexposição em cinco etapas.

test_ev_compensation_advanced_plot_means

test_ev_compensation_advanced_plot_means.png

teste_básico_ev_compensação

Testa se a compensação de EV é aplicada usando um intervalo criado com CONTROL_AE_COMPENSATION_STEP. Oito frames são capturados em cada valor de compensação.

APIs testadas:

Pass:captura o aumento da luminância com a configuração de compensação de EV aumentada, e os oito frames capturados para cada configuração de compensação de EV têm valores de luminância estáveis.

test_ev_compensation_basic

test_ev_compensation_basic.png

x_iso_de_exposição_teste

Testa se uma exposição constante é alcançada conforme o ISO e o tempo de exposição variam. Tira uma série de fotos com ISO e tempo de exposição escolhidos para equilibrar uns aos outros. Os resultados precisam ter o mesmo brilho, mas, ao longo da sequência, a imagem precisa ficar mais escura. Verifica se os valores médios dos pixels da amostra estão próximos uns dos outros. Garante que as imagens não sejam limitadas a 0 ou 1 (o que as faria parecer linhas planas). O teste também pode ser executado com imagens RAW definindo a flag debug no arquivo de configuração.

APIs testadas:

Aprovado:as imagens têm o mesmo brilho, mas ficam mais ruidosas com ISO mais alto. Os planos RGB são planos quando o valor de ISO*exposure é constante no espaço de ganho testado.

Mecanismo de falha:

  • Em test_exposure_plot_means.png, conforme os valores do multiplicador de ganho (eixo x) aumentam, os valores médios normalizados do plano RGB (eixo y) começam a se desviar dos valores de multiplicador de ganho baixo.

Gráfico_de_exposição_teste

test_exposure_plot_means.png

test_exposure_mult=1.00 test_exposure_mult=64.00
test_exposure_mult=1.00.jpg test_exposure_mult=64.00.jpg

test_jpeg

Testes que mostram que as imagens YUV convertidas e as imagens JPEG do dispositivo são iguais. O teste pega o centro de 10% da imagem, calcula o valor RGB e verifica se ele é correspondente.

APIs testadas:

Aprovado:a diferença média de RGB entre cada imagem é inferior a 3%.

test_jpeg_fmt=jpg.jpg test_jpeg=fmt=yuv.jpg
teste_jpeg_fmt=jpg.jpg test_jpeg=fmt=yuv.jpg

test_latching

Testes que as configurações (exposição e ganho) travem no frame certo para câmeras FULL e LEVEL_3. Tira uma série de fotos usando solicitações consecutivas, variando os parâmetros de solicitação de captura entre as fotos. Verifica se as imagens têm as propriedades esperadas.

APIs testadas:

Aprovado:as imagens [2, 3, 6, 8, 10, 12, 13] têm ISO ou exposição aumentados e aparecem com médias RGB mais altas no test_latching_plot_means.png.

test_latching_i=00.jpg test_latching_i=01.jpg test_latching_i=02.jpg
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=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=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=09.jpg test_latching_i=10.jpg test_latching_i=11.jpg
test_latching_i=12.jpg
test_latching_i=12.jpg

test_latching_plot_means

test_latching_plot_means.png

test_linearity

Teste se o processamento do dispositivo pode ser invertido para pixels lineares. Captura uma sequência de fotos com o dispositivo apontado para um alvo uniforme.

APIs testadas:

Aprovado:os valores de R, G e B precisam aumentar linearmente com o aumento da sensibilidade.

test_linearity_plot_means

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 têm MANUAL_SENSOR ou PER_FRAME_CONTROLS. O teste verifica a consistência da imagem YUV enquanto a verificação da taxa de frames está no CTS.

APIs testadas:

Aprovado:as capturas parecem consistentes.

test_locked_burst_frame0

test_locked_burst_frame0.jpg

test_locked_burst_frame1

test_locked_burst_frame1.jpg

test_locked_burst_frame2

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 diferentes valores de transformação e ganho e testa se elas parecem diferentes. 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 para outro e aproximar a aparência de imagens de alta faixa dinâmica em um meio com uma faixa dinâmica mais limitada.

APIs testadas:

Aprovação:os valores de R e B aumentam de acordo com a transformação.

test_param_color_correction_plot_means

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

test_param_color_correction_req=0

test_param_color_correction_req=0.jpg

test_param_color_correctness_req=1

test_param_color_correctness_req=1.jpg (R boost)

teste_parâmetro_cor_correto_correto_req=2

test_param_color_correction_req=2.jpg (B boost)

test_param_flash_mode

Testa se o parâmetro android.flash.mode foi aplicado. Define manualmente a exposição para o lado escuro, para que seja óbvio se o flash disparou ou não e usa um mapa de tons linear. Verifica o centro com a imagem do bloco para saber se há um gradiente grande criado para verificar se o flash foi acionado.

APIs testadas:

Pass:o centro da imagem do bloco tem um gradiente grande, o que significa que o flash foi acionado.

test_param_flash_mode_1

test_param_flash_mode_1.jpg

test_param_flash_mode_1_tile

test_param_flash_mode_1_tile.jpg

modo_do_parâmetro_de_teste_2

test_param_flash_mode_2.jpg

test_param_flash_mode_2_tile

test_param_flash_mode_2_tile.jpg

test_param_noise_reduction

Testa se o parâmetro android.noiseReduction.mode é aplicado corretamente quando definido. Captura imagens com a câmera pouco iluminada. Usa um ganho analógico alto 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 ganho baixo e NR desativado e usa a variação dela como a linha de base. Quanto maior o SNR (Signal to Noise Ratio), melhor 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.

test_param_noise_reduction_plot_SNRs

plot_redução_do_parâmetro_de_teste_SNRs.png

0: DES, 1: RÁPIDO, 2: HQ, 3: MIN , 4: ZSL

test_param_noise_reduction_high_gain_nr=0

test_param_noise_reduction_high_gain_nr=0.jpg

test_param_noise_reduction_high_gain_nr=1

test_param_noise_reduction_high_gain_nr=1.jpg

test_param_noise_reduction_high_gain_nr=2

test_param_noise_reduction_high_gain_nr=2.jpg

test_param_noise_reduction_high_gain_nr=3

test_param_noise_reduction_high_gain_nr=3.jpg

test_param_noise_reduction_low_gain

test_param_noise_reduction_low_gain.jpg

modo_para_sombreamento_do_parâmetro de teste

Testa se o parâmetro android.shading.mode foi aplicado.

APIs testadas:

Aprovação:os modos de sombreamento são alternados e os mapas de sombreamento de lente são modificados conforme esperado.

test_param_shading_mode_ls_maps_mode_0_loop_0

test_param_shading_mode_ls_maps_mode_0_loop_0.png

test_param_shading_mode_ls_maps_mode_1_loop_0

test_param_shading_mode_ls_maps_mode_1_loop_0.png

test_param_shading_mode_ls_maps_mode_2_loop_0

test_param_shading_mode_ls_maps_mode_2_loop_0.png

test_param_tonemap_mode

Testa se o parâmetro android.tonemap.mode foi aplicado. Aplica curvas de mapa de tons diferentes a cada canal R, G e B e verifica se as imagens de saída são modificadas conforme o esperado. Esse teste consiste em dois testes, test1 e test2.

APIs testadas:

Pass:

  • test1: ambas as imagens têm um mapa de tons linear, mas n=1 tem um gradiente mais íngreme. O canal G (verde) é mais claro para a imagem n=1.
  • test2: mesmo tonemap, mas comprimento diferente. As imagens são iguais.
test_param_tonemap_mode_n=0.jpg test_param_tonemap_mode_n=1.jpg
test_param_tonemap_mode_n=0.jpg test_param_tonemap_mode_n=1.jpg

teste_após_intensificação_de_sensitividade_bruta

Verifica o aumento da sensibilidade RAW. Captura um conjunto de imagens RAW e YUV com diferentes sensibilidades, publica a combinação de aumento de sensibilidade RAW e verifica se a média do pixel de saída corresponde às configurações da solicitação.

APIs testadas:

Aprovação:as imagens RAW ficam mais escuras à medida que o aumento aumenta, enquanto as imagens YUV permanecem constantes em brilho.

test_post_raw_sensitivity_boost_raw_s=3583_boost=0100

test_post_raw_sensitivity_boost_raw_s=3583_boost=0100.jpg

test_post_raw_sensitivity_boost_raw_s=1792_boost=0200

test_post_raw_sensitivity_boost_raw_s=1792_boost=0200.jpg

test_post_raw_sensitivity_boost_raw_s=0896_boost=0400

test_post_raw_sensitivity_boost_raw_s=0896_boost=0400.jpg

test_post_raw_sensitivity_boost_raw_s=0448_boost=0800

test_post_raw_sensitivity_boost_raw_s=0448_boost=0800.jpg

test_post_raw_sensitivity_boost_raw_s=0224_boost=1600

test_post_raw_sensitivity_boost_raw_s=0224_boost=1600.jpg

test_post_raw_sensitivity_boost_raw_s=0112_boost=3199

test_post_raw_sensitivity_boost_raw_s=0112_boost=3199.jpg

teste_pós_sensitividade_bruto_impulsionar_brutos_meios

teste_post_raw_sensitivity_boost_raw_plot_means.png

test_post_raw_sensitivity_boost_yuv_s=0112_boost=3199

test_post_raw_sensitivity_boost_yuv_s=0112_boost=3199.jpg

test_post_raw_sensitivity_boost_yuv_s=0448_boost=0800

test_post_raw_sensitivity_boost_yuv_s=0448_boost=0800.jpg

test_post_raw_sensitivity_boost_yuv_s=0896_boost=0400

test_post_raw_sensitivity_boost_yuv_s=0896_boost=0400.jpg

test_post_raw_sensitivity_boost_yuv_s=1792_boost=0200

test_post_raw_sensitivity_boost_yuv_s=1792_boost=0200.jpg

test_post_raw_sensitivity_boost_yuv_s=3585_boost=0100

test_post_raw_sensitivity_boost_yuv_s=3585_boost=0100.jpg

test_post_raw_sensitivity_boost_yuv_plot_means

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 apenas o formato bruto, em uma série.

APIs testadas:

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

test_raw_burst_sensitivity_variance.png

test_raw_exposure

Captura um conjunto de imagens brutas com tempo de exposição crescente e mede os valores dos pixels.

APIs testadas:

Pass: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

test_raw_exposure_s=55.png

(10⁰ é 1 ms, 10¹ é 10 ms, 10⁻¹ é 0,1 ms)

test_raw_exposure_s=132

test_raw_exposure_s=132.png

test_raw_exposure_s=209

test_raw_exposure_s=209.png

test_raw_exposure_s=286

test_raw_exposure_s=286.png

test_raw_exposure_s=363

test_raw_exposure_s=363.png

test_raw_exposure_s=440

test_raw_exposure_s=440.png

test_raw_sensitivity

Captura um conjunto de imagens brutas com sensibilidades crescentes e mede o ruído (variância) no centro de 10% da imagem. Testa se cada tomada tem mais ruído que o anterior.

APIs testadas:

Pass:a variação aumenta com cada foto.

test_raw_sensitivity_variance

test_raw_sensitivity_variance.png

test_reprocess_noise_reduction

Testes que android.noiseReduction.mode é aplicado para reprocessar solicitações. Captura imagens reprocessadas com a câmera com pouca iluminação. Usa um ganho analógico alto para garantir que a imagem capturada tenha ruído. Captura três imagens reprocessadas, para NR desativado, "rápido" e "alta qualidade". Captura uma imagem reprocessada com ganho baixo e NR desativado e usa a variação dela como a linha de base.

APIs testadas:

Pass:FAST >= OFF, HQ >= FAST, HQ >> OFF

Gráfico SNR x NR_MODE típico

Gráfico típico de SNR x NR_MODE

test_tonemap_sequence

Testa uma sequência de fotos com curvas de mapa de tons diferentes. Captura três fotos manuais com um mapa de tons linear. Captura três imagens manuais com o tonemap padrão. Computa o delta entre cada par de frames consecutivo.

APIs testadas:

Pass:há três frames idênticos seguidos por um conjunto diferente de três frames idênticos.

test_tonemap_sequence_i=0

test_tonemap_sequence_i=0.jpg

test_tonemap_sequence_i=1

teste_tonemap_sequência_i=1.jpg

test_tonemap_sequence_i=2

test_tonemap_sequence_i=2.jpg

teste_tonemap_sequência_i=3

test_tonemap_sequence_i=3.jpg

test_tonemap_sequence_i=4

test_tonemap_sequence_i=4.jpg

test_tonemap_sequence_i=5

teste_tonemap_sequência_i=5.jpg

test_yuv_jpeg_all

Testa se todos os tamanhos e formatos informados para captura de imagem funcionam. Usa uma solicitação manual com um mapa de tons 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 o debug_mode.

APIs testadas:

Aprovado:todos os centros de imagem têm uma diferença máxima de RMS (valor raiz quadrada da média de um sinal) em imagens convertidas em RGB com 3% da imagem YUV de maior resolução.

teste_yuv_jpeg_all

test_yuv_jpeg_all.png

teste_yuv_plus_dng

Teste se os tamanhos e formatos informados para a captura de imagem funcionam.

APIs testadas:

Aprovado:o teste é concluído e retorna as imagens solicitadas.

teste_yuv_plus_dng

test_yuv_plus_dng.jpg

test_yuv_plus_jpeg

Testa a captura de um único frame como saídas YUV e JPEG. Usa uma solicitação manual com um mapa de tons linear para que o YUV e o JPEG tenham a mesma aparência quando convertidos pelo módulo image_processing_utils.

APIs testadas:

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 test_yuv_plus_jpeg_yuv.jpg
test_yuv_plus_jpg_jpg.jpg teste_yuv_plus_jpeg_yuv.jpg

test_yuv_plus_raw

Testa a captura de um único frame como saídas RAW/RAW10/RAW12 e YUV, se forem compatíveis. Usa uma solicitação manual com um mapa de tons linear, para que o estado bruto e o YUV sejam iguais. Compara os valores RGB de 10% do centro das imagens convertidas em RGB. Registrosandroid.shading.mode.

APIs testadas:

Aprovado:as imagens YUV e brutas são semelhantes e têm menos de 3,5% de diferença de RMS (raiz do valor médio do quadrado de um sinal).

test_yuv_plus_raw_shading=1_raw.jpg test_yuv_plus_raw_shading=1_yuv.jpg
teste_yuv_plus_raw_shading=1_raw.jpg test_yuv_plus_raw_shading=1_yuv.jpg

cena2_a

A cena2_a tem três rostos com um fundo cinza e roupas neutras. Os rostos são escolhidos para ter uma ampla variedade de tons de pele. O gráfico precisa estar na orientação correta para que a detecção facial funcione de maneira ideal.

scene2_a

scene2_a

test_autoframing

Testa o comportamento de enquadramento automático do dispositivo da câmera. Realiza um zoom grande, de modo que nenhuma das faces na cena fique visível, ativa o modo de enquadramento automático definindo AUTOFRAMING em CaptureRequest como True e verifica se todas as faces na cena original podem ser detectadas quando o estado converge (ou seja, quando AUTOFRAMING_STATE em CaptureResult é definido como AUTOFRAMING_STATE_CONVERGED).

APIs testadas:

Aprovado:os três rostos são detectados.

tela_teste_p3

Teste a captura de 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:

Aprovado:o JPEG contém um perfil ICC Display P3 e cores fora da gama sRGB.

efeitos_testes

Captura o frame para efeitos de câmera compatíveis e verifica se eles são gerados corretamente. O teste verifica apenas os efeitos OFF e MONO, mas salva imagens para todos os efeitos com suporte.

APIs testadas:

Pass:captura a imagem da cena com efeitos OFF e uma imagem monocromática com efeitos definidos como MONO.

efeitos_de_teste_MONO

efeitos_de_teste_MONO.jpg

test_format_combos

Testa diferentes combinações de formatos de saída.

APIs testadas:

Aprovado:todas as combinações foram capturadas.

numero_de_testes

Testa a detecção facial.

APIs testadas:

Aprovado:encontra três rostos.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

teste_reprocess_uv_swap

Testa se o reprocessamento YUV não troca os planos U e V. Isso é detectado calculando a 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 U e V de saída da captura reprocessada resultar em um aumento do SAD, presume-se que a saída tenha os planos U e V corretos.

APIs testadas:

Aprovado:os planos U e V não são trocados.

teste_reprocess_uv_swap

test_reprocess_uv_swap.png

cena2_b

test_num_faces

Teste a detecção facial com maior diversidade de tons de pele em cenas de rosto.

APIs testadas:

Aprovado:encontra três rostos.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

test_yuv_jpeg_capture_sameness

Captura duas imagens usando os formatos YUV e JPEG mais comuns com a mesma proporção do formato JPEG mais amplo, sem exceder a resolução de 1920 x 1440. Define jpeg.quality como 100 e captura uma solicitação de duas superfícies. Converte as duas imagens em matrizes RGB e calcula a raiz quadrada média (RMS) 3D entre as duas imagens.

Além disso, esse teste verifica se as saídas YUV de todos os casos de uso de streaming com suporte são razoavelmente semelhantes ao YUV com o caso de uso STILL_CAPTURE.

APIs testadas:

Aprovado:as imagens YUV e JPEG do caso de uso STILL_CAPTURE têm menos de 3% de diferença de RMS (valor raiz quadrada de um sinal). As imagens YUV de todos os casos de uso com suporte têm menos de 10% de diferença de RMS em relação às imagens YUV com o caso de uso STILL_CAPTURE.

scene2_c

test_num_faces

Teste a detecção facial com maior diversidade de tons de pele em cenas de rosto.

APIs testadas:

Aprovado:encontra três rostos.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

test_jpeg_capture_perf_class

Teste a latência de captura de JPEG para a classe de desempenho S, conforme especificado na seção 2.2.7.2 Câmera no CDD.

Aprovado:a latência de captura de JPEG da camera2 precisa ser < 1000ms para resolução 1080p, conforme medido pelo PerformanceTest da câmera CTS em condições de iluminação ITS (3000K) para as duas câmeras principais.

test_camera_launch_perf_class

Teste 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.

Pass:é necessário ter uma latência de inicialização da Camera2 (abrir a câmera para o primeiro frame de visualização) de menos de 600ms, conforme medido pelo PerformanceTest da câmera do CTS sob as condições de iluminação do ITS (3000K) para as duas câmeras principais.

teste_padrão_de_câmera_hdr

Testes que a captura de câmera padrão é Ultra HDR para a classe de desempenho 15, conforme especificado na seção 2.2.7.2 Câmera do CDD.

Aprovado:a captura padrão do pacote da câmera PRECISA ser Ultra HDR em um dispositivo com classe de desempenho 15.

scene2_d

test_num_faces

Teste a detecção facial com maior diversidade de tons de pele em cenas de rosto.

APIs testadas:

Aprovado:encontra três rostos.

scene2_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:

Aprovação:o sistema 3A se estabiliza ao final de uma captura de 50 frames.

test_num_faces

Teste a detecção facial com maior diversidade de tons de pele em cenas de rosto.

APIs testadas:

Aprovado:encontra três rostos.

scene2_f

A cena2_f tem três rostos com um fundo branco e roupas brancas. Os rostos têm uma ampla variedade de tons de pele e alto contraste com o plano de fundo.

scene2_f.png

scene2_f

test_num_faces

Teste a detecção facial com maior diversidade de tons de pele em cenas de rosto.

APIs testadas:

Aprovado:encontra três rostos.

test_num_faces_fd_mode_1

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áfico 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 da melhor forma possível.

test_edge_enhancement

Testa se o parâmetro android.edge.mode foi aplicado corretamente. Captura imagens não reprocessadas para cada modo de borda e retorna a nitidez da imagem de saída e os metadados do resultado da captura. Processa uma solicitação de captura com um determinado modo de borda, sensibilidade, tempo de exposição, distância de foco e parâmetro de superfície de saída.

Pass: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

test_edge_enhancement_edge=0.jpg

test_edge_enhancement_edge=1

test_edge_enhancement_edge=1.jpg (modo rápido)

test_edge_enhancement_edge=2

test_edge_enhancement_edge=2.jpg (modo de alta qualidade)

test_flip_mirror

Testa se a imagem está orientada corretamente conforme a seção 7.5.2 da CDD sobre a câmera frontal [C-1-5].

Imagens espelhadas, invertidas ou giradas podem ser identificadas pelo diamante perto do centro.

Aprovado:a imagem não foi invertida, espelhada nem girada.

test_flip_mirror_scene_patch

test_flip_mirror_scene_patch.jpg

test_imu_drift

Testa se a unidade de medição inercial (IMU) tem saída estável por 30 segundos enquanto o dispositivo está parado e capturando uma visualização de alta definição.

APIs testadas:

Pass:

  • O deslocamento do giroscópio foi inferior a 0,01 rad durante o teste.
  • A variação da leitura do giroscópio é menor que 1E-7 rad2/s2/Hz durante o teste.
  • A deriva do vetor de rotação é menor que 0,01 rad durante o teste.
  • (Ainda não obrigatório) a deriva do giroscópio é menor que 1 grau por segundo.

teste_imu_drift_gyro_drift.png

test_imu_drift_gyro_drift.png

test_imu_drift_rotation_vector_drift.png

drenagem_de_rotação_vetor_de_teste_imu.png

test_landscape_to_portrait

Testa se a substituição de paisagem para retrato funciona corretamente para sensores orientados para paisagem.

APIs testadas:

Pass:o teste consegue localizar um gráfico com a rotação esperada (0 graus quando a substituição de paisagem para retrato está desativada, 90 graus quando ativada).

test_landscape_to_portrait

teste_paisagem_para_portrait.png

test_lens_movement_reporting

Testa se a flag de movimento da lente está sendo informada corretamente. Captura uma série de 24 imagens com os primeiros 12 frames na distância de foco ideal (encontrada pelo 3A) e os últimos 12 frames na distância de foco mínima. 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 à 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 frame exato em que a lente se move não é importante: o que é verificado é se a flag de movimento é acionada quando a lente está em movimento.

APIs testadas:

Aprovado:a flag de movimento da lente é True no frame com mudança de nitidez.

Mecanismos de falha:

  • lens_moving: True (android.hardware.camera2.CaptureResult#LENS_STATE = 1) em test_log.DEBUG é declarado apenas em frames em que a nitidez não está mudando.
  • Os frames com lens_moving: False (android.hardware.camera2.CaptureResult#LENS_STATE = 0) em test_log.DEBUG têm uma diferença de nitidez em comparação com os primeiros frames na distância focal ideal ou os últimos frames na distância de foco mínima.

test_reprocess_edge_enhancement

Testa se os métodos de reprocessamento com suporte para melhoria de borda funcionam corretamente. Processa uma solicitação de captura com um determinado modo de borda de reprocessamento e compara diferentes modos para captura com os modos de borda de reprocessamento desativados.

APIs testadas:

Aprovado:a nitidez dos diferentes modos de borda está correta. HQ (modo 2) é mais nítido do que OFF (modo 0), e a melhoria entre diferentes modos é semelhante.

Gráfico de aprimoramento de borda do teste [test_reprocess_edge]

test_reprocess_edge_enhancement_plot.png

scene4

A cena 4 consiste em um círculo preto em um fundo branco dentro de um quadrado. Os testes na scene4 podem ser sensíveis ao alinhamento. Portanto, a partir da 15, é possível usar check_alignment.py no diretório de ferramentas para ativar uma verificação do DUT e do alinhamento do gráfico.

scene4

scene4

test_30_60fps_preview_fov_match

Testes que vídeos de pré-visualização de 30 QPS e 60 QPS têm o mesmo FoV. O teste captura dois vídeos, um com 30 QPS e outro com 60 QPS. Um frame representativo é selecionado de cada vídeo e analisado para garantir que as mudanças de FoV nos dois vídeos estejam dentro das especificações. Testa se a proporção do círculo permanece constante, se o centro dele permanece estável e o raio do círculo permanece constante.

APIs testadas:

Aprovado:as imagens não são esticadas, o centro delas não difere em mais de 3%, e a mudança de proporção máxima entre vídeos de 30 e 60 QPS não é maior que 7,5%.

Mecanismos de falha:

  • O círculo do vídeo de 30 QPS é significativamente diferente em tamanho do vídeo de 60 QPS.
  • O círculo na imagem capturada é distorcido pelo pipeline de processamento.
  • O círculo na imagem capturada é cortado devido a uma solicitação de captura de proporção extrema, que reduz a altura ou a largura da imagem.
  • O círculo na imagem capturada tem um reflexo no centro e não aparece totalmente preenchido.

proporção_de_aspecto_do_teste_e_corte

Testa se as imagens são distorcidas ou cortadas inesperadamente no pipeline de imagens. Tira fotos de um círculo em todos os formatos. Verifica se o círculo não está distorcido, se não se move do centro da imagem e se não muda de tamanho incorretamente com diferentes proporções ou resoluções.

APIs testadas:

Aprovado:as imagens não estão esticadas, o centro das imagens 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 exibido 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 a largura da imagem.
  • O círculo na imagem capturada tem um reflexo no centro e não parece totalmente preenchido.

test_multi_camera_alignment

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, tire uma foto com uma das câmeras físicas. Encontra o centro do círculo. Projeta o centro do círculo para as coordenadas do mundo de cada câmera. Compara a diferença entre os centros de círculo 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:

Aprovação:os centros e os tamanhos dos círculos são esperados em imagens projetadas em comparação com imagens capturadas usando dados de calibração da câmera e distâncias focais.

Mecanismos de falha:

  • LENS_INTRINSIC_CALIBRATION, LENS_POSE_TRANSLATION ou LENS_POSE_ROTATION são valores de design e não dados de calibração reais.
  • O sistema de câmera não é adequado para a configuração do teste. Por exemplo, testar um sistema de câmera grande e ultra grande angular com o equipamento de teste RFoV. Para mais informações, consulte Perguntas frequentes sobre o ITS-in-a-Box da câmera1.

proporção_e_corte_da_visualização_do_teste

Semelhante ao teste test_aspect_ratio_and_crop para capturas de fotos, esse teste verifica os formatos de visualização aceitos para garantir que os frames de visualização não sejam esticados ou cortados de forma inadequada. Verifica se a proporção do círculo não muda, se as imagens recortadas mantêm o círculo no centro do frame e se 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:

Aprovado:as imagens não estão esticadas, o centro das imagens não difere em mais de 3% e o campo de visão (FoV) máximo possível é preservado.

test_preview_stabilization_fov

Verifica os tamanhos de visualização compatíveis para garantir que o FoV seja cortado adequadamente. 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 de cada vídeo e analisado para garantir que as mudanças de FoV nos dois vídeos estejam dentro da especificação.

APIs testadas:

Aprovado:a proporção do círculo permanece constante, o local central do círculo permanece estável e o tamanho do círculo muda no máximo 20%.

proporção_e_corte_do_aspecto_do_vídeo_teste

Grava 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, se as imagens recortadas mantêm o círculo no centro e se o tamanho do círculo não muda para um formato constante ou com resolução diferente (verificação do campo de visão).

APIs testadas:

Aprovado:os frames de vídeo não estão esticados, o centro dos frames não difere em mais de 3% e o campo de visão (FoV) máximo possível é preservado.

scene5

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 para a cena 5 precisam de iluminação difusa sem características evidentes. Confira um exemplo de imagem:

scene5

captura da cena 5

test_lens_shading_and_color_uniformity

Teste se a correção de sombreamento da lente é aplicada adequadamente e se a cor de uma cena uniforme monocromática é distribuída de maneira uniforme. Realiza esse teste em um frame YUV com 3A automático. A variação de lente é avaliada com base no canal y. Mede o valor médio de y para cada bloco de amostra especificado e determina a aprovação ou reprovação comparando com o valor de y central. O teste de uniformidade de cor é avaliado no espaço r/g e b/g.

APIs testadas:

Aprovado:no raio especificado da imagem, a variação do valor r/g e b/g precisa ser menor que 20% para que o teste seja aprovado.

cena6

A cena 6 é uma grade de círculos pequenos 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 uma grande faixa. Os testes no cenário6 podem ser sensíveis ao alinhamento. Portanto, a partir do 15, é possível usar check_alignment.py no diretório de ferramentas para ativar uma verificação de alinhamento do DUT e do gráfico.

scene6

scene6

test_in_sensor_zoom

Testa o comportamento do recurso de zoom no sensor da câmera, que produz imagens RAW cortadas.

Com o caso de uso de stream definido como CROPPED_RAW, o teste realiza 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 cortada em tamanho real para o tamanho informado por SCALER_RAW_CROP_REGION e calcula a raiz quadrada média (RMS) em 3D entre as duas imagens.

APIs testadas:

Aprovado:a diferença de raiz do erro médio quadrado (RMS, na sigla em inglês) 3D entre a imagem RAW redimensionada e cortada e a imagem RAW de FoV completa é menor que o limite definido no teste.

test_zoom

Testa o comportamento do zoom da câmera. Faz capturas sobre a faixa de zoom e verifica se os círculos ficam maiores à medida que a câmera aumenta o zoom. Para cada formato (YUV, JPEG), a mesma sessão de captura da câmera é usada para convergir a 3A e fazer capturas.

APIs testadas:

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

test_zoom para encontrar o contorno do círculo mais próximo do centro.

test_low_latency_zoom

Testa o comportamento do zoom de baixa latência da câmera. Faz capturas sobre o 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 da captura. A mesma sessão de captura da câmera é usada para convergir 3A e fazer capturas.

APIs testadas:

Aprovado:o tamanho relativo do círculo capturado é preciso em relação aos metadados do resultado da proporção de zoom.

test_preview_video_zoom_match

Testes que, durante a gravação e o zoom, mostram a visualização e a saída do vídeo 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 à medida que a proporção de zoom aumenta.

APIs testadas:

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

VGA_640x480_key_frame.png (antes do zoom)

visualização_640x480_frame_chave.png

preview_640x480_key_frame.png (antes do zoom)

VGA_640x480_key_frame_zoomed.png

VGA_640x480_key_frame.png (após o zoom)

visualização_640x480_key_frame_zoomed.png

preview_640x480_key_frame.png (após o zoom)

test_preview_zoom

Testa se a proporção de zoom de cada frame de visualização corresponde aos metadados de captura correspondentes. O teste usa frames de visualização no intervalo de zoom e encontra o contorno do círculo mais próximo do centro. Em seguida, o teste verifica se o círculo selecionado fica maior e se o centro dele se afasta do centro da imagem à medida que o zoom da câmera aumenta.

APIs testadas:

Aprovado:o tamanho relativo do círculo selecionado é preciso para a proporção de zoom informada do resultado de captura correspondente para todos os frames de visualização. A distância relativa do círculo selecionado em relação ao centro da imagem é precisa para a proporção de zoom informada do resultado de captura correspondente de todos os frames de visualização.

test_zoom

imagens de test_preview_zoom mostrando o círculo selecionado mais próximo do centro

test_session_characteristics_zoom

Testa o intervalo da proporção de zoom para todas as configurações de sessão compatíveis listadas em CameraCharacteristics#INFO_SESSION_CONFIGURATION_QUERY_VERSION. Para cada uma dessas configurações, se CameraDeviceSetup#isSessionConfigurationSupported retornar verdadeiro, o teste verifica se o intervalo de proporção de zoom retornado em CameraDeviceSetup#getSessionCharacteristics pode ser alcançado.

APIs testadas:

Pass:as proporções de zoom mínima e máxima podem ser alcançadas para cada SessionConfiguration com suporte listada em CameraCharacteristics#INFO_SESSION_CONFIGURATION_QUERY_VERSION.

scene7

A cena 7 é um frame retangular dividido em quatro quadrantes iguais, cada um preenchido com uma cor diferente. No centro do retângulo, há um gráfico de borda inclinada para verificar a nitidez. Quatro marcadores ArUco são alinhados com os quatro cantos externos do retângulo para ajudar a obter coordenadas precisas do quadro principal do retângulo em diferentes taxas de zoom.

scene7

cena7

test_multi_camera_switch

Esse teste verifica se, durante a gravação de visualização em diferentes taxas de zoom, a troca entre as lentes ultrawide (UW) e wide (W) resulta em valores RGB semelhantes.

O teste usa diferentes taxas de zoom dentro do intervalo predefinido para realizar uma gravação de visualização dinâmica e identificar o ponto em que a câmera física muda. Esse ponto marca a transição da lente UW para a lente W.

Os frames capturados no ponto de intersecção e antes dele são analisados para exposição automática (AE), balanço de branco automático (AWB) e foco automático (AF).

A verificação AE garante que a mudança de luma esteja dentro do intervalo esperado para imagens de lentes UW e W. A verificação do AWB confirma se as proporções de R/G e B/G estão dentro dos valores limite para as imagens de lente UW e W. A verificação de AF avalia o valor da estimativa de nitidez com base na magnitude média do gradiente entre as imagens das lentes grande-angular e grande-angular de 24 mm.

APIs testadas:

Aprovado:para que o teste seja aprovado, as verificações de AE, AWB e AF precisam ser aprovadas. Confira abaixo os critérios para cada verificação:

  • Verificação de AE: a mudança de luminância entre as imagens das lentes UW e W precisa ser menor que 0,5%.
  • Verificação do AWB: a diferença entre os valores R/G e B/G para as imagens de lentes UW e W precisa ser menor que 0,5%.
  • Verificação de AF: a mudança de nitidez da imagem entre as imagens da lente grande angular e da lente grande angular larga precisa ser menor que 2%.

scene8

O Scene8 é um frame retangular dividido em quatro regiões iguais, cada uma contendo um retrato feito com uma exposição diferente ou sobreposto com um matiz de cor diferente (azul, exposição aumentada, exposição diminuída, amarelo). Quatro marcadores ArUco são alinhados com os quatro cantos externos do retângulo para conseguir coordenadas precisas do frame do retângulo principal.

cena8

cena8

test_ae_awb_regions

Testes que os valores RGB e de luminância são diferentes quando a gravação de visualização é feita em diferentes regiões de exposição automática (AE) e balanço de branco automático (AWB).

O teste grava uma prévia de oito segundos, executando a medição de AE e AWB em cada quadrante por dois segundos cada. Em seguida, o teste extrai um frame da gravação de visualização de cada região e usa os frames extraídos para realizar as seguintes verificações de AE e AWB:

  • Verificação de AE: verifica se o frame que mede a região com menor exposição tem um valor de luma maior de mais de 1% do que o frame que mede a região com maior exposição. Isso verifica se as imagens são iluminadas ao medir uma região escura.
  • Verificação de AWB: verifica se a proporção de vermelho para azul (dos valores RGB médios da imagem) no frame com a região de medição azul é mais de 2% maior do que o frame com a região de medição amarela. Isso verifica se as imagens têm um valor RGB equilibrado ao medir uma região amarela (quente) ou azul (fria).

APIs testadas:

Pass:a AE e a AWB são aprovadas.

scene9

O Scene9 consiste em milhares de círculos coloridos e de tamanho aleatório para criar uma cena com repetição muito baixa para estressar os algoritmos de compactação JPEG.

scene9

scene9

test_jpeg_high_entropy

Testes que a compactação JPEG da câmera funciona no scene9 com alta entropia e o fator de qualidade JPEG definido como 100%. O fator de zoom é aumentado para garantir que a cena exibida no tablet preencha o campo de visão da câmera.

APIs testadas:

Aprovado:o arquivo JPEG é compactado corretamente, gravado e lido do disco.

test_jpeg_quality

Testa a qualidade da compactação JPEG da câmera. A qualidade do JPEG é alterada por android.jpeg.quality e garante que as tabelas de quantização sejam alteradas corretamente.

APIs testadas:

Aprovação:a matriz de quantização diminui com o aumento da qualidade. (A matriz representa o fator de divisão.)

qualidade_jpeg_teste

Médias da matriz de luma/chroma DQT da câmera traseira do Pixel 4 em comparação com a qualidade JPEG

falha em test_jpeg_quality

Exemplo de teste com falha

Para imagens de qualidade muito baixa (jpeg.quality < 50), não há aumento na compactação na matriz de quantização.

scene_video

A cena scene_video é uma cena de vídeo. Ele consiste em quatro círculos coloridos diferentes que se movem para frente e para trás em taxas de frames diferentes em um plano de fundo branco.

scene_video

test_preview_frame_drop

Testa se a taxa de frames da visualização solicitada é mantida com uma cena dinâmica. Esse teste é executado em todas as câmeras expostas a apps de terceiros.

APIs testadas:

Aprovado:a taxa de frames da visualização está no máximo do intervalo de taxa de frames solicitado, e a variação média entre frames consecutivos é menor que a tolerância relativa definida no teste.

scene_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 controle preciso do ambiente de teste. Além disso, todo vazamento de luz precisa ser controlado. Isso pode exigir a cobertura do equipamento de teste, DUT e tablet com um pano e a eliminação de vazamento de luz da tela frontal do DUT.

cena_hdr

A cena scene_hdr consiste em um retrato à esquerda e um código QR de baixo contraste à direita.

scene_hdr

cena_hdr

test_hdr_extension

Testa a extensão HDR. Faz capturas com e sem a extensão ativada e verifica se a extensão torna o código QR mais detectável.

APIs testadas:

Aprovação:a extensão HDR reduz o número de mudanças de contraste necessárias para detectar o código QR ou reduz o gradiente em todo o código QR.

scene_low_light

A cena scene_low_light consiste em uma grade de quadrados de diferentes tons de cinza em um plano de fundo preto, e a grade de quadrados é delimitada por um contorno vermelho. Os quadrados são organizados em uma curva de Hilbert.

scene_low_light

scene_low_light

test_night_extension

Testa a extensão Night. Faz capturas com a extensão ativada e realiza o seguinte:

  • Detecta a presença de 20 quadrados
  • Calcula a luma delimitada por cada quadrado
  • Calcula o valor médio de luminância dos seis primeiros quadrados de acordo com a orientação da grade da curva de Hilbert
  • Calcula a diferença no valor de luma de quadrados consecutivos (por exemplo, quadrado2 - quadrado1) até os quadrados 5 e 6 (quadrado6 - quadrado5) e encontra a média das cinco diferenças calculadas.

APIs testadas:

Aprovado:o valor médio de luminância dos seis primeiros quadrados precisa ser de pelo menos 85, e a diferença média no valor de luminância de quadrados consecutivos até os quadrados 5 e 6 precisa ser de pelo menos 17.

O gráfico de luminância a seguir mostra como é um resultado de teste aprovado.

scene_low_light_night_pass

test_low_light_boost_extension

Testa o modo AE de aumento de pouca luz. Se a Camera2 oferecer suporte ao modo AE de otimização de pouca luz, esse teste vai ser realizado para Camera2. Se a extensão da câmera do modo noturno tiver suporte e a extensão for compatível com o modo AE de pouca luz, esse teste também será realizado para a extensão da câmera do modo noturno. Esse teste define o modo AE como "boost de pouca luz", captura um frame da visualização e realiza o seguinte:

  • Detecta a presença de 20 caixas
  • Calcula a luminância delimitada por cada caixa
  • Calcula o valor médio de luminância dos seis primeiros quadrados de acordo com a orientação da grade da curva de Hilbert
  • Calcula a diferença no valor de luma de quadrados consecutivos (por exemplo, quadrado2 - quadrado1) até os quadrados 5 e 6 (quadrado6 - quadrado5) e encontra a média das cinco diferenças calculadas.

APIs testadas:

Aprovado:o valor médio de luma dos seis primeiros quadrados precisa ser de pelo menos 70, e a diferença média no valor de luma de quadrados consecutivos até os quadrados 5 e 6 precisa ser de pelo menos 17.

cena_flash

Os testes scene_flash exigem uma cena escura na caixa de fusão do sensor.

test_auto_flash

Testes em que o flash automático é acionado em uma cena escura para câmeras traseiras e frontais. Para câmeras frontais, o flash automático usa a tela para iluminar a cena, e não uma unidade de flash física. O teste verifica se o flash automático é acionado, conferindo se o centro da imagem do bloco está mais brilhante com o flash automático ativado. Para acionar o flash automático, as luzes no equipamento de teste precisam ser desligadas. Elas podem ser desligadas automaticamente com o controlador Arduino. A cena precisa estar completamente escura para que o teste funcione corretamente. O app Jetpack Camera (JCA) precisa ser instalado no dispositivo antes do teste. O flash automático para câmeras traseiras depende do estado de AE para ser acionado, mas o flash automático para câmeras frontais não depende de AE e é sempre acionado.

APIs testadas:

Aprovada:o centro da imagem do bloco com o flash automático ativado é mais claro do que a imagem da cena original para todas as câmeras.

test_flash_strength

Teste se o controle de intensidade do flash no modo SINGLE está implementado corretamente.

Verifica se o dispositivo oferece suporte ao controle de intensidade do flash durante o uso da câmera no modo SINGLE. Se sim, a intensidade do flash muda com diferentes níveis de intensidade solicitados. Verifica se o controle de intensidade do flash funciona com diferentes AE_MODES. Por exemplo, se o modo de exposição automática for ON ou OFF, o nível de intensidade do flash vai afetar o brilho. Se o modo for ON_AUTO_FLASH, o nível de intensidade do flash não vai afetar o brilho. Para realizar o teste, as luzes do equipamento de teste precisam ser desligadas. As luzes podem ser desligadas automaticamente com o controlador Arduino. A cena precisa estar completamente escura para que o teste funcione corretamente.

APIs testadas:

Aprovado:

Quando o modo de exposição automática é ON ou OFF, o brilho dos patches de imagem aumenta conforme a intensidade do flash aumenta de sem flash para FLASH_SINGLE_STRENGTH_MAX_LEVEL. Quando o modo de exposição automática é ON_AUTO_FLASH, a diferença no brilho dos patches de imagem está dentro da tolerância, à medida que o nível de intensidade do flash aumenta de nenhum flash para FLASH_SINGLE_STRENGTH_MAX_LEVEL.

snapshot_LED_test

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 do 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 tons 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:

Aprovado:as proporções R/G e B/G estão entre 0,95 e 1,05. A média da imagem em Flash está dentro do intervalo (68, 102).

test_preview_min_frame_rate

Teste se a taxa de frames da visualização diminui corretamente em uma cena escura. Para que esse teste funcione corretamente, as luzes no equipamento de teste precisam ser desligadas pelo controlador ou manualmente pelo operador de teste.

APIs testadas:

Aprovado:a taxa de frames da visualização está no mínimo do intervalo de taxa de frames solicitado, e a variação entre os frames é menor que a tolerância absoluta definida no teste.

test_torch_strength

Testa se o controle de intensidade do flash no modo TORCH foi implementado corretamente.

Verifica se, quando o dispositivo oferece suporte ao controle de intensidade do flash durante o uso da câmera no modo TORCH, a intensidade da lanterna muda com diferentes níveis de intensidade solicitados. Verifica se o controle de intensidade do flash funciona com diferentes AE_MODES. Por exemplo, se o modo de exposição automática for ON ou OFF, o nível de intensidade do flash afeta o brilho. Se o modo for ON_AUTO_FLASH, o nível de intensidade do flash não afetará o brilho. Verifica se a intensidade da lanterna permanece a mesma durante a duração de uma explosão, simulando uma sessão de captura de vídeo. Para realizar o teste, as luzes no equipamento de teste precisam ser desligadas. Elas podem ser desligadas automaticamente com o controlador Arduino. A cena precisa estar completamente escura para que o teste funcione corretamente.

APIs testadas:

Pass:

Quando o modo de exposição automática é ON ou OFF, o brilho dos patches da imagem aumenta conforme a intensidade do flash aumenta de sem flash para FLASH_TORCH_STRENGTH_MAX_LEVEL. Quando o modo de exposição automática é ON_AUTO_FLASH, a diferença no brilho dos blocos de explosão de imagem está dentro da tolerância à medida que o nível de intensidade do flash aumenta de nenhum flash para FLASH_TORCH_STRENGTH_MAX_LEVEL.

sensor_fusion

Os testes de fusão de sensores exigem movimentos específicos do smartphone em frente a um padrão de xadrez e marcadores ArUco. Para melhores resultados, verifique se o gráfico de teste está montado de forma plana. Gráficos que não são planos afetam os cálculos de rotação para muitos dos testes. O gráfico precisa preencher a parte de trás da caixa de fusão de sensores, sendo impresso em 17"x17" (43x43 cm). Os testes sensor_fusion podem ser automatizados com a Sensor Fusion Box.

Gráfico de fusão do sensor

Gráfico de fusão do sensor

Gráfico de fusão do sensor no Rig

Gráfico de fusão do sensor que preenche a parte de trás da caixa de fusão do sensor

test_lens_intrinsic_calibration

Testa se o centro óptico da lente muda de forma intrínseca quando a lente se move devido à estabilização óptica de imagem (OIS). Se houver suporte para amostras intrínsecas da lente, testa se o centro óptico dessas amostras muda quando ela se move devido à estabilização óptica de imagem (OIS, na sigla em inglês).

APIs testadas:

Aprovado:o centro óptico da lente muda em um pixel ou mais. Se as amostras intrínsecas da lente forem compatíveis, os centros ópticos delas mudarão em um pixel ou mais.

test_lens_intrinsic_calibration_example.png

Exemplo de gráfico test_lens_intrinsic_calibration mostrando mudanças de pontos principais em pixels para cada frame

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:

Aprovado:o ângulo entre as imagens de cada câmera não muda significativamente à medida que o smartphone é girado.

distorção_da_visualização_do_teste

Testa se a distorção é corrigida em cada frame de visualização feito em vários níveis de zoom. Para cada frame de visualização, o teste calcula pontos ideais com base em intrínsecos e extrínsecos da câmera. Na imagem de exemplo, os pontos ideais são mostrados em verde, e os pontos reais são mostrados em vermelho. O erro de distorção é calculado com base na raiz do erro médio quadrado (RMS, na sigla em inglês) da distância em pixels entre os pontos reais e ideais. Os destaques em verde e vermelho na imagem são usados para detectar visualmente a área de erro de distorção.

test_preview_distortion_example.jpg

Imagem de tabuleiro de xadrez com pontos ideais em verde e pontos reais em vermelho

APIs testadas:

Aprovado:o erro de distorção normalizado de cada frame de visualização é menor que o limite definido no teste.

test_preview_stabilization

Testa que o vídeo de prévia estabilizado gira menos do que o giroscópio.

APIs testadas:

Aprovado:a rotação máxima do ângulo nos frames é inferior a 70% da rotação do giroscópio.

Confira abaixo exemplos de vídeos com e sem estabilização.

  • Exemplo de vídeo com estabilização

  • Exemplo de vídeo sem estabilização

test_sensor_fusion

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 tabuleiro. O movimento é de cerca de 2 s de ida e volta. 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 na placa de montagem, 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.png

    test_sensor_fusion_gyro_events

  • test_sensor_fusion_plot_rotations: mostra o alinhamento dos eventos do giroscópio e da câmera. O gráfico precisa mostrar o movimento correspondente entre a câmera e o giroscópio para +/-1 ms.

    test_sensor_fusion_plot_rotations.png

    test_sensor_fusion_plot_rotations

APIs testadas:

Pass:o deslocamento dos carimbos de data/hora da câmera e do giroscópio é menor que 1 ms, conforme a seção 7.3.9 do CDD, Sensores de alta fidelidade [C-2-14].

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 consecutivamente.
  • Erros de soquete: adb não consegue se conectar de forma 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 à medida que a câmera gira pelas partes do gráfico que não são planas.
  • A câmera não está montada de forma plana. O gráfico test_sensor_fusion_gyro_events mostra o movimento nos planos X e Y. Esse problema é mais comum em câmeras frontais, já que a câmera traseira geralmente tem uma saliência elevada em relação ao restante do corpo do smartphone, criando uma inclinação ao montar a parte de trás do smartphone na placa de montagem.

estabilização_de_vídeo_teste

Testes que mostram que o vídeo estabilizado gira menos que o giroscópio.

APIs testadas:

Aprovado:a rotação máxima do ângulo em frames é menor que 60% da rotação do giroscópio.

Confira abaixo exemplos de vídeos com e sem estabilização.

  • Exemplo de vídeo com estabilização

  • Exemplo de vídeo sem estabilização

feature_combination

Os testes feature_combination verificam se os recursos funcionam corretamente quando vários recursos da câmera são ativados ao mesmo tempo. Esses testes usam a mesma imagem de tabuleiro de xadrez usada na cena de fusão de sensores.

test_feature_combination

Teste todas as combinações de diferentes transmissões, estabilização de visualização, faixa de FPS de destino, vídeo HDR de 10 bits e Ultra HDR que são compatíveis com o dispositivo da câmera. Esse teste usa muita memória, então recomendamos usar um host com pelo menos 128 GB de RAM.

No Android 15 e versões mais recentes, o arquivo de configuração inclui um campo log_feature_combo_support, que tem como padrão False. Quando o campo log_feature_combo_support é definido como True, o teste executa todas as combinações de recursos com suporte e registra os resultados em um arquivo proto sem falhar no teste. Para testes de conformidade, o campo log_feature_combo_support precisa ser definido como False.

APIs testadas:

Aprovado:para cada combinação de recursos com suporte:

  • A transmissão de visualização é estabilizada se a estabilização de visualização estiver ativada.
  • A taxa de frames da visualização está dentro do AE_TARGET_FPS_RANGE configurado.
  • O espaço de cores do stream de visualização gravado corresponde ao que foi definido.
  • A captura Ultra HDR tem um mapa de ganho válido.