Cette page fournit une liste complète des tests de la suite de tests d'image de l'appareil photo (ITS, Camera Image Test Suite), qui fait partie du vérificateur de la suite de tests de compatibilité Android (CTS, Compatibility Test Suite). 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 de l'appareil photo annoncées 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 de test.
L'ITS de l'appareil photo filtre les tests en fonction des propriétés de l'appareil photo requises, du niveau d'API et du niveau de la classe de performances multimédias (MPC). Pour le niveau d'API, ITS utilise ro.product.first_api_level
pour contrôler 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 contrôler les tests des fonctionnalités ajoutées à un niveau d'API spécifique qui nécessitent de nouvelles fonctionnalités matérielles. 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
: capture des métadonnées, du jitter, du gyroscope et du vibreurscene1
: exposition, sensibilité, compensation de la valeur d'exposition (EV), YUV par rapport à JPEG et RAWscene2
: détection de visage, tests nécessitant des scènes en couleurscene3
: amélioration des contours, mouvement de l'objectifscene4
: format, recadrage, champ de visionscene5
: ombre de l'objectifscene6
: zoomscene7
: bouton de sélection de la camérascene8
: mesure de la région pour l'exposition automatique (AE) et la balance des blancs automatique (AWB)scene9
: compression JPEGscene_extensions
: extensions pour l'appareil photoscene_tele
: commutation du téléobjectifscene_flash
: flash automatique, fréquence d'images minimalescene_video
: pertes de tramessensor_fusion
: décalage de synchronisation de l'appareil photo et du gyroscopefeature_combination
: combinaisons de fonctionnalitésscene_ip
: parité d'image entre l'application d'appareil photo par défaut et l'application d'appareil photo Jetpack (JCA)
Consultez les sections individuelles pour obtenir une description de chaque scène.
scene0
Les tests ne nécessitent aucune information spécifique sur la scène. Toutefois, le téléphone doit être immobile pour les tests du gyroscope et de la vibration.
test_jitter
Mesure le jitter dans les codes temporels de la caméra.
API testées :
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP
android.hardware.camera2.CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE
Pass : il existe au moins un delta de 30 ms entre les images.
Dans l'image suivante, notez la petite plage de l'axe Y. Le jitter est en fait faible dans ce graphique.
Figure 1 : graphique test_jitter.
test_metadata
Teste la validité des entrées de métadonnées, en examinant les résultats de capture et les objets de caractéristiques de l'appareil photo. 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 :
android.hardware.camera2.CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
android.hardware.camera2.CameraCharacteristics#SCALER_CROPPING_TYPE
android.hardware.camera2.CameraCharacteristics#SENSOR_BLACK_LEVEL_PATTERN
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_TIMESTAMP_SOURCE
android.hardware.camera2.CaptureRequest#SENSOR_FRAME_DURATION
android.hardware.camera2.CaptureResult#SENSOR_ROLLING_SHUTTER_SKEW
Pass : au niveau matériel, les balises rollingShutterSkew
, frameDuration
, timestampSource
, croppingType
, blackLevelPattern
, pixel_pitch
, le champ de vision (FoV) et la distance hyperfocale sont présents et ont des valeurs valides.
test_request_capture_match
Vérifie que l'appareil écrit les valeurs d'exposition et de gain correctes en lisant les métadonnées de capture.
API testées :
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_EXPOSURE_TIME_RANGE
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
android.hardware.camera2.CaptureResult#SENSOR_EXPOSURE_TIME
android.hardware.camera2.CaptureResult#SENSOR_SENSITIVITY
Pass : les valeurs des métadonnées de la requête et de la capture correspondent pour tous les clichés.
test_sensor_events
Pour les appareils qui annoncent la prise en charge de la fusion de capteurs, ce test vérifie si l'appareil interroge et imprime des événements de capteur. 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 :
Pass : les événements de chaque capteur sont reçus.
test_solid_color_test_pattern
Vérifie que les modèles de test de couleur unie sont générés correctement pour le masquage de la caméra. Si la désactivation du son de la caméra est prise en charge, les modèles de test de couleur unie doivent également l'être. Si la désactivation du son de la caméra n'est pas prise en charge, les motifs de test de couleur unie ne sont testés que si la fonctionnalité est annoncée.
Si les images brutes sont acceptées, 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 brutes, seul le noir est testé.
API testées :
android.hardware.camera2.CameraCharacteristic#SENSOR_AVAILABLE_TEST_PATTERN_MODES
android.hardware.camera2.CaptureResult#SENSOR_TEST_PATTERN_DATA
android.hardware.camera2.CaptureResult#SENSOR_TEST_PATTERN_MODE
Pass (Passer) : les modèles de test solides pris en charge sont de la bonne couleur et la variance de l'image est faible.
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 couleur. Ce test comprend les étapes suivantes :
- Capture des images pour tous les modèles de test compatibles.
- Effectue une vérification de l'exactitude du motif de test de couleur unie et des barres de couleur.
API testées :
android.hardware.camera2.CameraCharacteristic#SENSOR_AVAILABLE_TEST_PATTERN_MODES
android.hardware.camera2.CaptureResult#SENSOR_TEST_PATTERN_MODE
Pass : les modèles de test compatibles sont générés correctement.
Figure 2 : exemple de test_test_patterns
test_tonemap_curve
Teste la conversion du modèle de test de format brut au format 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 de tons. Vérifie que le pipeline dispose de sorties de couleur appropriées avec un mappage de tons linéaire et une entrée d'image idéale (s'appuie sur test_test_patterns
).
API testées :
android.hardware.camera2.CaptureRequest#DISTORTION_CORRECTION_MODE
android.hardware.camera2.CaptureRequest#SENSOR_TEST_PATTERN_MODE
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
Pass : le YUV et le RAW se ressemblent.
Figure 3 : Exemple brut de test_tonemap_curve.
Figure 4 : Exemple de courbe YUV test_tonemap_curve.
test_unified_timestamp
Vérifie si les événements d'image et de capteur de mouvement se trouvent dans le même domaine temporel.
API testées :
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP
android.hardware.Sensor
android.hardware.SensorEvent
android.hardware.Sensor#TYPE_ACCELEROMETER
android.hardware.Sensor#TYPE_GYROSCOPE
Pass (Passer) : les codes temporels de mouvement se trouvent entre les deux codes temporels d'image.
test_vibration_restriction
Vérifie si la vibration de l'appareil fonctionne comme prévu.
API testées :
android.hardware.Sensor
android.hardware.SensorEvent
android.hardware.Sensor#TYPE_ACCELEROMETER
android.os.Vibrator
android.hardware.camera2.CameraDevice#setCameraAudioRestriction
Pass : l'appareil ne vibre pas lorsque le son est coupé par l'API de restriction audio de l'appareil photo.
scene1_1
scene1
correspond à un graphique gris. Le graphique gris doit couvrir 30 % du champ de vision de la caméra au centre. Le graphique gris devrait poser des problèmes modérés à 3A (AE, AWB et AF), car la région centrale ne comporte aucune fonctionnalité.
Toutefois, la requête de capture spécifie l'ensemble de la scène, qui comprend suffisamment de caractéristiques pour que la convergence 3A soit possible.
Les caméras à champ de vision étroit peuvent être testées dans le banc d'essai à champ de vision large ou à champ de vision étroit. Si une caméra RFoV est testée dans le banc d'essai WFoV, le graphique est mis à l'échelle de 2/3 pour spécifier certaines limites pour le graphique gris dans le champ de vision afin d'aider la convergence 3A. Pour en savoir plus sur les bancs d'essai de caméras, consultez ITS-in-a-box pour caméras.
Figure 5. Graphique de la scène 1 en taille réelle (à gauche), graphique à l'échelle de 2/3 (à droite).
test_ae_precapture_trigger
Teste la machine d'état 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 :
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
Pass : l'AE converge.
test_auto_vs_manual
Les tests qui ont capturé des clichés automatiques et manuels se ressemblent.
API testées :
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
android.hardware.camera2.CaptureResult#TONEMAP_CURVE
android.hardware.camera2.CaptureResult#TONEMAP_MODE
Pass : les gains et la transformation de la balance des blancs manuelles indiqués dans chaque résultat de capture correspondent à la balance des blancs automatique estimate
de l'algorithme 3A de l'appareil photo.
Figure 6 : Exemple d'automatisation test_auto_vs_manual.
Figure 7 : Exemple de balance des blancs test_auto_vs_manual.
Figure 8 : Exemple de transformation de la balance des blancs manuelle test_auto_vs_manual.
test_black_white
Vérifie que l'appareil produit des images 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 :
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Pass : produit des images en noir et blanc. Les canaux saturés des images blanches ont des valeurs RVB de [255, 255, 255] avec une marge d'erreur inférieure à 1 %.
Figure 9 : test_black_white, exemple de noir.
Figure 10 : test_black_white, exemple de couleur blanche.
Figure 11 : test_black_white, l'exemple de tracé.
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 de processeur.
API testées :
Pass : capture une série d'images en taille réelle, vérifie les pertes de trames et la luminosité de l'image.
test_burst_sameness_manual
Prend cinq rafales de 50 images avec le paramètre de capture manuelle et vérifie qu'elles sont toutes identiques. Utilisez ce test pour identifier si des images sporadiques sont traitées différemment ou présentent des artefacts.
API testées :
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR
android.hardware.camera2.CameraMetadata#SYNC_MAX_LATENCY_PER_FRAME_CONTROL
Pass : les images sont identiques visuellement et en termes de valeurs RVB.
Échec : indique 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
Figure 12 : Exemple de moyenne test_burst_sameness_manual.
Figure 13 : test_burst_sameness_manual_plot_means
test_crop_region_raw
Vérifie que les flux RAW ne peuvent pas être recadrés.
API testées :
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
android.hardware.camera2.CaptureResult#SCALER_CROP_REGION
android.hardware.camera2.CaptureRequest#SCALER_CROP_REGION
Pass : les images YUV sont recadrées au centre, mais pas les images RAW.
Figure 14 : Exemple de recadrage brut de la composition test_crop_region_raw.
Figure 15 : exemple complet de comparaison brute de test_crop_region_raw.
Figure 16 : Exemple de recadrage YUV de la composition test_crop_region_raw.
Figure 17 : Exemple complet de test_crop_region_raw YUV.
test_crop_regions
Vérifie que les régions de recadrage fonctionnent. Prend une image complète et crée des patches de cinq régions différentes (coins et centre). Prend des images avec un recadrage défini pour les cinq régions. Compare les valeurs du correctif et de l'image recadrée.
API testées :
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
android.hardware.camera2.CaptureRequest#SCALER_CROP_REGION
Pass (Passer) : l'image de la zone recadrée correspond à la zone correspondant à l'image recadrée.
test_ev_compensation
Vérifie que la correction de la valeur d'exposition (EV) est appliquée. Le test se compose d'une section de base et d'une section avancée.
La section de base vérifie 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.
La section "Avancé" 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 compensation EV appliquée, et la valeur attendue sature si les valeurs calculées dépassent la plage de valeurs d'image réelle. Le test échoue si les valeurs attendues et les valeurs mesurées ne correspondent pas ou si les images sont surexposées au bout de cinq étapes.
API testées :
android.hardware.camera2.CameraCharacteristics#CONTROL_AE_COMPENSATION_STEP
android.hardware.camera2.CaptureRequest#CONTROL_AE_EXPOSURE_COMPENSATION
android.hardware.camera2.CaptureRequest#CONTROL_AE_LOCK
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
android.hardware.camera2.CaptureRequest#CONTROL_AWB_LOCK
android.hardware.camera2.CaptureResult#TONEMAP_CURVE
android.hardware.camera2.CaptureResult#TONEMAP_MODE
Passage de section de base : les images montrent une exposition croissante sans surexposition en cinq étapes.
Figure 18 : test_ev_compensation_basic
Passage de section avancé : capture une augmentation de la luminance à mesure que le paramètre de compensation EV augmente. Les huit images capturées pour chaque paramètre de compensation EV présentent des valeurs de luma stables.
Figure 19 : test_ev_compensation_advanced_plot_means.
test_exposure_x_iso
Vérifie qu'une exposition constante est obtenue lorsque l'ISO et la durée d'exposition varient. Prend une série de clichés 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 bruiteuse. Vérifie que les valeurs moyennes des pixels de l'échantillon sont proches les unes des autres. Vérifie 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 :
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Échec : les images ont la même luminosité, mais elles sont plus bruiteuses avec une sensibilité ISO plus élevée. Les plans RVB sont plats lorsque la valeur de l'exposition ISO* est constante sur l'espace de gain testé.
Mécanisme de défaillance : dans la figure suivante, à mesure que les valeurs du multiplicateur de gain (axe X) augmentent, les valeurs moyennes du plan RGB normalisé (axe Y) commencent à s'écarter des valeurs de multiplicateur de gain faible.
Figure 20 : test_exposure_plot_means.
Figure 21 : test_exposure_mult=1.00.
Figure 22 : test_exposure_mult=64.00.
test_latching
Vérifie que les paramètres (exposition et gain) se verrouillent sur le cadre de droite pour les caméras FULL
et LEVEL_3
. Prend une série de clichés à l'aide de requêtes consécutives, en modifiant les paramètres de la requête de capture entre les clichés. Vérifie que les images ont les propriétés attendues.
API testées :
Pass : les images [2, 3, 6, 8, 10, 12, 13] ont une ISO ou une exposition plus élevée et affichent des moyennes RGB plus élevées dans le graphique de la figure suivante.
Figure 23 : Exemple de graphique des moyennes de test_latching.
Figure 24 : test_latching i=00.
Figure 25 : test_latching i=01.
Figure 26 : test_latching i=02.
Figure 27 : test_latching i=03.
Figure 28 : test_latching i=04.
Figure 29 : test_latching i=05.
Figure 30 : test_latching i=06.
Figure 31 : test_latching i=07.
Figure 32 : test_latching i=08.
Figure 33 : test_latching i=09.
Figure 34 : test_latching i=10.
Figure 35 : test_latching i=11.
Figure 36 : test_latching i=12.
test_linearity
Vérifie que le traitement de l'appareil peut être inversé en pixels linéaires. Capture une séquence de prises de vue avec l'appareil pointé vers une cible uniforme.
API testées :
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
android.hardware.camera2.CaptureRequest#BLACK_LEVEL_LOCK
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
OK : les valeurs R, G et B doivent augmenter de manière linéaire à mesure que la sensibilité augmente.
Figure 37 : Exemple de graphique de la moyenne de test_linearity.
test_locked_burst
Teste le verrouillage 3A et la rafale YUV (à l'aide du paramètre automatique). Ce test est conçu pour réussir même sur les appareils limités qui ne disposent pas de MANUAL_SENSOR
ou de PER_FRAME_CONTROLS
.
Le test vérifie la cohérence des images YUV, tandis que la vérification de la fréquence d'images se trouve dans CTS.
API testées :
android.hardware.camera2.CaptureRequest#CONTROL_AE_LOCK
android.hardware.camera2.CaptureRequest#CONTROL_AWB_LOCK
Pass : les captures semblent cohérentes.
Figure 38 : Exemple de frame0 test_locked_burst.
Figure 39 : Exemple de frame1 test_locked_burst.
Figure 40 : Exemple de frame2 test_locked_burst.
scene1_2
scene 1_2
est une copie fonctionnellement identique de scene 1_1
, implémentant une structure de sous-scène pour réduire la durée étendue de scene 1
.
test_param_color_correction
Vérifie que les paramètres android.colorCorrection.*
sont appliqués lorsqu'ils sont définis.
Prend des clichés avec différentes valeurs de transformation et de gain, et vérifie qu'ils ont un aspect différent 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.
La cartographie des tons est une technique utilisée dans le traitement d'image pour mapper un ensemble de couleurs sur un autre afin d'approcher l'apparence des images HDR dans un support dont la plage dynamique est plus limitée.
API testées :
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
Pass (Transmettre) : les valeurs R et B sont amplifiées en fonction de la transformation.
Figure 41 : exemple de moyenne du graphique de test_param_color_correction.
Dans les figures suivantes, l'axe X correspond aux requêtes de capture : 0 = unité, 1 = boost rouge et 2 = boost bleu.
Figure 42 : exemple d'unité test_param_color_correction req=0.
Figure 43 : Exemple d'accentuation du rouge avec test_param_color_correctness req=1.
Figure 44 : exemple d'accentuation du bleu avec test_param_color_correction req=2.
test_param_flash_mode
Vérifie 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 carte pour voir s'il existe un grand dégradé créé pour vérifier si le flash s'est déclenché.
API testées :
Pass (Passer) : le centre de l'image de la carte présente un grand dégradé, ce qui signifie que le flash s'est déclenché.
Figure 45 : exemple de test_param_flash_mode 1.
Figure 46 : exemple d'une carte test_param_flash_mode.
Figure 47 : exemple de test_param_flash_mode 2.
Figure 48 : Exemple de deux cartes test_param_flash_mode.
test_param_noise_reduction
Vérifie que le paramètre android.noiseReduction.mode
est appliqué correctement lorsqu'il est défini. Prend des images avec la caméra faiblement éclairée. Utilise un gain analogique élevé pour s'assurer que l'image capturée est bruiteuse. Capture trois images, pour le NR désactivé, rapide et haute qualité. Capture également une image avec un gain faible et la réduction du bruit désactivée, et utilise la variance de cette image comme référence. Plus le rapport signal/bruit (SNR) est élevé, meilleure est la qualité de l'image.
API testées :
Pass : le rapport signal/bruit varie selon les différents modes de réduction du bruit et se comporte de manière similaire au graphique suivant :
Figure 49 : Exemple de tracé des SNR avec test_param_noise_reduction.
0 : OFF, 1 : FAST, 2 : HQ, 3 : MIN , 4 : ZSL
Figure 50 : Exemple de test_param_noise_reduction avec gain élevé (nr=0).
Figure 51 : Exemple de test_param_noise_reduction avec un gain élevé (nr=1).
Figure 52 : Exemple de test_param_noise_reduction avec un gain élevé (nr=2).
Figure 53 : Exemple de test_param_noise_reduction avec un gain élevé (nr=3).
Figure 54 : Exemple de faible gain test_param_noise_reduction.
test_param_shading_mode
Vérifie que le paramètre android.shading.mode
est appliqué.
API testées :
android.hardware.camera2.CaptureRequest#SHADING_MODE
android.hardware.camera2.CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE
android.hardware.camera2.CaptureResult#STATISTICS_LENS_SHADING_CORRECTION_MAP
Pass : les modes d'ombrage sont activés et les cartes d'ombrage de l'objectif sont modifiées comme prévu.
Figure 55 : Carte de nuance de l'objectif test_param_shading_mode, exemple de boucle 0 en mode 0.
Figure 56 : carte de nuance de l'objectif test_param_shading_mode, exemple de boucle 0 en mode 1.
Figure 57 : Carte de lissage de l'objectif test_param_shading_mode, exemple de boucle 0 en mode 2.
test_param_tonemap_mode
Vérifie que le paramètre android.tonemap.mode
est appliqué. Applique différentes courbes de mappage des tons à chaque canal R, G et 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 :
android.hardware.camera2.CameraMetadata#TONEMAP_MODE_CONTRAST_MODE
android.hardware.camera2.CameraMetadata#TONEMAP_MODE_FAST
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
Pass :
test1
: les deux images ont un mappage de tons linéaire, maisn=1
présente un dégradé plus prononcé. Le canal G (vert) est plus clair pour l'imagen=1
.test2
: même carte de tons, mais longueur différente. Les images sont identiques.
Figure 58 : test_param_tonemap_mode avec n=0.
Figure 59 : test_param_tonemap_mode avec n=1.
test_post_raw_sensitivity_boost
Vérifie l'amélioration de la sensibilité brute après. Capture un ensemble d'images brutes et YUV avec une sensibilité différente, publie la combinaison d'amélioration de la sensibilité brute et vérifie si la moyenne des pixels de sortie correspond aux paramètres de la requête.
API testées :
android.hardware.camera2.CameraCharacteristics#CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
android.hardware.camera2.CaptureRequest#CONTROL_POST_RAW_SENSITIVITY_BOOST
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Pass : les images brutes deviennent plus sombres à mesure que le boost augmente, tandis que la luminosité des images YUV reste constante.
Figure 60 : exemple de test_post_raw_sensitivity_boost raw s=3583 boost=0100.
Figure 61 : Exemple test_post_raw_sensitivity_boost raw s=1792 boost=0200.
Figure 62 : Exemple de test_post_raw_sensitivity_boost raw s=0896 boost=0400.
Figure 63 : Exemple de test_post_raw_sensitivity_boost raw s=0448 boost=0800.
Figure 64 : exemple de test_post_raw_sensitivity_boost raw s=0224 boost=1600.
Figure 65 : exemple de test_post_raw_sensitivity_boost raw s=0112 boost=3199.
Figure 66 : exemple de moyennes de tracé brut test_post_raw_sensitivity_boost.
Figure 67 : exemple de test_post_raw_sensitivity_boost YUV s=0112 boost=3199.
Figure 68 : Exemple de test_post_raw_sensitivity_boost YUV s=0448 boost=0800.
Figure 69 : exemple de test_post_raw_sensitivity_boost YUV s=0896 boost=0400.
Figure 70 : exemple de test_post_raw_sensitivity_boost YUV s=1792 boost=0200.
Figure 71 : exemple de test_post_raw_sensitivity_boost YUV s=3585 boost=0100.
Figure 72 : test_post_raw_sensitivity_boost_yuv_plot_means
test_raw_exposure
Capture un ensemble d'images brutes avec une durée d'exposition croissante et mesure les valeurs de pixel.
API testées :
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
Pass : augmenter la valeur ISO (gain) rend les pixels plus sensibles à la lumière, ce qui fait que le tracé se déplace vers la gauche.
Figure 73 : Exemple de test_raw_exposure ISO=55.
10⁰ correspond à 1 ms, 10¹ à 10 ms et 10⁻¹ à 0, 1 ms.
Figure 74 : Exemple de test_raw_exposure ISO=132.
Figure 75 : Exemple de test_raw_exposure ISO=209.
Figure 76 : Exemple test_raw_exposure ISOs=286.
Figure 77 : Exemple de test_raw_exposure ISO=363.
Figure 78 : Exemple de test_raw_exposure ISO=440.
test_reprocess_noise_reduction
Tests que android.noiseReduction.mode
applique aux requêtes de retraitement.
Capture des images retravaillées lorsque l'appareil photo est faiblement éclairé. Utilise un gain analogique élevé pour vérifier que l'image de capture est bruiteuse. Capture trois images retravaillées pour une réduction du bruit désactivée, une vitesse rapide et une qualité élevée. Capture une image retravaillée avec un gain faible et la réduction du bruit désactivée, et utilise la variance de cette image comme référence.
API testées :
Pass : FAST >= OFF, HQ >= FAST et HQ >> OFF.
Figure 79 Exemple de graphique typique de SNR par rapport au mode NR.
test_tonemap_sequence
Teste une séquence de prises de vue avec différentes courbes de mappage des tons. Capture trois clichés manuels avec une carte de tons linéaire. Prend trois clichés manuels avec la carte de tons par défaut. Calcule le delta entre chaque paire d'images consécutives.
API testées :
Pass : trois trames identiques sont suivies d'un autre ensemble de trois trames identiques.
Figure 80 : exemple de test_tonemap_sequence i=0.
Figure 81 : exemple de test_tonemap_sequence i=1.
Figure 82 : exemple de test_tonemap_sequence i=2.
Figure 83 : exemple de test_tonemap_sequence i=3.
Figure 84 : exemple de test_tonemap_sequence i=4.
Figure 85 : exemple de test_tonemap_sequence i=5.
test_yuv_jpeg_all
Vérifie que toutes les tailles et tous les formats signalés pour la capture d'image fonctionnent. Utilise une requête manuelle avec une carte de tons linéaire afin que les formats YUV et JPEG se ressemblent lorsqu'ils sont convertis par le module image_processing_utils
. Les images ne sont pas enregistrées par défaut, mais peuvent l'être en activant debug_mode
.
API testées :
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
android.graphics.ImageFormat#JPEG
Pass : tous les centres d'image présentent une différence maximale de racine carrée de l'erreur quadratique moyenne (RMSE, Root Mean Square Error) (valeur d'un signal) dans les images converties au format RVB avec 3 % de l'image YUV de la plus haute résolution.
Figure 86 : Exemple test_yuv_jpeg_all.
test_yuv_plus_dng
Vérifie que les tailles et formats signalés pour la capture d'image fonctionnent.
API testées :
Pass (Passer) : le test se termine et renvoie les images demandées.
Figure 87 : Exemple test_yuv_plus_dng.
scene1_3
scene 1_3
est une copie fonctionnellement identique de scene 1_1
, implémentant une structure de sous-scène pour réduire la durée étendue de scene 1
.
test_capture_result
Vérifie que des données valides sont renvoyées dans des objets CaptureResult
. Le test consiste en une capture automatique, une capture manuelle et une deuxième capture automatique.
API testées :
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AE_REGIONS
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AF_REGIONS
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AWB_REGIONS
android.hardware.camera2.CaptureRequest#CONTROL_MODE
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
android.hardware.camera2.CaptureResult#STATISTICS_LENS_SHADING_CORRECTION_MAP
android.hardware.camera2.CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
Pass : les métadonnées sont valides pour toutes les captures et les paramètres manuels ne se propagent pas dans la deuxième capture automatique. Représente la correction de l'ombre de l'objectif pour les prises de vue.
Figure 88 : test_capture_result_plot_lsc_auto_ch0
test_dng_noise_model
Vérifie que les paramètres du modèle RAW DNG sont corrects. Le graphique représente la variance mesurée d'une zone centrale de la carte grise dans des prises de vue brutes capturées sur une plage de sensibilités, et compare ces valeurs à la variance attendue à chaque sensibilité par le modèle de bruit DNG dans le HAL de l'appareil photo (en fonction des paramètres O,S renvoyés dans les objets de résultat de capture). Pour en savoir plus sur le modèle de bruit DNG, téléchargez le document suivant sur le modèle de bruit DNG.
API testées :
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL
android.hardware.camera2.CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
android.hardware.camera2.CaptureResult#SENSOR_NOISE_PROFILE
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
Pass : les paramètres du modèle brut DNG sont corrects. Les valeurs RVB attendues correspondent à celles des valeurs RVB réelles mesurées.
Figure 89 : test_dng_noise_model_plog.
test_jpeg
Les tests ont montré que les images YUV converties et les images JPEG de l'appareil avaient la même apparence. Le test prend le centre de 10 % de l'image, calcule la valeur RVB et vérifie qu'elle correspond.
API testées :
Passé : la différence moyenne entre les valeurs RVB de chaque image est inférieure à 3 %.
Figure 90 : test_jpeg_fmt=jpg.jpg.
Figure 91 : test_jpeg=fmt=yuv.jpg
test_raw_burst_sensitivity
Capture un ensemble d'images brutes avec des gains croissants et mesure le bruit. Captures uniquement au format RAW, en rafale.
API testées :
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL
android.hardware.camera2.CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
Pass : chaque prise de vue est plus bruyante que la précédente, car le gain augmente.
Utilise la variance de la cellule de la grille des statistiques du centre.
Figure 92 : test_raw_burst_sensitivity_variance.
test_raw_sensitivity
Capture un ensemble d'images brutes avec des sensibilités croissantes et mesure le bruit (variance) dans les 10 % centraux de l'image. Vérifie que chaque prise de vue est plus bruyante que la précédente.
API testées :
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_PRE_CORRECTION_ACTIVE_ARRAY_SIZE
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL
android.hardware.camera2.CameraCharacteristics#SENSOR_MAX_ANALOG_SENSITIVITY
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
Pass (Passe) : la variance augmente à chaque prise de vue.
Figure 93 : test_raw_sensitivity_variance.
test_yuv_plus_jpeg
Teste la capture d'un seul frame en tant que sortie YUV et JPEG. Utilise une requête manuelle avec une carte de tons linéaire afin que les formats YUV et JPEG se ressemblent lorsqu'ils sont convertis par le module image_processing_utils
.
API testées :
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
android.graphics.ImageFormat#JPEG
Pass : les images YUV et JPEG sont similaires et présentent une différence RMS (valeur d'un signal) inférieure à 1 %.
Figure 94 : test_yuv_plus_jpeg au format JPEG.
Figure 95 : test_yuv_plus_jpeg au format YUV.
test_yuv_plus_raw
Tests de capture d'un seul frame en tant que sortie brute (10 bits et 12 bits) et YUV, le cas échéant. Utilise une requête manuelle avec une carte de tons linéaire. Par conséquent, les formats brut et YUV devraient être identiques. Compare les valeurs RVB de 10 % du centre des images converties en RVB. Journauxandroid.shading.mode
.
API testées :
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_RAW
android.hardware.camera2.CaptureResult#STATISTICS_LENS_SHADING_CORRECTION_MAP
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_GAINS
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_TRANSFORM
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
android.hardware.camera2.CaptureRequest#CONTROL_MODE
android.hardware.camera2.CaptureRequest#SHADING_MODE
android.hardware.camera2.CaptureRequest#TONEMAP_CURVE
android.hardware.camera2.CaptureRequest#TONEMAP_MODE
android.hardware.graphics.ImageFormat#RAW10
android.hardware.graphics.ImageFormat#RAW12
Pass : les images YUV et brutes sont similaires et présentent une différence RMS (valeur racine carrée moyenne d'un signal) inférieure à 3,5 %.
Figure 96 : test_yuv_plus_raw_shading=1_raw.jpg
Figure 97 : test_yuv_plus_raw_shading=1_yuv.jpg
test_sensitivity_priority
Tests CONTROL_AE_PRIORITY_MODE_SENSOR_SENSITIVITY_PRIORITY
sur différents paramètres ISO pour confirmer une corrélation entre un ISO plus élevé et une augmentation des niveaux de bruit.
API testées :
android.hardware.camera2.CameraMetadata#CONTROL_AE_PRIORITY_MODE_SENSOR_SENSITIVITY_PRIORITY
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
android.hardware.camera2.CaptureResult#SENSOR_SENSITIVITY
android.hardware.camera2.CaptureRequest#CONTROL_AE_PRIORITY_MODE
android.hardware.camera2.CaptureResult#CONTROL_AE_PRIORITY_MODE
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
android.hardware.camera2.CaptureResult#CONTROL_AE_MODE
android.hardware.camera2.CameraMetadata#CONTROL_AE_MODE_ON
android.hardware.camera2.CameraCharacteristics#CONTROL_AE_AVAILABLE_PRIORITY_MODES
Pass : une valeur ISO plus élevée entraîne une augmentation des niveaux de bruit.
Tester les critères de saut
Le test test_sensitivity_priority.py
est ignoré si l'un des critères suivants est rempli :
- Le premier niveau d'API (
first_api_level
) de l'appareil est de 35 ou inférieur. - L'appareil n'annonce pas
CONTROL_AE_PRIORITY_MODE_SENSOR_SENSITIVITY_PRIORITY
dansCONTROL_AE_AVAILABLE_PRIORITY_MODES
.
test_exposure_time_priority
Tests CONTROL_AE_PRIORITY_MODE_SENSOR_EXPOSURE_TIME_PRIORITY
pour différentes durées d'exposition, en vérifiant la luminosité stable dans la plage où l'ISO peut compenser.
API testées :
android.hardware.camera2.CameraMetadata#CONTROL_AE_PRIORITY_MODE_SENSOR_EXPOSURE_TIME_PRIORITY
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
android.hardware.camera2.CaptureResult#SENSOR_EXPOSURE_TIME
android.hardware.camera2.CaptureRequest#CONTROL_AE_PRIORITY_MODE
android.hardware.camera2.CaptureResult#CONTROL_AE_PRIORITY_MODE
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
android.hardware.camera2.CaptureResult#SENSOR_SENSITIVITY
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
android.hardware.camera2.CaptureResult#CONTROL_AE_MODE
android.hardware.camera2.CameraMetadata#CONTROL_AE_MODE_ON
android.hardware.camera2.CameraCharacteristics#CONTROL_AE_AVAILABLE_PRIORITY_MODES
Pass (Passer) : la luminosité est stable (dans les limites de tolérance) pour toutes les durées d'exposition si la sensibilité ISO se situe dans sa plage de compensation.
Tester les critères de saut
Le test test_exposure_time_priority
est ignoré si l'un des critères suivants est rempli :
- Le premier niveau d'API (
first_api_level
) de l'appareil est de 35 ou inférieur. - L'appareil n'annonce pas
CONTROL_AE_PRIORITY_MODE_SENSOR_EXPOSURE_TIME_PRIORITY
dansCONTROL_AE_AVAILABLE_PRIORITY_MODES
.
scene2_a
scene2_a
comporte trois visages sur un arrière-plan gris et des vêtements neutres. Les visages sont choisis pour présenter un large éventail de couleurs de peau. Le graphique doit être orienté correctement pour que la détection de visages fonctionne de manière optimale.
Figure 98 : exemple de scene2_a.
test_autoframing
Teste le comportement de cadrage automatique de l'appareil photo. Effectue un zoom important de sorte qu'aucun des visages de la scène ne soit visible, active le mode de cadrage automatique en définissant AUTOFRAMING
dans CaptureRequest
sur True
, puis vérifie si tous les visages de la scène d'origine peuvent être détectés lorsque l'état converge (c'est-à-dire lorsque AUTOFRAMING_STATE
dans CaptureResult
est défini sur AUTOFRAMING_STATE_CONVERGED
).
API testées :
android.hardware.camera2.CameraCharacteristics#CONTROL_AUTOFRAMING_AVAILABLE
android.hardware.camera2.CaptureRequest#CONTROL_AUTOFRAMING
android.hardware.camera2.CaptureResult#CONTROL_AUTOFRAMING
android.hardware.camera2.CaptureResult#CONTROL_AUTOFRAMING_STATE
OK : les trois visages sont détectés.
test_display_p3
Test de la capture Display P3 au format JPEG à l'aide de l'API ColorSpaceProfiles
. Vérifie que le fichier JPEG capturé comporte un profil ICC approprié dans son en-tête et que l'image contient des couleurs en dehors de la gamme sRGB.
API testées :
android.hardware.camera2.params.ColorSpaceProfiles
android.hardware.camera2.params.SessionConfiguration#setColorSpace
Pass : le fichier JPEG contient un profil ICC Display P3 et des couleurs en dehors de la gamme sRGB.
test_effects
Capture le frame pour les effets d'appareil photo compatibles et vérifie s'ils sont générés correctement. Le test ne vérifie que les effets OFF
et MONO
, mais enregistre des images pour tous les effets compatibles.
API testées :
android.hardware.camera2.CameraCharacteristics#CONTROL_AVAILABLE_EFFECTS
android.hardware.camera2.CaptureRequest#CONTROL_EFFECT_MODE
Pass : capture l'image de la scène avec les effets OFF
et une image monochrome avec les effets définis sur MONO
.
Figure 99 : test_effects_MONO.
test_exposure_keys_consistent
Ce test compare la luminance moyenne d'une capture avec AE activé à celle d'une capture avec AE désactivé qui applique manuellement les paramètres d'exposition (sensibilité, durée d'exposition, durée de la trame, post-boost de la sensibilité brute) reçus dans le CaptureResult
de la capture avec AE activé.
API testées :
android.hardware.camera2.CaptureRequest#SENSOR_SENSITIVITY
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
android.hardware.camera2.CaptureRequest#SENSOR_FRAME_DURATION
android.hardware.camera2.CaptureRequest#CONTROL_POST_RAW_SENSITIVITY_BOOST
android.hardware.camera2.CaptureResult#SENSOR_SENSITIVITY
android.hardware.camera2.CaptureResult#SENSOR_EXPOSURE_TIME
android.hardware.camera2.CaptureResult#SENSOR_FRAME_DURATION
android.hardware.camera2.CaptureResult#CONTROL_POST_RAW_SENSITIVITY_BOOST
Pass : la différence relative de luminance entre les deux captures est inférieure à 4 %.
test_format_combos
Teste différentes combinaisons de formats de sortie.
API testées :
android.hardware.camera2.CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP
android.hardware.camera2.params.StreamConfigurationMap#getOutputSizes()
android.hardware.camera2.CameraCaptureSession#captureBurst()
Pass (Réussite) : toutes les combinaisons sont correctement capturées.
test_num_faces
Teste la détection des visages.
API testées :
android.hardware.camera2.CaptureResult#STATISTICS_FACES
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Pass (Passer) : détecte trois visages.
Figure 100 : Exemple de mode 1 de détection des visages test_num_faces.
test_reprocess_uv_swap
Vérifie que le retraitement YUV ne permute pas les plans U et V. Pour ce faire, la somme des différences absolues (SAD) entre l'image retravaillée et une capture non retravaillée est calculée. Si l'échange des plans U et V de sortie de la capture retravaillée entraîne une augmentation de la SAD, on suppose que la sortie comporte les plans U et V corrects.
API testées :
android.hardware.camera2.CameraDevice#createCaptureSession
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_YUV_REPROCESSING
android.hardware.camera2.CaptureRequest#EDGE_MODE
android.hardware.camera2.CaptureResult#NOISE_REDUCTION_MODE
Pass (Passer) : les plans U et V ne sont pas permutés.
Figure 101 : Exemple test_reprocess_uv_swap.
scene2_b
test_preview_num_faces
Teste la détection de visage en aperçu avec une plus grande diversité de carnations dans les scènes de visage.
API testées :
android.hardware.camera2.CaptureResult#STATISTICS_FACES
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Pass : détecte trois visages avec des points de repère dans les cadres de délimitation des visages.
Figure 102 : exemple de mode 1 de détection des visages test_num_faces.
test_yuv_jpeg_capture_sameness
Capture deux images à l'aide des plus grands formats YUV et JPEG courants avec le même format d'image que le plus grand format JPEG, sans dépasser une résolution de 1 920 x 1 440 pixels.
Définit jpeg.quality
sur 100 et capture une requête à deux surfaces. Convertit les deux images en tableaux RVB et calcule la différence RMS (Root Mean Square) 3D entre les deux images.
De plus, ce test vérifie que les sorties YUV pour tous les cas d'utilisation de flux compatibles sont raisonnablement similaires à celles du YUV avec le cas d'utilisation STILL_CAPTURE
.
API testées :
android.hardware.camera2.CameraCharacteristics#SCALER_AVAILABLE_STREAM_USE_CASES
android.hardware.camera2.CaptureRequest#JPEG_QUALITY
android.graphics.ImageFormat#JPEG
Pass : les images YUV et JPEG du cas d'utilisation STILL_CAPTURE
présentent une différence RMS (valeur quadratique moyenne d'un signal) inférieure à 3 %. Les images YUV de tous les cas d'utilisation compatibles présentent une différence RMS inférieure à 10 % par rapport aux images YUV du cas d'utilisation STILL_CAPTURE
.
scene2_c
test_num_faces
Teste la détection des visages avec une plus grande diversité de carnations dans les scènes de visages.
API testées :
android.hardware.camera2.CaptureResult#STATISTICS_FACES
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Pass (Passer) : détecte trois visages.
Figure 103 : exemple de mode de détection des visages test_num_faces.
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.
Pass : la latence de capture JPEG camera2 doit être inférieure à 1 000 ms pour la résolution 1080p, comme mesuré par le test de performances de la caméra CTS dans les conditions d'éclairage ITS (3 000 K) pour les deux caméras principales.
test_camera_launch_perf_class
Teste la latence de lancement de l'appareil photo pour la classe de performances S, comme indiqué dans la section 2.2.7.2 Appareil photo du CDD.
Pass : la latence de démarrage de Camera2 (ouverture de la caméra au premier frame d'aperçu) doit être inférieure à 600 ms, comme mesuré par le test de performances de la caméra CTS dans les conditions d'éclairage ITS (3 000 K) pour les deux caméras principales.
test_default_camera_hdr
Vérifie que la capture par défaut de l'appareil photo est Ultra HDR pour la classe de performances 15, comme indiqué dans la section 2.2.7.2 Appareil photo du CDD.
Pass : la capture de paquets d'appareil photo par défaut DOIT être Ultra HDR pour un appareil de classe de performances 15.
scene2_d
test_preview_num_faces
Teste la détection de visage en aperçu avec une plus grande diversité de carnations dans les scènes de visage.
API testées :
android.hardware.camera2.CaptureResult#STATISTICS_FACES
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Pass : détecte trois visages avec des points de repère dans les cadres de délimitation des visages.
scene2_e
test_continuous_picture
50 cadres en résolution VGA sont capturés avec le premier paramètre de la requête de capture :android.control.afMode = 4 (CONTINUOUS_PICTURE).
API testées :
android.hardware.camera2.CaptureRequest#CONTROL_AF_MODE
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
android.hardware.camera2.CaptureResult#CONTROL_AF_STATE
android.hardware.camera2.CaptureResult#CONTROL_AWB_STATE
Pass (Passer) : le système 3A se stabilise à la fin d'une capture de 50 cadres.
test_num_faces
Teste la détection des visages avec une plus grande diversité de carnations dans les scènes de visages.
API testées :
android.hardware.camera2.CaptureResult#STATISTICS_FACES
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Succès : trois visages sont détectés.
scene2_f
scene2_f
comporte trois visages sur un arrière-plan blanc et des vêtements blancs. Les visages présentent une large gamme de tons de peau et un contraste élevé avec l'arrière-plan.
Figure 104 : exemple de scène2_f.
test_preview_num_faces
Teste la détection des visages avec une plus grande diversité de carnations dans les scènes de visages.
API testées :
android.hardware.camera2.CaptureResult#STATISTICS_FACES
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Pass : détecte trois visages avec des points de repère dans les cadres de délimitation des visages.
Figure 105 : exemple test_num_faces_fd_mode_1.
scene2_g
scene2_g
comporte trois visages de profil sur un arrière-plan blanc et des vêtements blancs.
Les visages présentent une large gamme de tons de peau et un contraste élevé avec l'arrière-plan.
Figure 106 : exemple de scène2_g.
test_preview_num_faces
Teste la détection des visages avec une plus grande diversité de carnations dans les scènes de visages.
API testées :
android.hardware.camera2.CaptureResult#STATISTICS_FACES
android.hardware.camera2.CaptureResult#STATISTICS_FACE_DETECT_MODE
Pass : détecte trois visages avec des points de repère dans les cadres de délimitation des visages.
Figure 107 : exemple de test_preview_num_faces.
scene3
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. C'est pourquoi 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. Le graphique doit être dans la bonne orientation pour que le sélecteur de graphiques fonctionne de manière optimale.
test_edge_enhancement
Vérifie que le paramètre android.edge.mode
est appliqué correctement. Capture des images non retravaillées pour chaque mode de bordure et renvoie la netteté de l'image de sortie et les métadonnées de résultat de capture. Traite une requête 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.
Pass : le mode HQ
(2) est plus net que le mode OFF
(0). Le mode FAST
(1) est plus net que le mode OFF
. Le mode HQ
est plus net ou égal au mode FAST
.
API testées :
Paramètres de la caméra concernés :
EDGE_MODE
Figure 108 : exemple test_edge_enhancement edge=0.
Figure 109 : Exemple de test_edge_enhancement edge=1 (mode rapide).
Figure 110 : exemple de test_edge_enhancement edge=2 (mode haute qualité).
test_flip_mirror
Vérifie si l'image est correctement orientée conformément à la section 7.5.2 Caméra avant du CDD.
Les images en miroir, inversées ou pivotées peuvent être identifiées par le losange situé près du centre.
Pass : l'image n'est pas inversée, mise en miroir ni pivotée.
Figure 111 : Exemple de correctif de scène test_flip_mirror.
test_imu_drift
Vérifie si l'unité de mesure inertielle (IMU) produit une sortie stable pendant 30 secondes lorsque l'appareil est à l'arrêt et qu'il capture un aperçu haute définition.
API testées :
android.hardware.Sensor
android.hardware.SensorEvent
android.hardware.Sensor#TYPE_GYROSCOPE
android.hardware.Sensor#TYPE_ROTATION_VECTOR
Pass :
- La dérive du gyroscope est inférieure à 0,01 rad pendant la durée du test.
- La variance de la lecture du gyroscope est inférieure à 1E-7 rad2/s2/Hz pendant la durée du test.
- La dérive du vecteur de rotation est inférieure à 0,01 rad pendant la durée du test.
- (Pas encore obligatoire) La dérive du gyroscope est inférieure à 1 degré par seconde.
Figure 112 : Exemple de dérive du gyroscope test_imu_drift.
Figure 113 : Exemple de dérive du vecteur de rotation test_imu_drift.
test_landscape_to_portrait
Vérifie si le forçage du mode paysage/portrait fonctionne correctement pour les capteurs orientés paysage.
API testées :
android.hardware.camera2.CameraCharacteristics#SCALER_AVAILABLE_ROTATE_AND_CROP_MODES
android.hardware.camera2.CameraCharacteristics#SENSOR_ORIENTATION
android.hardware.camera2.CameraCharacteristics#getCameraCharacteristics
Pass (Passer) : le test identifie un graphique avec la rotation attendue (0 degrés lorsque le forçage du mode paysage/portrait est désactivé, 90 degrés lorsqu'il est activé).
Figure 114 : exemple de test_landscape_to_portrait.
test_lens_movement_reporting
Vérifie si l'indicateur de mouvement de l'objectif est correctement signalé. Capture une rafale de 24 images, les 12 premières à la distance de mise au point optimale (trouvé par 3A) et les 12 dernières à la distance de mise au point minimale. Vers le frame 12, l'objectif bouge, ce qui entraîne une baisse de la netteté. La netteté se stabilise finalement lorsque l'objectif atteint sa position finale.
L'indicateur de mouvement de l'objectif doit être affirmé dans tous les frames où la netteté est intermédiaire à la netteté dans les premiers frames où l'objectif est fixe à la distance focale optimale, et dans les derniers frames où l'objectif est fixe à la distance focale minimale. Le frame exact sur lequel l'objectif se déplace n'est pas important : l'important est que l'indicateur de mouvement soit affirmé lorsque l'objectif se déplace.
API testées :
android.hardware.camera2.CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE
android.hardware.camera2.CaptureResult#LENS_STATE
android.hardware.camera2.CaptureResult#LENS_FOCUS_DISTANCE
android.hardware.camera2.CaptureResult#SENSOR_TIMESTAMP
android.hardware.camera2.CaptureRequest#LENS_FOCUS_DISTANCE
Pass (Passer) : l'indicateur de mouvement de l'objectif est True
dans le frame avec un changement de netteté.
Mécanismes d'échec :
lens_moving: True
(android.hardware.camera2.CaptureResult#LENS_STATE
= 1) danstest_log.DEBUG
n'est affirmé que dans les images où la netteté ne change pas.- Les images avec
lens_moving: False
(android.hardware.camera2.CaptureResult#LENS_STATE
= 0) danstest_log.DEBUG
présentent une différence de netteté par rapport aux premières images à la distance focale optimale ou aux dernières images à la distance de mise au point minimale.
test_reprocess_edge_enhancement
Vérifie si les méthodes de retraitement compatibles pour l'amélioration des contours fonctionnent correctement. Traite une requête de capture avec un mode de bord de retraitement donné et compare différents modes de capture avec les modes de bord de retraitement désactivés.
API testées :
android.hardware.camera2.CaptureRequest#EDGE_MODE
android.hardware.camera2.CaptureRequest#REPROCESS_EFFECTIVE_EXPOSURE_FACTOR
Pass : la netteté des différents modes de bordure est correcte. HQ
(mode 2) est plus net que OFF
(mode 0), et l'amélioration entre les différents modes est similaire.
Figure 115 : Exemple de graphique test_reprocess_edge_enhancement.
scene4
scene4
se compose d'un cercle noir sur un fond blanc, dans un carré.
Les tests dans scene4 peuvent être sensibles à l'alignement. À partir d'Android 15, vous pouvez donc utiliser check_alignment.py
dans le répertoire d'outils pour activer une vérification de l'unité de test et de l'alignement du graphique.
Figure 116 : exemple de scène 4.
test_30_60fps_preview_fov_match
Vérifie que les vidéos d'aperçu en 30 FPS et 60 FPS ont le même champ de vision. Le test capture deux vidéos, l'une à 30 FPS et l'autre à 60 FPS. Un frame représentatif est sélectionné dans chaque vidéo et analysé pour vérifier que les changements de champ de vision des deux vidéos sont conformes aux spécifications. Vérifie que les proportions du cercle restent constantes, que le centre du cercle reste stable et que le rayon du cercle reste constant.
API testées :
android.hardware.camera2.CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE
android.hardware.camera2.CaptureRequest#SENSOR_FRAME_DURATION
android.hardware.camera2.CaptureRequest#SENSOR_EXPOSURE_TIME
android.hardware.camera2.CaptureResult#LENS_DISTORTION
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
android.hardware.camera2.CaptureResult#LENS_INTRINSIC_CALIBRATION
Passé : les images ne sont pas étirées, le centre des images ne diffère pas de plus de 3 % et le changement maximal de format entre les vidéos en 30 FPS et 60 FPS ne dépasse pas 7,5 %
Mécanismes d'échec :
- La taille du cercle de la vidéo à 30 FPS est très différente de celle de la vidéo à 60 FPS.
- Le cercle de l'image capturée est déformé par le pipeline de traitement.
- Le cercle de l'image capturée est recadré en raison d'une demande de capture avec des proportions extrêmes, ce qui réduit la hauteur ou la largeur de l'image.
- Le cercle de l'image capturée présente un reflet au centre et ne semble pas entièrement rempli.
test_aspect_ratio_and_crop
Vérifie si les images sont déformées ou recadrées de manière inattendue dans le pipeline d'images. Prend en photo un cercle dans tous les formats. Vérifie que le cercle n'est pas déformé, qu'il ne se déplace pas du centre de l'image et qu'il ne change pas de taille de manière incorrecte avec différents formats ou résolutions.
API testées :
android.hardware.camera2.CaptureResult#LENS_DISTORTION
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
android.hardware.camera2.CaptureResult#LENS_INTRINSIC_CALIBRATION
Pass : les images ne sont pas étirées, le centre des images ne diffère pas de plus de 3 % et le champ de vision maximal possible est préservé.
Mécanismes d'échec :
- La caméra n'est pas alignée sur le cercle affiché sur la tablette au centre de la scène capturée.
- Le cercle de l'image capturée est déformé par le pipeline de traitement.
- L'image basse résolution est recadrée deux fois dans le pipeline d'image, ce qui crée un champ de vision différent entre les images haute et basse résolution.
- Le cercle de l'image capturée est recadré en raison d'une demande de capture avec des proportions extrêmes, ce qui réduit la hauteur ou la largeur de l'image.
- Le cercle de l'image capturée présente un reflet au centre et ne semble pas entièrement rempli.
test_multi_camera_alignment
Teste les paramètres de calibrage de la caméra liés au positionnement de la caméra pour les systèmes multicaméras. Prend une photo avec l'une des caméras physiques à l'aide des sous-caméras physiques multicaméras. Détermine le centre du cercle. Projette le centre du cercle sur les coordonnées mondiales pour chaque caméra. Compare la différence entre les centres des cercles des caméras en coordonnées mondiales. Reprojette les coordonnées mondiales en coordonnées de pixel et les compare aux originales pour vérifier leur validité. Compare les tailles des cercles pour vérifier si les longueurs focales des caméras sont différentes.
API testées :
android.hardware.camera2.CameraCharacteristics#getPhysicalCameraIds()
android.hardware.camera2.CameraCharacteristics#LENS_DISTORTION
android.hardware.camera2.CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
android.hardware.camera2.CameraCharacteristics#LENS_INTRINSIC_CALIBRATION
android.hardware.camera2.CameraCharacteristics#LENS_POSE_ROTATION
android.hardware.camera2.CameraCharacteristics#LENS_POSE_TRANSLATION
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
android.hardware.camera2.CaptureRequest#SCALER_CROP_REGION
android.hardware.camera2.CaptureRequest#DISTORTION_CORRECTION_MODE
Pass : les centres et les tailles des cercles sont conformes aux attentes dans les images projetées par rapport aux images capturées à l'aide des données de calibrage de l'appareil photo et des longueurs focales.
Mécanismes d'échec :
LENS_INTRINSIC_CALIBRATION
,LENS_POSE_TRANSLATION
etLENS_POSE_ROTATION
sont des valeurs de conception et non des données de calibrage réelles.- Le système d'appareil photo n'est pas adapté à la configuration de test, par exemple, pour tester un système d'appareil photo grand angle et un système d'appareil photo ultra grand angle avec le banc d'essai RFoV. Pour en savoir plus, consultez la question 1 des questions fréquentes sur la solution ITS-in-a-box pour caméras.
test_preview_aspect_ratio_and_crop
Comme le test test_aspect_ratio_and_crop
pour les captures d'images fixes, vérifie les formats d'aperçu compatibles pour s'assurer que les cadres d'aperçu ne sont pas étirés ni recadrés de manière inappropriée. Vérifie que le format du cercle ne change pas, que les images recadrées conservent le cercle au centre du cadre et que la taille du cercle ne change pas pour un format constant ou avec des résolutions différentes (vérification du champ de vision).
API testées :
android.hardware.camera2.CaptureResult#LENS_DISTORTION
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
android.hardware.camera2.CaptureResult#LENS_INTRINSIC_CALIBRATION
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.media.MediaRecorder
android.media.CamcorderProfile
Pass : les images ne sont pas étirées, le centre des images ne diffère pas de plus de 3 % et le champ de vision maximal possible est préservé.
test_preview_stabilization_fov
Vérifie les tailles d'aperçu compatibles pour vous assurer que le champ de vision est recadré de manière appropriée. Le test capture deux vidéos, l'une avec la stabilisation de l'aperçu ON
et l'autre avec la stabilisation de l'aperçu OFF
. Un frame représentatif est sélectionné dans chaque vidéo et analysé pour vérifier que les changements de champ de vision dans les deux vidéos sont conformes aux spécifications.
API testées :
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.media.MediaRecorder
android.media.CamcorderProfile
Pass : le format du cercle reste à peu près constant, l'emplacement du centre du cercle reste stable et la taille du cercle ne change pas de plus de 20 %.
test_video_aspect_ratio_and_crop
Prend des vidéos d'un cercle dans un carré dans tous les formats vidéo. Extraction des images clés et vérification que le format du cercle ne change pas, que les images recadrées conservent le cercle au centre et que la taille du cercle ne change pas pour un format constant ou avec une résolution différente (vérification du champ de vision).
API testées :
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.hardware.camera2.CaptureResult#LENS_DISTORTION
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
android.hardware.camera2.CaptureResult#LENS_INTRINSIC_CALIBRATION
android.media.MediaRecorder
android.media.CamcorderProfile
Pass : les images vidéo ne sont pas étirées, le centre des images ne diffère pas de plus de 3 % et le champ de vision maximal possible est préservé.
scene5
scene5
nécessite une scène grise éclairée uniformément. Pour cela, un diffuseur est placé sur l'objectif de la caméra. Nous vous recommandons le diffuseur suivant : www.edmundoptics.com/optics/window-diffusers/optical-diffusers/opal-diffusing-glass/46168
.
Pour préparer la scène, fixez un diffuseur devant la caméra et orientez-la vers une source lumineuse d'environ 2 000 lux. Les images capturées pour scene5
nécessitent un éclairage diffus sans éléments visibles. Voici un exemple d'image :
Figure 117 : Exemple de capture de scène 5.
test_lens_shading_and_color_uniformity
Vérifie que la correction de l'ombre de l'objectif est appliquée de manière appropriée et que la couleur d'une scène monochrome uniforme est répartie uniformément. Effectue ce test sur un frame YUV avec 3A automatique. L'ombre de l'objectif est évaluée en fonction du canal Y. Mesure la valeur moyenne de l'axe Y pour chaque bloc d'échantillon spécifié, puis détermine si l'échantillon est accepté ou non en le comparant à la valeur de l'axe Y au centre. Le test d'uniformité des couleurs est évalué dans les espaces rouge-vert et bleu-vert.
API testées :
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AWB_MODE
Pass (Passer) : pour réussir le test, la variance des valeurs rouge-vert et bleu-vert doit être inférieure à 20 % à la circonférence spécifiée de l'image.
scene6
scene6
est une grille de repères ArUco identifiables de manière unique.
Les tests dans scene6
peuvent être sensibles à l'alignement. À partir de la version 15, vous pouvez donc utiliser check_alignment.py
dans le répertoire des outils pour activer une vérification de l'unité de test et de l'alignement des graphiques.
Figure 118 : exemple de scène6.
test_in_sensor_zoom
Teste le comportement de la fonctionnalité de zoom dans le capteur de l'appareil photo, qui produit des images brutes recadrées.
Lorsque le cas d'utilisation du flux est défini sur CROPPED_RAW
, le test effectue deux captures sur la plage de zoom, une image brute à champ de vision complet et une image brute recadrée. Le test convertit les images en tableaux RVB, réduit la taille de l'image brute recadrée en taille réelle à la taille indiquée par SCALER_RAW_CROP_REGION
et calcule la différence RMS 3D entre les deux images.
API testées :
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.hardware.camera2.CameraMetadata#SCALER_AVAILABLE_STREAM_USE_CASES_CROPPED_RAW
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
android.hardware.camera2.CaptureResult#SCALER_RAW_CROP_REGION
Pass : la différence RMS 3D entre l'image brute recadrée et réduite et l'image brute complète du champ de vision est inférieure au seuil défini dans le test.
test_zoom
Teste le comportement du zoom de l'appareil photo de l'objectif ultra grand angle à l'objectif grand angle. Prend des captures sur la plage de zoom et vérifie si les repères ArUco deviennent plus grands à mesure que la caméra fait un zoom avant. Le test vérifie également si la position du repère central change de manière prévisible à chaque capture. La distance entre le centre du repère central et le centre de l'image peut changer à un taux constant par rapport au rapport de zoom jusqu'à un changement physique de la caméra, ou elle peut changer de manière monotone vers l'emplacement du même repère après un changement physique de la caméra. L'application Jetpack Camera (JCA) doit être installée sur l'appareil avant les tests.
API testées :
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
android.hardware.camera2.CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
Pass (Échec) : la taille relative du repère ArUco capturé est exacte par rapport au format de zoom demandé pour vérifier que l'appareil photo fait un zoom correct, et la distance du repère au centre de l'image change selon les critères indiqués dans la description du test.
Figure 119 : test_zoom pour trouver le contour du repère ArUco le plus proche du centre.
test_low_latency_zoom
Teste le comportement du zoom à faible latence de la caméra. Effectue des captures sur la plage de zoom avec android.control.settingsOverride = 1 (SETTINGS_OVERRIDE_ZOOM)
et vérifie si les repères des images de sortie correspondent aux rapports de zoom dans les métadonnées de capture. La même session de capture d'appareil photo est utilisée pour converger 3A et effectuer des captures.
API testées :
android.hardware.camera2.CameraCharacteristics#CONTROL_AVAILABLE_SETTINGS_OVERRIDES
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
android.hardware.camera2.CaptureRequest#CONTROL_SETTINGS_OVERRIDE
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
android.hardware.camera2.CaptureResult#CONTROL_SETTINGS_OVERRIDE
Pass : la taille relative du repère capturé est exacte par rapport aux métadonnées des résultats du rapport de zoom.
test_preview_video_zoom_match
Vérifie que, lors de l'enregistrement et du zoom, l'aperçu vidéo et la sortie vidéo affichent et enregistrent la même sortie. Calcule la taille du repère le plus proche du centre à différents niveaux de zoom et vérifie si la taille du repère augmente à mesure que le niveau de zoom augmente.
API testées :
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
android.hardware.camera2.CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
Pass (Passer) : la taille relative du repère capturé est exacte par rapport au rapport de zoom demandé dans la vidéo et l'aperçu.
Figure 120 HD_1280x720_key_frame.png (avant le zoom).
Figure 121 : preview_1280x720_key_frame.png (avant le zoom).
Figure 122. HD_1280x720_key_frame.png (après zoom).
Figure 123 : preview_1280x720_key_frame.png (après zoom).
test_preview_zoom
Vérifie que le rapport de zoom de chaque frame d'aperçu correspond aux métadonnées de capture correspondantes de l'objectif ultra grand-angle à l'objectif grand-angle. Le test prend des images d'aperçu sur la plage de zoom et trouve le repère ArUco le plus proche du centre. Le test vérifie ensuite si la position du repère central change de manière prévisible à chaque capture. La distance entre le centre du repère central et le centre de l'image peut changer à un taux constant par rapport au rapport de zoom jusqu'à un changement physique de la caméra, ou elle peut changer de manière monotone vers l'emplacement du même repère après un changement physique de la caméra.
API testées :
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
android.hardware.camera2.CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
Pass : la taille relative du repère ArUco sélectionné est exacte pour le rapport de zoom indiqué du résultat de capture correspondant pour tous les cadres d'aperçu. La distance relative du repère sélectionné par rapport au centre de l'image est exacte pour le rapport de zoom indiqué du résultat de capture correspondant de tous les cadres d'aperçu.
Figure 124 : images test_preview_zoom montrant le repère sélectionné le plus proche du centre
test_session_characteristics_zoom
Teste la plage de rapport de zoom pour toutes les configurations de session compatibles listées dans CameraCharacteristics#INFO_SESSION_CONFIGURATION_QUERY_VERSION
.
Pour chacune de ces configurations, si CameraDeviceSetup#isSessionConfigurationSupported
renvoie true
, le test vérifie que la plage de rapport de zoom renvoyée dans CameraDeviceSetup#getSessionCharacteristics
peut être atteinte.
API testées :
android.hardware.camera2.CameraCharacteristics#INFO_SESSION_CONFIGURATION_QUERY_VERSION
android.hardware.camera2.CameraDevice.CameraDeviceSetup#isSessionConfigurationSupported
android.hardware.camera2.CameraDevice.CameraDeviceSetup#getSessionCharacteristics
Pass : les rapports de zoom minimal et maximal peuvent être atteints pour chaque SessionConfiguration
compatible listé dans CameraCharacteristics#INFO_SESSION_CONFIGURATION_QUERY_VERSION
.
scene7
scene7
est un cadre rectangulaire divisé en quatre quadrants égaux, chacun rempli d'une couleur différente. Au centre du rectangle se trouve un graphique de bord incliné pour vérifier la netteté. Quatre repères ArUco sont alignés sur les quatre coins extérieurs du rectangle pour vous aider à obtenir des coordonnées précises du cadre rectangulaire principal à différents niveaux de zoom.
Figure 125 : scène 7.
test_multi_camera_switch
Ce test vérifie que, lors de l'enregistrement en mode Aperçu avec différents rapports de zoom, le passage entre les objectifs ultra grand-angle (UW) et grand-angle (W) donne des valeurs RVB similaires.
Le test utilise différents rapports de zoom dans la plage prédéfinie pour effectuer un enregistrement d'aperçu dynamique et identifier le point auquel la caméra physique change. Ce point marque le passage de l'objectif ultra grand-angle à l'objectif grand-angle.
Les images capturées au point d'intersection et avant celui-ci sont analysées pour l'exposition automatique (AE), la balance des blancs automatique (AWB) et la mise au point automatique (AF).
La vérification AE vérifie que la variation de la luminance se situe dans la plage attendue pour les images des objectifs UW et W. La vérification de l'AWB vérifie que les rapports rouge-vert et bleu-vert sont compris dans les valeurs seuil pour les images de l'objectif UW et de l'objectif W. La vérification de la mise au point automatique évalue la valeur d'estimation de la netteté en fonction de l'ampleur moyenne du gradient entre les images de l'objectif UW et de l'objectif W.
Lors de l'exécution de ce test, si l'effet moiré interfère avec les résultats, utilisez une tablette à plus haute résolution parmi la liste des tablettes approuvées par la Camera ITS.
API testées :
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
android.media.CamcorderProfile
android.media.MediaRecorder
Pass (Réussite) : pour que le test soit validé, les vérifications de l'AE et de l'AWB doivent être effectuées. Les résultats de la vérification de l'AF ne sont utilisés qu'à des fins de journalisation. Voici les critères de chaque vérification :
- Vérification de l'AE : la variation de la luminance (valeur Y) entre les images de l'objectif UW et de l'objectif W doit être inférieure à 4 % pour tous les patches de couleur si l'appareil est compatible avec
ae_regions
etawb_regions
. Si seulae_regions
est accepté, seules les valeurs de la zone de couleur grise doivent répondre aux critères. - Vérification de l'AWB : la différence entre les valeurs rouge-vert et bleu-vert pour les images de l'objectif UW et W doit être inférieure à 3 % pour la zone de couleur grise et inférieure à 10 % pour les autres zones de couleur si l'appareil est compatible avec
ae_regions
etawb_regions
. - Vérification de la mise au point automatique : la netteté de l'image pour la capture avec l'objectif W doit être supérieure à celle de la capture avec l'objectif ultra grand-angle.
Figure 126 Tache grise prise avec l'objectif ultra grand angle.
Figure 127 Tache grise prise avec l'objectif W.
scene8
scene8
est un cadre rectangulaire divisé en quatre régions égales, chacune contenant un portrait pris avec une exposition différente ou superposé à une nuance de couleur différente (teinte bleue, exposition accrue, exposition réduite, teinte jaune).
Quatre repères ArUco sont alignés sur les quatre coins extérieurs du rectangle pour obtenir des coordonnées précises du cadre rectangulaire principal.
Figure 128 : exemple de scène 8.
test_ae_awb_regions
Vérifie que les valeurs RVB et luma diffèrent lors de l'enregistrement d'aperçu dans différentes régions AE et AWB.
Le test enregistre un enregistrement d'aperçu de 8 secondes, effectuant une mesure AE et AWB sur chaque quadrant pendant 2 secondes chacun. Le test extrait ensuite un frame de l'enregistrement d'aperçu de chaque région et utilise les frames extraits pour effectuer les vérifications AE et AWB suivantes :
- Vérification AE : vérifie que la mesure du cadre de la région avec une exposition réduite a une valeur de luma supérieure à 1 % par rapport à la mesure du cadre de la région avec une exposition accrue. Cela permet de vérifier que les images sont éclaircies lors de la mesure d'une région sombre.
- Vérification de l'AWB : vérifie que le rapport entre le rouge et le bleu (des valeurs RVB moyennes de l'image) dans le frame avec la région de mesure bleue est supérieur à 2 % par rapport au frame avec la région de mesure jaune. Cela permet de vérifier que les images ont une valeur RVB équilibrée lors de la mesure d'une région jaune (chaude) ou bleue (froide).
API testées :
android.hardware.camera2.CaptureRequest#CONTROL_AWB_REGIONS
android.hardware.camera2.CaptureRequest#CONTROL_AE_REGIONS
android.hardware.camera2.CameraCharacteristics#CONTROL_MAX_REGIONS_AE
android.hardware.camera2.CameraCharacteristics#CONTROL_MAX_REGIONS_AWB
Pass (Passer) : les vérifications AE et AWB sont toutes deux réussies.
Figure 129 Mesure du cadre dans la zone sombre avec une exposition plus élevée.
Figure 130 Métrage du frame dans une zone plus claire avec une exposition réduite.
Mécanismes d'échec :
La détection précise des quatre repères ArUco est essentielle pour ce test. Si la détection initiale échoue, le système tente une deuxième détection à l'aide d'une version en noir et blanc de l'image. L'image en niveaux de gris suivante représente l'étape de traitement secondaire :
Figure 131 : Mauvais alignement des repères ArUco.
test_color_correction_mode_cct
Tests COLOR_CORRECTION_MODE
sur différentes températures et teintes de couleur, en vérifiant les modifications des ratios RVB par rapport à la scène de capture, scene8.
API testées :
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_MODE
android.hardware.camera2.CaptureResult#COLOR_CORRECTION_MODE
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_COLOR_TEMPERATURE
android.hardware.camera2.CaptureResult#COLOR_CORRECTION_COLOR_TEMPERATURE
android.hardware.camera2.CaptureRequest#COLOR_CORRECTION_COLOR_TINT
android.hardware.camera2.CaptureResult#COLOR_CORRECTION_COLOR_TINT
android.hardware.camera2.CameraCharacteristics#COLOR_CORRECTION_COLOR_TEMPERATURE_RANGE
android.hardware.camera2.CameraMetadata#COLOR_CORRECTION_MODE_CCT
android.hardware.camera2.CameraCharacteristics#COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES
Pass (Passer) : les ratios RVB affichent les augmentations ou diminutions prévues par rapport aux températures et teintes de couleur sélectionnées.
Tester les critères de saut
Le test test_color_correction_mode_cct
est ignoré si l'un des critères suivants est rempli :
- Le premier niveau d'API (
first_api_level
) de l'appareil est de 35 ou inférieur. - L'appareil n'annonce pas
COLOR_CORRECTION_MODE_CCT
dansCOLOR_CORRECTION_AVAILABLE_ABERRATION_MODES
.
scene9
scene9
se compose de milliers de cercles de taille et de couleur aléatoires pour créer une scène à répétabilité très faible afin de tester les algorithmes de compression JPEG.
Figure 132 : exemple de scène9.
test_jpeg_high_entropy
Vérifie que la compression JPEG de l'appareil photo fonctionne sur scene9
avec une entropie élevée et que le facteur de qualité JPEG est défini sur 100 %. Le facteur de zoom est augmenté pour vérifier que la scène affichée sur la tablette remplit le champ de vision de la caméra.
API testées :
Passé : le fichier JPEG est compressé, écrit et lu correctement à partir du disque.
test_jpeg_quality
Teste la qualité de compression JPEG de l'appareil photo. Étapes de qualité JPEG via android.jpeg.quality
et vérification que les tables de quantification changent correctement.
API testées :
Pass : la matrice de quantification diminue à mesure que la qualité augmente. (La matrice représente le facteur de division.)
Figure 133 : Moyennes de la matrice DQT luma et chroma de la caméra arrière du Pixel 4 par rapport à la qualité JPEG.
Figure 134 Exemple de test ayant échoué.
scene_video
scene_video
est une scène vidéo composée de quatre cercles de couleurs différentes qui se déplacent d'avant en arrière à différentes fréquences d'images sur un fond blanc.
Figure 135 : exemple de scene_video.
test_preview_frame_drop
Vérifie que le débit d'images de l'aperçu demandé est maintenu avec une scène dynamique. Ce test s'exécute sur toutes les caméras exposées à des applications tierces.
API testées :
android.hardware.camera2.CameraCharacteristics#CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.hardware.camera2.CaptureResult#CONTROL_AE_TARGET_FPS_RANGE
android.media.CamcorderProfile
android.media.MediaRecorder
Pass (Échec) : la fréquence d'images de l'aperçu est au maximum de la plage de fréquence d'images demandée, et la variation moyenne entre les images consécutives est inférieure à la tolérance relative définie dans le test.
scene_extensions
Les tests scene_extensions
sont destinés aux extensions d'appareil photo et doivent utiliser Camera ITS-in-a-Box, car ils nécessitent un contrôle précis de l'environnement de test. De plus, toutes les fuites de lumière doivent être contrôlées. Vous devrez peut-être recouvrir le banc d'essai, l'appareil sous test et la tablette d'un drap de protection, et éliminer les fuites de lumière de l'écran avant de l'appareil sous test.
scene_hdr
La scène scene_hdr
se compose d'un portrait à gauche et d'un code QR à faible contraste à droite.
Figure 136 : exemple de scene_hdr.
test_hdr_extension
Teste l'extension HDR. Prend des captures avec et sans l'extension activée, et vérifie si l'extension rend le code QR plus détectable.
API testées :
android.hardware.camera2.CameraExtensionCharacteristics#getSupportedExtensions
android.hardware.camera2.CameraExtensionSession#capture
Pass : l'extension HDR réduit le nombre de modifications de contraste nécessaires pour détecter le code QR ou réduit le dégradé sur le code QR.
scene_low_light
La scène scene_low_light
se compose d'une grille de carrés de différentes nuances de gris sur un arrière-plan noir, et la grille de carrés est délimitée par un contour rouge. Les carrés sont disposés selon une orientation de courbe de Hilbert.
Figure 137 : exemple de scène_low_light.
test_night_extension
Teste l'extension Night. Effectue des captures avec l'extension activée et effectue les opérations suivantes :
- Détecte la présence de 20 carrés
- Calcule la luminance limitée par chaque carré
- Calcule la valeur luma moyenne des six premiers carrés en fonction de l'orientation de la grille de la courbe de Hilbert
- Calcule la différence de valeur luma des carrés consécutifs (par exemple, square2 - square1) jusqu'aux carrés 5 et 6 (square6 - square5), puis calcule la moyenne des cinq différences calculées.
Pour les appareils équipés d'Android 16 ou version ultérieure, la requête de capture inclut une région limitée correspondant au rectangle délimitant la grille de carrés. Cette addition modifie les critères de passage du seuil.
API testées :
android.hardware.camera2.CameraExtensionCharacteristics#getSupportedExtensions
android.hardware.camera2.CameraExtensionSession#capture
Pass :
- Pour les appareils équipés d'Android 16 ou version ultérieure, la valeur luma moyenne des six premiers carrés doit être d'au moins 80, et la différence moyenne de la valeur luma des carrés consécutifs jusqu'aux carrés 5 et 6 doit être d'au moins 18,75.
- Pour les appareils équipés d'Android 15 ou version antérieure, la valeur luma moyenne des six premiers carrés doit être d'au moins 85, et la différence moyenne de la valeur luma des carrés consécutifs jusqu'aux carrés 5 et 6 doit être d'au moins 17.
Le graphique de luminance suivant montre à quoi ressemble un résultat de test réussi.
Figure 138. Exemple de test réussi pour une scène nocturne par faible luminosité.
test_low_light_boost_extension
Teste le mode AE avec amplification luminosité faible. Si Camera2 est compatible avec le mode AE d'amplification de la luminosité, ce test est effectué pour Camera2. Si l'extension de l'appareil photo en mode Nuit est compatible et qu'elle prend en charge le mode AE avec amplification de la luminosité, ce test est également effectué pour l'extension de l'appareil photo en mode Nuit. Ce test définit le mode AE sur le renforcement de la lumière faible, extrait un frame de l'aperçu et effectue les opérations suivantes :
- Détecte la présence de 20 boîtes
- Calcule la luminance limitée par chaque cadre
- Calcule la valeur luma moyenne des six premiers carrés en fonction de l'orientation de la grille de la courbe de Hilbert
- Calcule la différence de valeur luma des carrés consécutifs (par exemple, square2 - square1) jusqu'aux carrés 5 et 6 (square6 - square5), puis calcule la moyenne des cinq différences calculées.
Pour les appareils équipés d'Android 16 ou version ultérieure, la requête de capture inclut une région limitée correspondant au rectangle délimitant la grille de carrés. Cette addition modifie les critères de passage du seuil.
API testées :
android.hardware.camera2.CameraCharacteristics.CONTROL_AE_AVAILABLE_MODES
android.hardware.camera2.CameraMetadata#CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY
android.hardware.camera2.CameraExtensionCharacteristics#getSupportedExtensions
Pass :
Pour les appareils exécutant Android 16 ou version ultérieure, la valeur luma moyenne des six premiers carrés doit être d'au moins 54, et la différence moyenne de la valeur luma des carrés consécutifs jusqu'aux carrés 5 et 6 doit être d'au moins 17.
Pour les appareils équipés d'Android 15 ou version antérieure, la valeur luma moyenne des six premiers carrés doit être d'au moins 70, et la différence moyenne de la valeur luma des carrés consécutifs jusqu'aux carrés 5 et 6 doit être d'au moins 18.
scene_tele
Une exigence clé pour les tests scene_tele
est que la distance du graphique doit être d'au moins la distance de mise au point minimale de l'objectif téléobjectif. Étant donné que cette distance de mise au point minimale peut varier d'un appareil à l'autre, vous devez configurer votre configuration en fonction du téléobjectif spécifique.
Figure 139 : Configuration de scene_tele en fonction de la distance de mise au point de l'objectif grand angle et du téléobjectif.
Pour en savoir plus sur la configuration du matériel de test, consultez la section Configuration du bras mécanique d'extension.
scene6_tele
La scène scene6_tele
se compose d'une grille de repères ArUco sur un fond blanc.
Si les captures scene6_tele
semblent surexposées dans le support modulaire, retirez la plaque avant du support modulaire.
Déconnectez le banc d'essais du champ de vision binoculaire de l'extension et retirez le support de téléphone.
Figure 140 Déconnectez le banc d'essais du champ de vision binoculaire de l'extension et retirez le support de téléphone.
Figure 141 Retirez la plaque avant.
test_zoom_tele
Teste le comportement du zoom de l'appareil photo, du grand-angle au téléobjectif. Le test est identique à test_zoom
, mais teste le comportement du zoom de l'appareil photo de l'objectif grand angle au téléobjectif.
API testées :
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
android.hardware.camera2.CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
Pass (Passer) : la taille relative du repère ArUco capturé est exacte par rapport au format de zoom demandé pour vérifier que la caméra fait un zoom correct, et la distance du repère au centre de l'image change selon les critères listés dans test_zoom
.
test_preview_zoom_tele
Teste le comportement du zoom de l'appareil photo pour les cadres d'aperçu de l'objectif grand-angle au téléobjectif. Le test est identique à test_preview_zoom
, mais teste le comportement du zoom de l'appareil photo pour les cadres d'aperçu de l'objectif grand angle au téléobjectif.
API testées :
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
android.hardware.camera2.CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
android.hardware.camera2.CaptureResult#LENS_FOCAL_LENGTH
Pass : la taille relative du repère ArUco capturé est exacte par rapport au format de zoom demandé pour vérifier que l'appareil photo fait un zoom correct, et la distance du repère au centre de l'image change selon les critères listés dans test_preview_zoom.
scene7_tele
scene7_tele
est identique à scene7
, mais configuré pour les tests du téléobjectif. Il s'agit d'un cadre rectangulaire divisé en quatre quadrants égaux, chacun rempli d'une couleur différente. Au centre du rectangle se trouve un graphique de bord incliné pour vérifier la netteté. Quatre repères ArUco sont alignés sur les quatre coins extérieurs du rectangle pour vous aider à obtenir des coordonnées précises du cadre rectangulaire principal à différents niveaux de zoom.
test_multi_camera_switch_tele
Ce test vérifie que lors de l'enregistrement en mode Aperçu avec différents rapports de zoom, le passage entre les objectifs grand-angle (W) et téléobjectif (tele) génère des valeurs RVB similaires.
Le test utilise différents rapports de zoom dans la plage prédéfinie pour effectuer un enregistrement d'aperçu dynamique et identifier le point auquel la caméra physique change. Ce point marque le passage du grand-angle à l'objectif télé.
Les images capturées au point d'intersection et avant celui-ci sont analysées pour l'AE, l'AWB et l'AF.
La vérification AE vérifie que la variation de la luminance se situe dans la plage attendue pour les images avec l'objectif grand-angle et le téléobjectif. La vérification de l'AWB vérifie que les rapports rouge-vert et bleu-vert sont compris dans les valeurs seuils pour les images prises avec l'objectif grand-angle et le téléobjectif. La vérification de la mise au point automatique évalue la valeur d'estimation de la netteté en fonction de l'ampleur moyenne du gradient entre les images prises avec l'objectif grand-angle et le téléobjectif.
API testées :
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
android.media.CamcorderProfile
android.media.MediaRecorder
Pass (Passer) : pour que le test réussisse, les vérifications AE, AWB et AF doivent toutes réussir. Voici les critères de chaque vérification :
- Vérification de l'AE : la variation de la luminance entre les images prises avec l'objectif grand-angle et le téléobjectif doit être inférieure à 4 %.
- Vérification de l'AWB : dans l'espace colorimétrique LAB, le delta C entre le rouge-vert et le bleu-vert pour le grand-angle et le téléobjectif ne doit pas dépasser 10.
- Vérification de la mise au point automatique : la netteté de l'image du téléobjectif doit être supérieure à celle de l'objectif grand-angle.
scene_flash
Les tests scene_flash
nécessitent une scène sombre dans le champ de fusion des capteurs.
test_auto_flash
Vérifie que le flash automatique est déclenché dans une scène sombre pour les caméras arrière et avant. Pour les caméras avant, le flash automatique utilise l'écran pour éclairer la scène, et non un flash physique. Le test vérifie que le flash automatique est déclenché en vérifiant que le centre de l'image de la carte est plus lumineux lorsque le flash automatique est activé. Pour déclencher le flash automatique, les lumières du banc d'essai doivent être éteintes. Elles peuvent être éteintes automatiquement avec le contrôleur Arduino. La scène doit être complètement sombre pour que le test fonctionne correctement. L'application Jetpack Camera (JCA) doit être installée sur l'appareil avant les tests. Le flash automatique pour les caméras arrière repose sur l'état AE pour être déclenché, mais le flash automatique pour les caméras avant ne repose pas sur l'AE et est toujours déclenché.
API testées :
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_AVAILABLE
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
android.hardware.camera2.CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER
android.hardware.camera2.CaptureResult#CONTROL_AE_STATE
android.hardware.camera2.CaptureRequest#FLASH_MODE
Pass (Passer) : le centre de l'image de la carte avec le flash automatique activé est plus clair que l'image de la scène d'origine pour toutes les caméras.
test_flash_strength
Vérifie que le contrôle de l'intensité du flash en mode SINGLE
est implémenté correctement.
Vérifie que si l'appareil est compatible avec le contrôle de l'intensité du flash lors de l'utilisation de l'appareil photo en mode SINGLE
, l'intensité du flash change en fonction des différents niveaux d'intensité demandés. Vérifie que le contrôle de l'intensité du flash fonctionne avec différents AE_MODES
.
Par exemple, si le mode d'exposition automatique est ON
ou OFF
, l'intensité du flash a un effet sur la luminosité. Si le mode est ON_AUTO_FLASH
, l'intensité du flash n'a aucun effet sur la luminosité.
Pour effectuer le test, les voyants du banc d'essai doivent être éteints. Ils peuvent être éteints automatiquement avec le contrôleur Arduino. La scène doit être complètement sombre pour que le test fonctionne correctement.
API testées :
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_STRENGTH_DEFAULT_LEVEL
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_STRENGTH_MAXIMUM_LEVEL
android.hardware.camera2.CameraCharacteristics#FLASH_SINGLE_STRENGTH_DEFAULT_LEVEL
android.hardware.camera2.CameraCharacteristics#FLASH_SINGLE_STRENGTH_MAX_LEVEL
Pass :
Lorsque le mode d'exposition automatique est ON
ou OFF
, la luminosité des zones de l'image augmente à mesure que le niveau d'intensité du flash passe de l'absence de flash à FLASH_SINGLE_STRENGTH_MAX_LEVEL
.
Lorsque le mode d'exposition automatique est ON_AUTO_FLASH
, la différence de luminosité des zones de l'image est dans la tolérance lorsque le niveau d'intensité du flash passe de l'absence de flash à FLASH_SINGLE_STRENGTH_MAX_LEVEL
.
test_led_snapshot
Vérifie que les instantanés LED ne saturent pas ni ne teintent pas l'image.
Ce test ajoute un contrôleur d'éclairage à la boîte de fusion de capteurs pour contrôler les lumières. Lorsque les lumières sont définies sur OFF
, le test effectue une capture avec le mode AUTO_FLASH
défini sur ON
. Lors de cette capture, le test exécute une séquence de précapture avec le déclencheur aePrecapture
défini sur START
et définit l'intent de capture sur Preview
pour effectuer la capture avec flash.
Étant donné que la capture présente un point chaud distinctif en raison du flash, le test calcule la moyenne de l'image flash de l'ensemble de la capture et vérifie si la valeur se situe dans la plage (68, 102). Pour vérifier si l'image est raisonnablement équilibrée en blanc, le test calcule les rapports rouge-vert et bleu-vert, puis vérifie si ces rapports sont compris entre 0,95 et 1,05.
API testées :
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_AVAILABLE
android.hardware.camera2.CaptureRequest#CONTROL_AE_MODE
android.hardware.camera2.CaptureRequest#FLASH_MODE
Pass : les ratios rouge-vert et bleu-vert sont compris entre 0,95 et 1,05. La moyenne de l'image avec flash se situe dans la plage (68, 102).
test_night_mode_indicator
Teste le fonctionnement de l'indicateur de mode Nuit, une fonctionnalité qui indique si l'appareil photo fonctionne dans des conditions de faible luminosité et si une capture d'image fixe avec l'extension du mode Nuit de l'appareil photo est recommandée. Cette fonctionnalité n'est disponible que sur les appareils compatibles avec les extensions de la caméra en mode Nuit.
Ce test vérifie que l'indicateur du mode Nuit reflète correctement les conditions d'éclairage pendant l'aperçu de l'appareil photo. Le test effectue les étapes suivantes :
- Initialisation : le test initialise un
ItsSession
et récupère les propriétés de la caméra. Il établit également une connexion avec le contrôleur d'éclairage. - Conditions d'exclusion : le test est ignoré si l'appareil n'est pas compatible avec le niveau d'API requis ou avec la fonctionnalité d'indicateur de mode nuit.
- Session Camera2 :
- Le test démarre une session de capture d'aperçu à l'aide d'une session
Camera2
. - Le voyant s'allume et un frame d'aperçu est capturé.
- Le test vérifie que l'indicateur du mode nuit est à l'état
OFF
. - Le voyant s'éteint et un frame d'aperçu est capturé.
- Le test vérifie que l'indicateur du mode nuit est à l'état
ON
.
- Le test démarre une session de capture d'aperçu à l'aide d'une session
- Session d'extension de l'appareil photo :
- Le test répète la même procédure que pour la session
Camera2
, mais à l'aide d'une sessionCameraExtension
avec l'extensionEXTENSION_NIGHT
.
- Le test répète la même procédure que pour la session
- Nettoyage : le test ferme
ItsSession
et libère le contrôleur d'éclairage.
API testées :
Pass :
- Lorsque le voyant est allumé, l'indicateur du mode nuit doit être à l'état
OFF
. - Lorsque le voyant est éteint, l'indicateur du mode Nuit doit être à l'état
ON
. - S'applique aux sessions
Camera2
etCameraExtension
.
test_preview_min_frame_rate
Vérifie que la fréquence d'images de l'aperçu diminue correctement dans une scène sombre. Pour que ce test fonctionne correctement, les voyants du banc d'essai doivent être éteints par le contrôleur ou manuellement par l'opérateur de test.
API testées :
android.hardware.camera2.CameraCharacteristics#CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.hardware.camera2.CaptureResult#CONTROL_AE_TARGET_FPS_RANGE
android.media.CamcorderProfile
android.media.MediaRecorder
Pass : la fréquence d'images de l'aperçu est au minimum de la plage de fréquence d'images demandée, et la variation entre les images est inférieure à la tolérance absolue définie dans le test.
test_torch_strength
Vérifie que le contrôle de l'intensité du flash en mode TORCH
est implémenté correctement.
Vérifie que si l'appareil est compatible avec le contrôle de l'intensité du flash lors de l'utilisation de l'appareil photo en mode TORCH
, l'intensité de la lampe de poche change avec les différents niveaux d'intensité demandés. Vérifie que le contrôle de l'intensité du flash fonctionne avec différents AE_MODES
.
Par exemple, si le mode d'exposition automatique est ON
ou OFF
, l'intensité du flash a un effet sur la luminosité. Si le mode est ON_AUTO_FLASH
, l'intensité du flash n'a aucun effet sur la luminosité.
Vérifie que l'intensité de la lampe de poche reste la même pendant toute la durée d'un rafales, en simulant une session de capture vidéo. Pour effectuer le test, les lumières du banc d'essai doivent être éteintes. Elles peuvent être éteintes automatiquement avec le contrôleur Arduino. La scène doit être complètement sombre pour que le test fonctionne correctement.
API testées :
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_STRENGTH_DEFAULT_LEVEL
android.hardware.camera2.CameraCharacteristics#FLASH_INFO_STRENGTH_MAXIMUM_LEVEL
android.hardware.camera2.CameraCharacteristics#FLASH_TORCH_STRENGTH_DEFAULT_LEVEL
android.hardware.camera2.CameraCharacteristics#FLASH_TORCH_STRENGTH_MAX_LEVEL
Pass :
Lorsque le mode d'exposition automatique est ON
ou OFF
, la luminosité des zones de rafales d'images augmente à mesure que le niveau d'intensité du flash augmente, de l'absence de flash à FLASH_TORCH_STRENGTH_MAX_LEVEL
.
Lorsque le mode d'exposition automatique est ON_AUTO_FLASH
, la différence de luminosité des extraits de la rafale d'images est dans la tolérance lorsque le niveau d'intensité du flash passe de l'absence de flash à FLASH_TORCH_STRENGTH_MAX_LEVEL
.
sensor_fusion
Les tests de fusion de capteurs nécessitent un mouvement spécifique du téléphone devant un motif en damier et des repères ArUco. Pour obtenir des résultats optimaux, vérifiez que le graphique de test est monté à plat. Les graphiques qui ne sont pas plats affectent les calculs de rotation pour de nombreux tests. Le graphique doit remplir l'arrière de la boîte de fusion de capteurs en s'imprimant à 43,2 x 43,2 cm. (43 x 43 cm). Les tests sensor_fusion
peuvent être automatisés avec la Sensor Fusion Box.
Figure 142 Graphique de fusion des capteurs.
Figure 143 Graphique de fusion de capteurs qui remplit l'arrière de la boîte de fusion de capteurs.
test_lens_intrinsic_calibration
Vérifie que le centre optique intrinsèque de l'objectif change lorsque l'objectif se déplace en raison de la stabilisation optique de l'image (OIS). Si les échantillons intrinsèques de l'objectif sont compatibles, vérifiez que le centre optique des échantillons intrinsèques de l'objectif change lorsque l'objectif se déplace en raison de l'OIS.
API testées :
android.hardware.camera2.CameraCharacteristics#LENS_INTRINSIC_CALIBRATION
android.media.MediaRecorder
android.media.CamcorderProfile
Pass : le centre optique intrinsèque de l'objectif change de 1 pixel ou plus. Si les échantillons intrinsèques de l'objectif sont acceptés, les centres optiques des échantillons intrinsèques de l'objectif changent d'au moins 1 pixel.
La figure suivante est un exemple de graphique test_lens_intrinsic_calibration
montrant les changements de points principaux en pixels pour chaque frame :
Figure 144 : Exemple de graphique test_lens_intrinsic_calibration montrant les changements de points principaux en pixels pour chaque frame.
test_multi_camera_frame_sync
Vérifie que les codes temporels des images capturés par la caméra logique sont compris dans une plage de 10 ms en calculant les angles des carrés du damier pour déterminer le code temporel.
API testées :
android.hardware.camera2.CameraCharacteristics#LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
android.hardware.camera2.CameraCharacteristics#getPhysicalCameraIds()
android.hardware.camera2.CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
android.hardware.camera2.params.OutputConfiguration#setPhysicalCameraId()
Pass : l'angle entre les images de chaque caméra ne change pas sensiblement lorsque le téléphone est pivoté.
test_preview_distortion
Vérifie que la distorsion est corrigée dans chaque frame d'aperçu pris à différents niveaux de zoom. Pour chaque frame d'aperçu, le test calcule les points idéaux en fonction des paramètres intrinsèques et extrinsèques de la caméra.
Dans l'exemple d'image, les points idéaux sont affichés en vert, et les points réels en rouge. L'erreur de distorsion est calculée en fonction de la distance RMS en pixels entre les points réels et les points idéaux. Les surlignages verts et rouges sur l'image permettent de détecter visuellement la zone d'erreur de distorsion.
Figure 145 Image d'un damier avec les points idéaux en vert et les points réels en rouge.
API testées :
android.hardware.camera2.CameraCharacteristics#CONTROL_ZOOM_RATIO_RANGE
android.hardware.camera2.CaptureRequest#CONTROL_ZOOM_RATIO
android.hardware.camera2.CameraCharacteristics#getPhysicalCameraIds()
android.media.CamcorderProfile
android.media.MediaRecorder
Pass : l'erreur de distorsion normalisée de chaque frame d'aperçu est inférieure au seuil défini dans le test.
test_preview_stabilization
Tests de la vidéo d'aperçu stabilisée qui tourne moins que le gyroscope.
API testées :
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.media.MediaRecorder
android.media.CamcorderProfile
Pass : l'angle de rotation maximal sur les images est inférieur à 70 % de la rotation du gyroscope.
Voici quelques exemples de vidéos avec et sans stabilisation :
Figure 146 Exemple de vidéo avec stabilisation.
Figure 147 Exemple de vidéo sans stabilisation.
test_sensor_fusion
Teste la différence de code temporel entre la caméra et le gyroscope pour les applications de RA et de RV. Le téléphone est pivoté de 90 degrés 10 fois devant le motif en damier. Le temps de latence aller-retour est d'environ deux secondes. Ce test est ignoré si aucun gyroscope n'est inclus ou si le paramètre REALTIME
de la source de code temporel n'est pas activé.
Le test test_sensor_fusion
génère un certain nombre de graphiques. Les deux graphiques les plus importants pour le débogage sont les suivants :
test_sensor_fusion_gyro_events
: affiche les événements du gyroscope pour le téléphone pendant le test. Un mouvement dans les directions X et Y implique que le téléphone n'est pas solidement fixé sur la plaque de montage, ce qui réduit la probabilité de réussite du test. Le nombre de cycles dans le graphique dépend de la vitesse d'écriture pour l'enregistrement des frames.Figure 148 : Exemple d'événements de gyroscope test_sensor_fusion.
test_sensor_fusion_plot_rotations
: affiche l'alignement du gyroscope et des événements de la caméra. Ce graphique doit montrer un mouvement correspondant entre l'appareil photo et le gyroscope à +/- 1 ms.Figure 149 : Exemple de rotation des graphiques test_sensor_fusion.
API testées :
android.hardware.camera2.CameraCharacteristics#LENS_FACING
android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_TIMESTAMP_SOURCE
android.hardware.camera2.CameraMetadata#SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME
android.hardware.camera2.CaptureRequest#CONTROL_AE_TARGET_FPS_RANGE
android.hardware.camera2.CaptureRequest#SENSOR_FRAME_DURATION
android.hardware.camera2.CaptureRequest#SENSOR_TIMESTAMP
android.hardware.camera2.CaptureResult#SENSOR_ROLLING_SHUTTER_SKEW
Pass : le décalage des codes temporels de la caméra et du gyroscope est inférieur à 1 ms, conformément à la section 7.3.9 Capteurs haute fidélité du CDD.
Mécanismes d'échec :
- Erreur de décalage : le décalage entre la caméra et le gyroscope n'est pas correctement calibré à +/- 1 ms.
- Perte de frames : le pipeline n'est pas assez rapide pour capturer 200 frames de manière consécutive.
- Erreurs de socket :
adb
ne parvient pas à se connecter de manière fiable au DUT suffisamment longtemps pour exécuter le test. - Le graphique n'est pas monté à plat. Le tracé
test_sensor_fusion_plot_rotations
comporte des images où la rotation du gyroscope et de la caméra varie considérablement à mesure que la caméra pivote dans les parties du graphique qui ne sont pas plates. - La caméra n'est pas installée à plat. Le graphique
test_sensor_fusion_gyro_events
montre le mouvement dans les plans X et Y. Cette défaillance est plus courante pour les caméras avant, car la caméra arrière présente souvent une bosse par rapport au reste du corps du téléphone, ce qui crée une inclinaison lors du montage de l'arrière du téléphone sur la plaque de montage.
test_video_stabilization
Tests de la rotation de la vidéo stabilisée par rapport au gyroscope
API testées :
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.media.MediaRecorder
android.media.CamcorderProfile
Pass : l'angle de rotation maximal sur les images est inférieur à 60 % de la rotation du gyroscope.
Vous trouverez ci-dessous des exemples de vidéos avec et sans stabilisation.
Figure 150 Exemple de vidéo avec stabilisation.
Figure 151 Exemple de vidéo sans stabilisation.
test_video_stabilization_jca
Vérifie que la vidéo stabilisée capturée à l'aide de la JCA tourne moins que le gyroscope. Le JCA doit être installé sur l'appareil avant les tests.
API testées :
android.hardware.camera2.CameraCharacteristics#SCALAR_AVAILABLE_CAPABILITIES_STREAM_USE_CASES
android.media.CamcorderProfile
android.media.MediaRecorder
Pass : la rotation angulaire maximale sur les images extraites de la vidéo capturée à l'aide de la JCA est inférieure à 70 % de la rotation du gyroscope.
feature_combination
Les tests feature_combination
vérifient que les fonctionnalités fonctionnent correctement lorsque plusieurs fonctionnalités de la caméra sont activées en même temps. Ces tests utilisent la même image en damier que celle utilisée dans la scène de fusion de capteurs.
test_feature_combination
Teste toutes les combinaisons de flux, le mode de stabilisation vidéo, la plage de FPS cible, la vidéo HDR 10 bits et l'Ultra HDR compatibles avec l'appareil photo.
Pour Android 16 et versions ultérieures, le test exécute toutes les combinaisons de fonctionnalités compatibles et consigne les résultats dans un fichier proto. Les assertions d'échec ne sont appelées que pour les combinaisons de fonctionnalités pour lesquelles isSessionConfigurationSupported
renvoie True
.
API testées :
android.hardware.camera2.CameraDevice.CameraDeviceSetup#isSessionConfigurationSupported
android.hardware.camera2.CameraDevice.CameraDeviceSetup#createCaptureRequest
Pass : pour chaque combinaison de fonctionnalités compatible :
- Le flux d'aperçu est stabilisé si la stabilisation de l'aperçu est activée.
- La fréquence d'images de l'aperçu se situe dans la plage
AE_TARGET_FPS_RANGE
configurée. - L'espace colorimétrique du flux d'aperçu enregistré correspond à celui défini.
- La capture Ultra HDR dispose d'une carte de gain valide.
scene_ip
Sous Android 16 et versions ultérieures, la scène scene_ip
permet de vérifier la parité des images entre l'application d'appareil photo par défaut et l'application d'appareil photo Jetpack (JCA) afin d'identifier les différences majeures entre les images capturées. La JCA reproduit les captures d'applications de réseaux sociaux et fournit une image de référence que les applications de réseaux sociaux traitent et affinent ensuite.
Configuration matérielle requise
La configuration matérielle suivante est requise pour les tests scene_ip
:
- Les tests sont exécutés dans le ITS tout-en-un de la caméra de 2e génération.
- Les contrôleurs d'éclairage et de servomoteur qui font partie du bras mécanique de la génération 2 sont utilisés pour contrôler l'environnement de test.
- Un graphique de fonctionnalités de test est placé dans le rig Gen2.
Figure 152 Exemple Gen2chart_sample.
Tester les critères de saut
Les tests scene_ip
sont ignorés si l'une des conditions suivantes est remplie :
- Le premier niveau d'API (
first_api_level
) de l'appareil est de 35 ou inférieur. - L'appareil n'est pas un téléphone avec des appareils photo principaux avant et arrière (par exemple, une tablette ou une télévision).
test_default_jca_ip
Prend des captures du graphique des fonctionnalités de test dans des conditions d'éclairage contrôlées à l'aide de l'application d'appareil photo par défaut et de la JCA, puis effectue les vérifications suivantes :
Champ de vision : vérifie que l'application d'appareil photo par défaut et les captures JCA ont le même champ de vision. Cette vérification utilise la fonctionnalité de code QR au centre extraite de l'image du graphique des captures.
Luminosité : vérifie que la différence de luminosité mesurée entre l'application d'appareil photo par défaut et JCA ne dépasse pas 10. Cette vérification utilise le correctif de plage dynamique pour la mesure de la luminosité.
Balance des blancs : vérifie que la différence de balance des blancs entre l'application d'appareil photo par défaut et JCA ne dépasse pas 4. Cette vérification utilise le correctif de plage dynamique pour la mesure de la luminosité.
Section de base réussie : le test réussit les vérifications du champ de vision, de la luminosité et de la balance des blancs. Dans Android 16, ce test n'est pas obligatoire (NOT_YET_MANDATED
).