Tests ITS de la caméra

Cette page fournit une liste complète des tests effectués dans le cadre de Camera Image Test Suite (ITS), qui fait partie du vérificateur Android Compatibility Test Suite (CTS). Les tests ITS sont des tests fonctionnels, ce qui signifie qu'ils ne mesurent pas la qualité de l'image, mais que toutes les fonctions annoncées de la caméra fonctionnent comme prévu. Ce document permet aux développeurs et aux testeurs de comprendre ce que font les tests individuels et comment déboguer les échecs des tests.

Tests des portes ITS de la caméra en fonction des propriétés de caméra requises, du niveau d'API et du niveau de classe de performances multimédia (MPC). Au niveau de l'API, ITS utilise ro.product.first_api_level pour valider les tests ajoutés à un niveau d'API spécifique qui testent les expériences utilisateur négatives pour les fonctionnalités des niveaux d'API inférieurs. ITS utilise ro.vendor.api_level pour effectuer des tests sur les fonctionnalités ajoutées à un niveau d'API spécifique qui nécessitent une nouvelle capacité matérielle. Si ro.odm.build.media_performance_class est défini pour un appareil, ITS nécessite l'exécution de tests spécifiques en fonction du niveau MPC.

Les tests sont regroupés par scène comme suit :

  • scene0 : Capturer les métadonnées, la gigue, le gyroscope, les vibrations
  • scène1 : exposition, sensibilité, compensation EV, YUV vs JPEG/RAW
  • scene2 : Détection de visage, tests nécessitant des scènes couleur ou obscurité totale
  • scène3 : amélioration des contours, mouvement de l'objectif
  • scène4 : rapport hauteur/largeur, recadrage, champ de vision
  • scène5 : Ombrage de l'objectif
  • scène6 : Zoom
  • sensor_fusion : décalage de synchronisation caméra/gyroscope

Voir les sections individuelles pour une description de chaque scène.

scène0

Les tests Scene0 ne nécessitent aucune information spécifique sur la scène. Cependant, le téléphone doit être immobile pour les tests de gyroscope et de vibration.

test_burst_capture

Vérifie que l’ensemble du pipeline de capture peut suivre la vitesse de capture en taille réelle et le temps CPU.

API testées :

Pass : capture une rafale d'images en taille réelle et l'appareil photo est suffisamment rapide pour éviter le délai d'attente.

test_capture_result_dump

Teste qu'un résultat de capture est renvoyé par une capture manuelle, puis le vide.

API testées :

Réussite : termine la capture et vide les résultats de la capture.

test_gyro_bias

Teste si le gyroscope a une sortie stable lorsque l'appareil est à l'arrêt. Les données sont tracées sous la forme d'une moyenne de 20 points de données.

API testées :

Réussite : le delta de la lecture du gyroscope est inférieur à 0,01 au fil du temps.

test_gyro_bias_plot.png

test_gyro_bias_plot.png

test_jitter

Mesure la gigue dans les horodatages de la caméra.

API testées :

Réussite : il y a au moins un delta de 30 ms entre les images.

test_jitter_plot.png

test_jitter_plot.png (Notez la petite plage de l'axe y. La gigue est en fait faible dans ce tracé.)

test_métadonnées

Teste la validité des entrées de métadonnées. Examine les résultats de la capture et les caractéristiques des objets de la caméra. Ce test utilise les valeurs d'exposition et de gain auto_capture_request car le contenu de l'image n'est pas important.

API testées :

Réussi : le niveau matériel, les balises rollingShutterSkew , frameDuration , timestampSource , croppingType , blackLevelPattern , pixel_pitch , FOV, la distance hyperfocale sont présents et ont des valeurs valides.

test_param_sensitivity_burst

Teste que le paramètre android.sensor.sensitivity est appliqué correctement en rafale. Inspecte uniquement les métadonnées de sortie.

API testées :

Réussite : les données de sortie ont une tolérance d'erreur inférieure à 0,2 %.

test_read_write

Teste que l’appareil écrit les valeurs d’exposition et de gain correctes en relisant les métadonnées de capture.

API testées :

Réussite : les valeurs de lecture et d'écriture correspondent sur toutes les prises de vue.

test_sensor_events

Teste que l’appareil interroge et imprime les événements de capteur pour les appareils qui annoncent la prise en charge de la fusion de capteurs. Les capteurs attendus sont l'accéléromètre, le gyroscope et le magnétomètre. Ce test ne fonctionne que si l'écran est allumé, ce qui signifie que l'appareil n'est pas en mode veille.

API testées :

Réussite : les événements pour chaque capteur sont reçus.

test_solid_color_test_pattern

Teste que les mires de test de couleur unie sont générées correctement pour la mise en sourdine de la caméra. Si la mise en sourdine de la caméra est prise en charge, les mires de test de couleur unie doivent être prises en charge. Si la mise en sourdine de la caméra n'est pas prise en charge, les mires de test de couleur unie ne sont testées que si la fonctionnalité est annoncée.

Si les images RAW sont prises en charge, l'attribution des couleurs est également testée. Les couleurs testées sont le noir, le blanc, le rouge, le bleu et le vert. Pour les appareils photo qui ne prennent pas en charge les images RAW, seul le noir est testé.

API testées :

Réussite : les motifs de test solides pris en charge sont de la bonne couleur et il existe une faible variance dans l'image.

test_test_pattern

Teste le paramètre android.sensor.testPatternMode pour capturer des images pour chaque modèle de test valide et vérifie que les images sont générées correctement pour les couleurs unies et les barres de couleurs. Ce test comprend les étapes suivantes :

  1. Capture des images pour tous les modèles de test pris en charge.
  2. Effectue une vérification simple de l’exactitude du motif de test de couleur unie et des barres de couleur.

API testées :

Réussite : les modèles de test pris en charge sont générés correctement.

test_test_patterns_2

test_test_patterns_2.jpg

test_tonemap_curve

Teste la conversion du motif de test de RAW en YUV avec une carte de tons linéaire. Ce test nécessite android.sensor.testPatternMode = 2 (COLOR_BARS) pour générer un modèle d'image parfait pour la conversion de la carte tonale. Garantit que le pipeline a des sorties de couleurs appropriées avec une carte de tons linéaire et une entrée d'image idéale (s'appuie sur test_test_patterns ).

API testées :

Pass : Le YUV et le RAW se ressemblent.

test_tonemap_curve_raw_2

test_tonemap_curve_raw_2.jpg

test_tonemap_curve_yuv_2.jpg

test_tonemap_curve_yuv_2.jpg

test_unified_timestamp

Teste si les événements du capteur d’image et de mouvement se situent dans le même domaine temporel.

API testées :

Pass : les horodatages de mouvement se situent entre les deux horodatages d'image.

test_vibration_restriction

Teste si la vibration de l'appareil fonctionne comme prévu.

API testées :

Pass : l'appareil ne vibre pas lorsqu'il est mis en sourdine par l'API de restriction audio de la caméra.

scène 1

scene1 est un graphique gris. La carte grise doit couvrir les 30 % centraux du champ de vision de la caméra. La carte grise devrait défier modérément le 3A (exposition automatique, balance des blancs automatique, mise au point automatique) car la région centrale n'a aucune fonctionnalité. Cependant, la demande de capture spécifie la scène entière qui comprend suffisamment de fonctionnalités pour que 3A converge.

Les caméras RFoV peuvent être testées dans le WFoV ou le banc de test RFoV. Si une caméra RFoV est testée sur le banc d'essai WFoV, le graphique est mis à l'échelle de ⅔ pour garantir certaines limites pour le graphique gris dans le FoV afin d'aider 3A à converger.

scène 1

scène1 : graphique en taille réelle (à gauche). Graphique à l'échelle ⅔ (à droite).

test_3a

Teste la convergence de 3A avec une cible moyennement difficile.

API testées :

Réussite : 3A converge et les valeurs 3A renvoyées sont valides.

test_ae_af

Teste les algorithmes d’exposition automatique (AE) et de mise au point automatique (AF) 3A individuellement.

API testées :

Réussite : 3A converge et les valeurs 3A renvoyées sont légales.

test_ae_precapture_trigger

Teste la machine à états AE lors de l’utilisation du déclencheur de précapture. Capture cinq requêtes manuelles avec AE désactivé. La dernière requête comporte un déclencheur de précapture AE, qui doit être ignoré car AE est désactivé.

API testées :

Passe : AE converge.

test_auto_vs_manual

Les tests qui ont capturé des prises de vue automatiques et manuelles se ressemblent.

API testées :

Réussite : les gains et la transformation manuels de la balance des blancs signalés dans chaque résultat de capture correspondent à l' estimate automatique de la balance des blancs de l'algorithme 3A de l'appareil photo.

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_noir_blanc

Teste que l’appareil produit des images entièrement en noir et blanc. Prend deux captures, la première avec un gain extrêmement faible et une exposition courte, ce qui donne une photo noire, et la seconde avec un gain extrêmement élevé et une exposition longue, ce qui donne une photo blanche.

API testées :

Pass : produit des images en noir et blanc. Les canaux saturés d'images blanches ont des valeurs RVB de [255, 255, 255] avec une marge d'erreur inférieure à 1 % de différence.

test_noir_blanc_noirtest_noir_blanc_noir
test_black_white_black.jpg test_black_white_white.jpg

test_black_white_plot_means

test_black_white_plot_means.png

test_burst_sameness_manual

Prend 5 rafales de 50 images avec réglage de capture manuel et vérifie qu'elles sont toutes identiques. Ce test peut être utilisé pour identifier si certaines images sporadiques sont traitées différemment ou comportent des artefacts.

API testées :

Réussite : les images sont identiques visuellement et en valeurs RVB.

Échec : affiche un pic ou une baisse du graphique moyen RVB au début de chaque rafale.

  • La tolérance est de 3 % pour first_API_level < 30
  • La tolérance est de 2 % pour 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

test_capture_result

Teste que des données valides reviennent dans les objets CaptureResult . Effectue une capture automatique, manuelle et automatique.

API testées :

Réussite : les métadonnées sont valables pour toutes les captures et les paramètres manuels ne s'infiltrent pas dans la deuxième capture automatique. Trace la correction de l'ombrage de l'objectif pour les captures.

test_capture_result_plot_lsc_auto_ch0

test_capture_result_plot_lsc_auto_ch0.png

test_crop_region_raw

Teste que les flux RAW ne peuvent pas être recadrés.

API testées :

Réussite : les images YUV sont rognées au centre mais pas les images RAW.

test_crop_region_raw_comp_raw_crop

test_crop_region_raw_comp_raw_crop.jpg

test_crop_region_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

test_crop_region_raw_yuv_full

test_crop_region_raw_yuv_full.jpg

test_crop_regions

Teste le fonctionnement des régions cadrées. Prend une image complète et crée des patchs de 5 régions différentes (coins et centre). Prend des images avec un recadrage défini pour les 5 régions. Compare les valeurs du patch et de l'image de recadrage.

API testées :

Passer : l'image de la région recadrée correspond au patch qui correspond à l'image recadrée.

test_dng_noise_model

Vérifie que les paramètres du modèle brut DNG sont corrects. Le tracé représente la variance mesurée d'un patch central de la carte grise dans des images brutes capturées sur une plage de sensibilités, et compare ces valeurs avec la variance attendue à chaque sensibilité par le modèle de bruit DNG dans la caméra HAL (basé sur le Paramètres O,S renvoyés dans les objets de résultat de capture). Pour plus de détails sur le modèle de bruit DNG, téléchargez le document suivant sur le modèle de bruit DNG .

API testées :

Réussite : les paramètres bruts du modèle DNG sont corrects. Les valeurs RVB attendues correspondent à celles des valeurs RVB réelles mesurées.

test_dng_noise_model_plog

test_dng_noise_model_plog.png

test_ev_compensation_advanced

Teste que la compensation de la valeur d’exposition (EV) est appliquée. Le test augmente l'exposition en huit étapes et vérifie la luminosité mesurée par rapport à la luminosité attendue. Les valeurs attendues sont calculées à partir de la luminosité de l'image sans aucune compensation EV appliquée et la valeur attendue saturera si les valeurs calculées dépassent la plage de valeurs réelles de l'image. Le test échoue si les valeurs attendues et les valeurs mesurées ne correspondent pas ou si les images sont surexposées en cinq étapes.

API testées :

Réussite : les images montrent une exposition croissante sans surexposition en cinq étapes.

test_ev_compensation_advanced_plot_means

test_ev_compensation_advanced_plot_means.png

test_ev_compensation_basic

Teste que la compensation EV est appliquée à l'aide d'une plage créée avec CONTROL_AE_COMPENSATION_STEP . Huit images sont capturées à chaque valeur de compensation.

API testées :

Pass : capture une augmentation de la luminance avec un paramètre de compensation EV accru, et les huit images capturées pour chaque paramètre de compensation EV ont des valeurs de luminance stables.

test_ev_compensation_basic

test_ev_compensation_basic.png

test_exposition

Teste qu'une exposition constante est obtenue lorsque l'ISO et le temps d'exposition varient. Prend une série de photos dont l'ISO et le temps d'exposition sont choisis pour s'équilibrer. Les résultats doivent avoir la même luminosité, mais au fil de la séquence, l'image doit devenir plus bruyante. Vérifie que les valeurs moyennes des pixels de l’échantillon sont proches les unes des autres. Garantit que les images ne sont pas limitées à 0 ou 1 (ce qui les ferait ressembler à des lignes plates). Le test peut également être exécuté avec des images RAW en définissant l'indicateur debug dans votre fichier de configuration.

API testées :

Réussite : les images ont la même luminosité, mais deviennent plus bruyantes avec un ISO plus élevé. Les plans RVB sont plats lorsque la valeur de l'exposition ISO* est constante sur l'espace de gain testé.

test_exposure_plot_means

test_exposure_plot_means.png

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

test_jpeg

Les tests qui convertissent les images YUV et les images JPEG de l'appareil se ressemblent. Le test prend les 10 % centraux de l'image, calcule la valeur RVB et vérifie qu'elles correspondent.

API testées :

Réussite : La différence RVB moyenne entre chaque image est inférieure à 3 %.

test_jpeg_fmt=jpg.jpgtest_jpeg=fmt=yuv.jpg
test_jpeg_fmt=jpg.jpg test_jpeg=fmt=yuv.jpg

test_latching

Teste que les paramètres (exposition et gain) se verrouillent sur le cadre droit pour les caméras FULL et LEVEL_3 . Prend une série de prises de vue en utilisant des requêtes consécutives, en faisant varier les paramètres de demande de capture entre les prises. Vérifie que les images ont les propriétés attendues.

API testées :

Réussite : les images [2, 3, 6, 8, 10, 12, 13] ont une sensibilité ISO ou une exposition accrue et s'affichent avec des moyennes RVB plus élevées sur test_latching_plot_means.png .

test_latching_i=00.jpgtest_latching_i=01.jpgtest_latching_i=02.jpg
test_latching_i=00.jpg test_latching_i=01.jpg test_latching_i=02.jpg
test_latching_i=03.jpgtest_latching_i=04.jpgtest_latching_i=05.jpg
test_latching_i=03.jpg test_latching_i=04.jpg test_latching_i=05.jpg
test_latching_i=06.jpgtest_latching_i=07.jpgtest_latching_i=08.jpg
test_latching_i=06.jpg test_latching_i=07.jpg test_latching_i=08.jpg
test_latching_i=09.jpgtest_latching_i=10.jpgtest_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_linéarité

Teste que le traitement du périphérique peut être inversé en pixels linéaires. Capture une séquence de tirs avec l'appareil pointé vers une cible uniforme.

API testées :

Réussite : les valeurs R, G, B doivent augmenter linéairement avec une sensibilité accrue.

test_linearity_plot_means

test_linearity_plot_means.png

test_locked_burst

Teste le verrouillage 3A et la rafale YUV (en utilisant le réglage automatique). Ce test est conçu pour réussir même sur des appareils limités qui ne disposent pas MANUAL_SENSOR ou PER_FRAME_CONTROLS . Le test vérifie la cohérence de l'image YUV tandis que la vérification de la fréquence d'images est en CTS.

API testées :

Passe : les captures semblent cohérentes.

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

test_param_color_correction

Teste que les paramètres android.colorCorrection.* sont appliqués lorsqu’ils sont définis. Prend des photos avec différentes valeurs de transformation et de gain, et vérifie qu'elles sont différentes en conséquence. La transformation et les gains sont choisis pour rendre la sortie de plus en plus rouge ou bleue. Utilise une carte de tons linéaire. Le mappage de tons est une technique utilisée dans le traitement d'image pour mapper un ensemble de couleurs sur un autre afin de se rapprocher de l'apparence d'images à plage dynamique élevée dans un support ayant une plage dynamique plus limitée.

API testées :

Réussite : les valeurs R et B augmentent en fonction de la transformation.

test_param_color_correction_plot_means

test_param_color_correction_plot_means.png

*L'axe des X représente les demandes de capture : 0 = unité, 1 = boost rouge, 2 = boost bleu

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 (boost R)

test_param_color_correction_req=2

test_param_color_correction_req=2.jpg (boost B)

test_param_exposure_time

Teste que le paramètre android.sensor.exposureTime est appliqué.

API testées :

Passe : chaque plan est plus lumineux que le plan précédent.

test_param_exposure_time_frame0

test_param_exposure_time_frame0.jpg

test_param_exposure_time_plot

test_param_exposure_time_plot.png

test_param_flash_mode

Teste que le paramètre android.flash.mode est appliqué. Définit manuellement l'exposition sur le côté sombre, de sorte qu'il soit évident si le flash s'est déclenché ou non, et utilise une carte de tons linéaire. Vérifie le centre avec l'image de la mosaïque pour voir si un grand dégradé est créé pour vérifier si le flash s'est déclenché.

API testées :

Réussite : le centre de l'image de la tuile présente un grand dégradé, ce qui signifie que le flash s'est déclenché.

test_param_flash_mode_1

test_param_flash_mode_1.jpg

test_param_flash_mode_1_tile

test_param_flash_mode_1_tile.jpg

test_param_flash_mode_2

test_param_flash_mode_2.jpg

test_param_flash_mode_2_tile

test_param_flash_mode_2_tile.jpg

test_param_noise_reduction

Teste que le paramètre android.noiseReduction.mode est appliqué correctement lorsqu’il est défini. Capture des images avec l’appareil photo faiblement éclairé. Utilise un gain analogique élevé pour garantir que l'image capturée est bruitée. Capture trois images, pour NR désactivé, « rapide » et « haute qualité ». Capture également une image avec un faible gain et une réduction du bruit désactivée, et utilise la variance de celle-ci comme référence. Plus le SNR (rapport signal/bruit) est élevé, meilleure est la qualité de l’image.

API testées :

Réussite : le SNR varie selon les différents modes de réduction du bruit et se comporte de la même manière que le graphique ci-dessous.

test_param_noise_reduction_plot_SNRs

test_param_noise_reduction_plot_SNRs.png

0 : OFF, 1 : RAPIDE, 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

test_param_sensibilité

Teste que le paramètre android.sensor.sensitivity est appliqué. Le test augmente la sensibilité en 5 étapes avec une exposition fixe pour chaque prise de vue.

API testées :

Pass : RVB signifie que le centre de 10 % devient plus lumineux avec une sensibilité accrue.

test_param_sensitivity_iso=0055

test_param_sensitivity_iso=0055.jpg

test_param_sensitivity_iso=1819

test_param_sensitivity_iso=1819.jpg

test_param_sensitivity_iso=3583

test_param_sensitivity_iso=3583.jpg

test_param_sensitivity_iso=5347

test_param_sensitivity_iso=5347.jpg

test_param_sensitivity_iso=7111

test_param_sensitivity_iso=7111.jpg

test_param_sensitivity_plot

test_param_sensitivity_plot.png

test_param_shading_mode

Teste que le paramètre android.shading.mode est appliqué.

API testées :

Réussite : les modes d'ombrage sont commutés et les cartes d'ombrage des objectifs sont modifiées comme prévu.

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

Teste que le paramètre android.tonemap.mode est appliqué. Applique différentes courbes de carte de tons à chaque canal R, V, B et vérifie que les images de sortie sont modifiées comme prévu. Ce test se compose de deux tests, test1 et test2.

API testées :

Passer:

  • test1 : les deux images ont une carte de tons linéaire, mais n=1 a un dégradé plus raide. Le canal G (vert) est plus lumineux pour l'image n=1.
  • test2 : même tonalité, mais longueur différente. Les images sont les mêmes.
test_param_tonemap_mode_n=0.jpgtest_param_tonemap_mode_n=1.jpg
test_param_tonemap_mode_n=0.jpg test_param_tonemap_mode_n=1.jpg

test_post_raw_sensitivity_boost

Vérifie l'augmentation de la sensibilité après RAW. Capture un ensemble d'images RAW et YUV avec une sensibilité différente, publie la combinaison d'augmentation de la sensibilité RAW et vérifie si la moyenne des pixels de sortie correspond aux paramètres de la demande.

API testées :

Réussite : les images RAW s'assombrissent à mesure que l'accentuation augmente, tandis que les images YUV restent constantes en luminosité.

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

test_post_raw_sensitivity_boost_raw_plot_means

test_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

Capture un ensemble d'images brutes avec des gains croissants et mesure le bruit. Capture en mode brut uniquement, en rafale.

API testées :

Passe : Chaque tir est plus bruyant que le tir précédent, à mesure que le gain augmente.

Utilise la variance de la cellule centrale de la grille des statistiques.

test_raw_burst_sensitivity_variance

test_raw_burst_sensitivity_variance.png

test_raw_exposure

Capture un ensemble d'images brutes avec un temps d'exposition croissant et mesure les valeurs des pixels.

API testées :

Passer : augmenter l'ISO (gain) rend les pixels plus sensibles à la lumière, donc le tracé se déplace vers la gauche.

test_raw_exposure_s=55

test_raw_exposure_s=55.png

(10⁰ équivaut à 1 ms, 10¹ équivaut à 10 ms, 10⁻¹ équivaut à 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_sensibilité

Capture un ensemble d'images brutes avec des sensibilités croissantes et mesure le bruit (variance) au centre de 10 % de l'image. Teste que chaque tir est plus bruyant que le précédent.

API testées :

Passe : la variance augmente à chaque tir.

test_raw_sensitivity_variance

test_raw_sensitivity_variance.png

test_reprocess_noise_reduction

Teste que android.noiseReduction.mode est appliqué pour les demandes de retraitement. Capture des images retraitées avec l’appareil photo faiblement éclairé. Utilise un gain analogique élevé pour garantir que l'image capturée est bruyante. Capture trois images retraitées, pour NR désactivé, « rapide » et « haute qualité ». Capture une image retraitée avec un faible gain et une réduction du bruit désactivée, et utilise la variance de celle-ci comme référence.

API testées :

Passe : RAPIDE >= OFF, QG >= RAPIDE, QG >> OFF

Tracé typique SNR vs NR_MODE

Tracé typique SNR vs NR_MODE

test_tonemap_sequence

Teste une séquence de prises de vue avec différentes courbes de tonalité. Capture 3 prises de vue manuelles avec une carte tonale linéaire. Capture 3 prises de vue manuelles avec la carte tonale par défaut. Calcule le delta entre chaque paire de trames consécutives.

API testées :

Réussite : Il y a 3 images identiques suivies d'un ensemble différent de 3 images identiques.

test_tonemap_sequence_i=0

test_tonemap_sequence_i=0.jpg

test_tonemap_sequence_i=1

test_tonemap_sequence_i=1.jpg

test_tonemap_sequence_i=2

test_tonemap_sequence_i=2.jpg

test_tonemap_sequence_i=3

test_tonemap_sequence_i=3.jpg

test_tonemap_sequence_i=4

test_tonemap_sequence_i=4.jpg

test_tonemap_sequence_i=5

test_tonemap_sequence_i=5.jpg

test_yuv_jpeg_all

Teste que toutes les tailles et formats signalés pour la capture d’images fonctionnent. Utilise une requête manuelle avec une carte de tons linéaire afin que le YUV et le JPEG se ressemblent une fois convertis par le module image_processing_utils . Les images ne sont pas enregistrées par défaut, mais peuvent être enregistrées en activant debug_mode .

API testées :

Réussite : tous les centres d'image ont une différence RMS maximale (valeur quadratique moyenne d'un signal) dans les images converties RVB avec 3 % de l'image YUV de la plus haute résolution.

test_yuv_jpeg_all

test_yuv_jpeg_all.png

test_yuv_plus_dng

Teste que les tailles et formats signalés pour la capture d’image fonctionnent.

API testées :

Réussite : le test se termine et renvoie les images demandées.

test_yuv_plus_dng

test_yuv_plus_dng.jpg

test_yuv_plus_jpeg

Teste la capture d’une seule image en tant que sorties YUV et JPEG. Utilise une requête manuelle avec une carte de tons linéaire afin que le YUV et le JPEG se ressemblent une fois convertis par le module image_processing_utils .

API testées :

Réussite : les images YUV et JPEG sont similaires et présentent une différence inférieure à 1 % RMS (valeur quadratique moyenne d'un signal).

test_yuv_plus_jpg_jpg.jpgtest_yuv_plus_jpeg_yuv.jpg
test_yuv_plus_jpg_jpg.jpg test_yuv_plus_jpeg_yuv.jpg

test_yuv_plus_raw

Tests capturant une seule image en tant que sorties RAW et YUV. Utilise une requête manuelle avec une carte de tons linéaire, donc RAW et YUV devraient être identiques. Compare les valeurs RVB centrales de 10 % des images converties RVB. Journaux android.shading.mode .

API testées :

Réussite : les images YUV et JPEG sont similaires et présentent une différence inférieure à 3,5 % RMS (valeur quadratique moyenne d'un signal).

test_yuv_plus_raw_shading=1_raw.jpgtest_yuv_plus_raw_shading=1_yuv.jpg
test_yuv_plus_raw_shading=1_raw.jpg test_yuv_plus_raw_shading=1_yuv.jpg

test_yuv_plus_raw10

Tests capturant une seule image en tant que sorties RAW10 et YUV. Utilise une requête manuelle avec une carte de tons linéaire, donc RAW et YUV devraient être identiques. Compare les valeurs RVB centrales de 10 % des images converties RVB. Journaux android.shading.mode .

API testées :

Réussite : les images RAW10 et YUV sont similaires et présentent une différence inférieure à 3,5 % RMS (valeur quadratique moyenne d'un signal).

test_yuv_plus_raw10_shading=1_rawtest_yuv_plus_raw10_shading=1_yuv
test_yuv_plus_raw10_shading=1_raw.jpg test_yuv_plus_raw10_shading=1_yuv.jpg

test_yuv_plus_raw12

Tests capturant une seule image en tant que sorties RAW12 et YUV. Utilise une requête manuelle avec une carte de tons linéaire, donc RAW et YUV devraient être identiques. Compare les valeurs RVB centrales de 10 % des images converties RVB. Journaux android.shading.mode .

API testées :

Réussite : les images RAW12 et YUV sont similaires et présentent une différence inférieure à 3,5 % RMS (valeur quadratique moyenne d'un signal).

test_yuv_plus_raw12_shading=1_raw.jpgtest_yuv_plus_raw12_shading=1_yuv.jpg
test_yuv_plus_raw12_shading=1_raw.jpg test_yuv_plus_raw12_shading=1_yuv.jpg

scène2_a

scene2_a a trois visages avec un fond gris et des vêtements neutres. Les visages sont choisis pour avoir une large gamme de carnations. Le graphique doit avoir la bonne orientation pour que la détection des visages fonctionne de manière optimale.

scène2_a

scène2_a

test_auto_flash

Teste que le flash automatique est déclenché dans une scène sombre. Vérifie que le flash automatique est déclenché en vérifiant que le centre de l'image de la mosaïque présente un dégradé important. Pour déclencher le flash automatique, la tablette et les lumières du banc d'essai doivent être éteintes. La tablette est éteinte par le test et les lumières peuvent être éteintes automatiquement avec le contrôleur Arduino. La scène doit être complètement sombre pour que le test fonctionne correctement. En tant que tel, l'ouverture arrière de la tablette doit être entièrement recouverte par la tablette de scène, et l'ouverture avant doit être couverte par une ouverture et le téléphone DUT pour empêcher la lumière parasite de pénétrer dans la plate-forme.

API testées :

Réussite : le centre de l'image de la tuile présente un grand dégradé, ce qui signifie que le flash automatique s'est déclenché.

test_effects

Capture l'image pour les effets de caméra pris en charge et vérifie s'ils sont générés correctement. Le test vérifie uniquement les effets OFF et MONO , mais enregistre les images pour tous les effets pris en charge.

API testées :

Pass : capture l'image de la scène avec les effets OFF et une image monochrome avec les effets définis sur MONO .

test_effects_MONO

test_effects_MONO.jpg

test_format_combos

Teste différentes combinaisons de formats de sortie.

API testées :

Pass : Toutes les combinaisons sont capturées avec succès.

test_jpeg_qualité

Teste la qualité de compression JPEG de l’appareil photo. Améliorez les qualités JPEG via android.jpeg.quality et assurez-vous que les tables de quantification changent correctement.

API testées :

Réussite : la matrice de quantification diminue avec l'augmentation de la qualité. (La matrice représente le facteur de division.)

test_jpeg_qualité

Moyennes de la matrice DQT luma/chroma de la caméra arrière du Pixel 4 par rapport à la qualité JPEG

test_jpeg_quality a échoué

Exemple de test échoué

A noter que pour les images de très faible qualité (jpeg.quality < 50), il n'y a pas d'augmentation de la compression dans la matrice de quantification.

test_num_faces

Teste la détection des visages.

API testées :

Passe : trouve trois visages.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

scène2_b

test_num_faces

Teste la détection des visages avec une diversité accrue des tons chair dans les scènes de visage.

API testées :

Passe : trouve 3 visages.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

test_yuv_jpeg_capture_sameness

Capture deux images en utilisant les plus grands formats YUV et JPEG courants avec le même rapport hauteur/largeur que le plus grand format JPEG ne dépassant pas une résolution de 1920 x 1440. Définit jpeg.quality sur 100 et capture une demande à double surface. Convertit les deux images en tableaux RVB et calcule la différence quadratique moyenne (RMS) 3D entre les deux images.

API testées :

Réussite : les images YUV et JPEG sont similaires et présentent une différence inférieure à 1 % RMS (valeur quadratique moyenne d'un signal).

scène2_c

test_num_faces

Teste la détection des visages avec une diversité accrue des tons chair dans les scènes de visage.

API testées :

Passe : trouve 3 visages.

test_num_faces_fd_mode_1

test_num_faces_fd_mode_1.jpg

test_jpeg_capture_perf_class

Teste la latence de capture JPEG pour la classe de performances S comme spécifié dans la section 2.2.7.2 Caméra du CDD.

Réussite : DOIT avoir une latence de capture JPEG de la caméra 2 < 1 000 ms pour une résolution de 1 080p, telle que mesurée par le test de performance de la caméra CTS dans des conditions d'éclairage ITS (3 000 K) pour les deux caméras principales.

test_camera_launch_perf_class

Teste la latence de lancement de la caméra pour la classe de performances S, comme spécifié dans la section 2.2.7.2 Caméra du CDD.

Réussite : DOIT avoir une latence de démarrage de la caméra 2 (caméra ouverte jusqu'à la première image de prévisualisation) < 600 ms, telle que mesurée par le test de performance de la caméra CTS dans des conditions d'éclairage ITS (3 000 K) pour les deux caméras principales.

scène2_d

test_num_faces

Teste la détection des visages avec une diversité accrue des tons chair dans les scènes de visage.

API testées :

Passe : trouve 3 visages.

scène2_e

test_continuous_picture

50 images de résolution VGA sont capturées avec la demande de capture en définissant d'abord android.control.afMode = 4 (CONTINUOUS_PICTURE).

API testées :

Réussite : le système 3A s'installe à la fin d'une capture de 50 images.

test_num_faces

Teste la détection des visages avec une diversité accrue des tons chair dans les scènes de visage.

API testées :

Passe : trouve 3 visages.

scène3

Scene3 utilise le graphique ISO12233 et la plupart des tests utilisent une méthode d'extraction de graphique pour trouver le graphique dans la scène. Pour cette raison, la plupart des images enregistrées n'ont pas de bordures comme les images des scènes 1, 2 ou 4, mais uniquement le graphique. La carte doit être dans la bonne orientation pour que le chercheur de cartes fonctionne de manière optimale.

test_3a_cohérence

Tests de cohérence 3A.

API testées :

Réussite : 3A converge pour l'exposition, le gain, l'awb (balance des blancs automatique) et la fd (distance de mise au point) trois fois dans les limites de tolérance.

test_edge_enhancement

Teste que le paramètre android.edge.mode est appliqué correctement. Capture des images non retraitées pour chaque mode de bord et renvoie la netteté de l'image de sortie et les métadonnées du résultat de la capture. Traite une demande de capture avec un mode de bord, une sensibilité, un temps d'exposition, une distance de mise au point et un paramètre de surface de sortie donnés.

Réussite : mode HQ (2) plus net que le mode OFF (0). Mode FAST (1) plus net que le mode OFF . Mode HQ plus net ou égal au mode FAST .

API testées :

Paramètres de la caméra concernés :

  • EDGE_MODE

test_edge_enhancement_edge=0

test_edge_enhancement_edge=0.jpg

test_edge_enhancement_edge=1

test_edge_enhancement_edge=1.jpg (fast mode)

test_edge_enhancement_edge=2

test_edge_enhancement_edge=2.jpg (high quality mode)

test_flip_mirror

Tests if image is properly oriented as per CDD section 7.5.2 Front-Facing Camera [C-1-5] .

Mirrored, flipped, or rotated images can be identified by the diamond feature near the center.

Pass: Image isn't flipped, mirrored or rotated.

test_flip_mirror_scene_patch

test_flip_mirror_scene_patch.jpg

test_lens_movement_reporting

Tests if the lens movement flag is properly reported. Captures a burst of 24 images with the first 12 frames at the optimum focus distance (as found by 3A) and the last 12 frames at the minimum focus distance. Around frame 12, the lens moves causing the sharpness to drop. The sharpness eventually stabilize as the lens moves to the final position. The lens movement flag should be asserted in all frames where the sharpness is intermediate to sharpness in the first 10 frames with the lens stationary at optimum focal distance, and the final 10 frames where the lens is stationary in the minimum focal distance. The exact frame the lens moves isn't important: what is checked is that the movement flag is asserted when the lens is moving.

APIs tested:

Pass: Lens movement flag is True in the frame with sharpness change.

test_reprocess_edge_enhancement

Tests if supported reprocess methods for edge enhancement work properly. Processes a capture request with a given reprocess edge mode and compares different modes to capture with reprocess edge modes disabled.

APIs tested:

Pass: Sharpness for the different edge modes is correct. HQ (mode 2) is sharper than OFF (mode 0), and improvement between different modes is similar.

test_reprocess_edge_enhancement_plot

test_reprocess_edge_enhancement_plot.png

scene4

Scene4 consists of a black circle on a white background inside a square.

scene4

scene4

test_aspect_ratio_and_crop

Takes pictures of a circle inside of a square over all formats. Verifies that the aspect ratio of the circle doesn't change, the cropped images keep the circle in center, and the circle size doesn't change for a constant format or with different resolution (field of view check).

APIs tested:

Pass: Images aren't stretched, the center of images don't differ by more than 3%, and the maximum possible FOV (field of view) is preserved.

test_multi_camera_alignment

Tests the multi camera system parameters related to camera spacing. Using the multi-camera physical sub-cameras, takes a picture with one of the physical cameras. Finds the circle center. Projects the circle center to the world coordinates for each camera. Compares the difference between the cameras' circle centers in world coordinates. Reprojects the world coordinate back to pixel coordinates and compares against originals as a validity check. Compares the circle sizes checking if the focal lengths of the cameras are different.

APIs tested:

Pass: Focal lengths and circles sizes are consistent.

test_preview_stabilization_fov

Checks the supported preview sizes to ensure the FoV is cropped appropriately. The test captures two videos, one with preview stabilization ON , and another with preview stabilization OFF . A representative frame is selected from each video, and analyzed to ensure that the FoV changes in the two videos are within spec.

APIs tested:

Pass: The circle aspect ratio remains about constant, the center location of the circle remains stable, and the size of circle changes no more that 20%. ie the FOV changes at most 20%

test_video_aspect_ratio_and_crop

Takes videos of a circle inside of a square over all video formats. Extracts the key frames, and verifies the aspect ratio of the circle doesn't change, the cropped images keep the circle in center, and the circle size doesn't change for a constant format or with different resolution (field of view check).

APIs tested:

Pass: Video frames aren't stretched, the center of frames don't differ by more than 3%, and the maximum possible FoV (field of view) is preserved.

scene5/diffuser

test_lens_shading_and_color_uniformity

Tests that the lens shading correction is applied appropriately, and color of a monochrome uniform scene is evenly distributed. Performs this test on a YUV frame with auto 3A. Lens shading is evaluated based on the y channel. Measures the average y value for each sample block specified, and determines pass or fail by comparing with the center y value. The color uniformity test is evaluated in r/g and b/g space.

APIs tested:

Pass: At the specified radius of the image, the variance of r/g and b/g value must be less than 20% to pass the test.

scene6

Scene6 is a grid of small circles with a square in one corner to indicate orientation. The small circles are needed to test zoom function over a large range.

scene6

scene6

test_zoom

Tests the camera zoom behavior. Takes captures over the zoom range and checks if the circles get bigger as the camera zooms in.

APIs tested:

Pass: Relative size of captured circle is accurate against requested zoom ratio to ensure camera is zooming correctly.

test_zoom

test_zoom to find the contour of the circle closest to the center.

sensor_fusion

Sensor fusion tests require specific phone movement in front of a checkerboard pattern. For optimum results, ensure the test chart is mounted flat. Charts that aren't flat affect the rotation calculations for many of the tests. The sensor_fusion tests can be automated with the Sensor Fusion Box .

checkerboard

Image of checkerboard

test_multi_camera_frame_sync

Tests that frame timestamps captured by logical camera are within 10 ms by computing angles of squares within the checkerboard to determine the timestamp.

APIs tested:

Pass: Angle between images from each camera doesn't change appreciably as phone is rotated.

test_preview_stabilization

Tests that stabilized preview video rotates less than gyroscope.

APIs tested:

Pass: Max angle rotation over frames is less than 70% of gyroscope rotation.

The following are sample videos with and without stabilization.

  • Sample video with stabilization

  • Sample video without stabilization

    test_sensor_fusion

Tests the timestamp difference between the camera and the gyroscope for AR and VR applications. Phone is rotated 90 degrees 10 times in front of the checkerboard pattern. Motion is about 2 s round trip. This test is skipped if no gyroscope is included or if the timestamp source REALTIME parameter is not enabled.

The test_sensor_fusion test generates a number of plots. The two most important plots for debugging are:

  • test_sensor_fusion_gyro_events : Shows the gyroscope events for the phone during the test. Movement in the x and y direction implies the phone isn't securely mounted on the mounting plate, reducing the probability of the test passing. The number of cycles in the plot depends on the write speed for saving frames.

    test_sensor_fusion_gyro_events.png

    test_sensor_fusion_gyro_events

  • test_sensor_fusion_plot_rotations : Shows the alignment of the gyroscope and camera events. This plot must show matching movement between camera and gyroscope to +/-1 ms.

    test_sensor_fusion_plot_rotations.png

    test_sensor_fusion_plot_rotations

APIs tested:

Pass: Camera and gyroscope timestamps' offset is less than 1 ms as per CDD section 7.3.9 High Fidelity Sensors [C-2-14] .

test_video_stabilization

Tests that stabilized video rotates less than gyroscope.

APIs tested:

Pass: Max angle rotation over frames is less than 60% of gyroscope rotation.

The following are sample videos with and without stabilization.

  • Sample video with stabilization

  • Sample video without stabilization