La suite de tests d'images de l'appareil photo (ITS) est un framework permettant d'exécuter des tests sur les images produites par un appareil photo Android. L'objectif général de chaque test dans ITS est de configurer l'appareil photo de façon spécifique, prendre une ou plusieurs prises de vue ; Examinez les prises de vue pour voir si elles contiennent les données d'image attendues. De nombreux tests nécessitent que l'appareil photo soit dirigé vers un graphique cible spécifique ou qu'il soit éclairé à une intensité spécifique.
L'ITS se trouve dans l'atelier de test CTS Verifier
cts/apps/CameraITS
Les appareils doivent réussir les tests ITS correspondant aux fonctionnalités compatibles
annoncé par le framework de l'appareil photo pour les applications tierces en tant que sous-ensemble de CTS.
Configuration
Pour exécuter des tests ITS, vous devez configurer les éléments suivants :
- Un appareil testé
- Une machine hôte (par exemple, un ordinateur de bureau ou portable Linux)
- Une scène photographiée par l'appareil photo
Configuration de l'appareil testé
Pour configurer un DUT, procédez comme suit :
- Connectez l'appareil testé à une machine hôte via USB.
- Accordez des autorisations à l'hôte pour qu'il puisse accéder à l'appareil testé via ADB.
Installez l'application CTS Verifier (
CtsVerifier.apk
) sur l'appareil. Pour plus consultez Utiliser l'outil de vérification CTS.extract root/out/host/linux-x86/cts-verfier/android-cts-verifier.zip
cd android-cts-verifier
adb install -r -g CtsVerifier.apk
Configuration de l'hôte
L'ITS nécessite que la machine hôte soit connectée au DUT via USB, qu'elle puisse utiliser ADB pour le contrôle et la communication de l'appareil, et que le logiciel requis soit installé.
Pour configurer votre machine hôte, assurez-vous que les logiciels suivants sont installés.
Outils de plate-forme du SDK Android
Les outils de la plate-forme du SDK Android doivent être installés et ADB doit être dans Chemin d'accès exécutable de l'interface système ou du terminal qui s'exécute sur l'hôte machine. Pour la version publique d'Android SDK Platform Tools, voir Notes de version de SDK Platform Tools
Python
Python doit être installé sur la machine hôte. Nous vous recommandons d'utiliser pour assurer la prise en charge des versions compatibles. Pour en savoir plus sur les versions de Python et de package à installer pour une version spécifique, consultez Notes de version ITS de Camera pour la version correspondante.
Mobly
Pour Android 12 et versions ultérieures, le framework de test Mobly
doit être installé. Mobly vous permet de configurer un appareil testé et une tablette pour cartographier
its_base_test
. Pour installer le framework de test Mobly, exécutez la commande suivante :
pip install mobly
Configuration de l'environnement
Pour configurer l'environnement de test, exécutez la commande suivante :
cd CameraITS
source build/envsetup.sh
Cette commande vérifie l'installation de Python, configure PYTHONPATH
variable d'environnement et exécute des tests unitaires sur les modules utils/*.py
. Si non
sont affichées sur le terminal, l'environnement est prêt à exécuter
tests.
Configuration de la scène
Pour configurer les scènes, nous vous recommandons d'utiliser la configuration ITS-in-a-box de la caméra pour faciliter l'automatisation, la fiabilité et l'efficacité des tests. L'outil ITS prêt à l'emploi Les plates-formes d'évaluation prennent en charge l'éclairage, le centrage et l'évolution des graphiques. pour ITS. De plus, ITS-in-a-box est nécessaire pour les tests des extensions d'appareil photo.
Pour les tests manuels, vérifiez les points suivants:
- L'appareil testé est posé sur un trépied
- L'appareil sous test est orienté vers la scène appropriée pour chaque test. (Le script de test ITS fournir des invites pour modifier la configuration de la scène avant de lancer les tests dans une nouvelle .)
- L'appareil testé est connecté à la machine hôte via USB.
- L'appareil testé ne bouge pas pendant le test.
- La scène est éclairée par une source lumineuse stable et non fluctuante. (À éviter utilisez une lumière fluorescente, car cela provoque un scintillement.)
Le script de test ITS affiche une invite demandant à l'utilisateur de changer de scène. avant de lancer des tests dans une nouvelle scène.
L'orientation du téléphone doit être définie de sorte que l'appareil photo la rotation des clés. Le moyen le plus simple de vérifier cela est d'utiliser les scènes de visage dans la scène 2. La plupart des téléphones sont en mode Paysage, avec le téléphone pivoté dans le sens inverse des aiguilles d'une montre pour la caméra arrière et dans le sens des aiguilles d'une montre pour la caméra avant.
Fichiers de configuration
Avec le framework Mobly, vous devez créer un fichier de configuration config.yml
pour
pour définir Mobly testbed. Vous trouverez ci-dessous des exemples pour différents cas d'utilisation.
Fichier config.yml pour les scènes sur tablette
Voici un exemple de fichier config.yml
pour des scènes sur tablette. Pour
les tests sur tablette, le mot clé TABLET
doit figurer dans le nom du test. Pendant
Initialisation, le lanceur de test Mobly initialise les paramètres du fichier
et les transmet aux tests individuels.
TestBeds:
- Name: TEST_BED_TABLET_SCENES
# Test configuration for scenes[0:4, 6, _change]
Controllers:
AndroidDevice:
- serial: 8A9X0NS5Z
label: dut
- serial: 5B16001229
label: tablet
TestParams:
brightness: 192
chart_distance: 22.0
debug_mode: "False" # "True" or "False"; quotes needed
lighting_cntl: <controller-type> # "arduino" or "None"; quotes needed
lighting_ch: <controller-channel>
camera: 0
foldable_device: "False". # set "True" if testing foldable
scene: <scene-name> # if <scene-name> runs all scenes
Pour appeler le banc de test, exécutez tools/run_all_tests.py
. Si aucune valeur de ligne de commande ne spécifie de caméras ni de scènes, le test est exécuté avec les valeurs du fichier config.yml
. Si des valeurs de ligne de commande sont définies pour les caméras ou les scènes, elles remplacent les valeurs de la section TestParams
du fichier config.yml
.
Exemple :
python tools/run_all_tests.py
python tools/run_all_tests.py camera=1
python tools/run_all_tests.py scenes=2,1,0
python tools/run_all_tests.py camera=1 scenes=2,1,0
Fichier config.yml de la scène sensor_fusion
Voici un exemple de fichier config_yml
pour les tests sensor_fusion
.
Pour les tests sensor_fusion
, le mot clé SENSOR_FUSION
doit figurer dans le nom du banc d'essais. Android 13 et versions ultérieures ne prennent en charge que le contrôleur Arduino pour la fusion de capteurs en raison des tests de prévisualisation et de stabilisation vidéo.
Android 12 est compatible avec les manettes Arduino et Canakit.
Testbeds
- Name: TEST_BED_SENSOR_FUSION
# Test configuration for sensor_fusion/test_sensor_fusion.py
Controllers:
AndroidDevice:
- serial: 8A9X0NS5Z
label: dut
TestParams:
fps: 30
img_size: 640,480
test_length: 7
debug_mode: "False"
chart_distance: 25
rotator_cntl: arduino
rotator_ch: 1
camera: 0
Pour exécuter des tests sensor_fusion
avec la boîte de fusion de capteurs, exécutez la commande suivante :
python tools/run_all_tests.py scenes=sensor_fusion
python tools/run_all_tests.py scenes=sensor_fusion camera=0
Plusieurs fichiers config.yml
Voici un exemple de fichier config.yml
avec plusieurs testbeds, un
sur une tablette et un autre sur sensor_fusion
. Le testbed correct est déterminé
par les scènes testées.
Testbeds
- Name: TEST_BED_TABLET_SCENES
# Test configuration for scenes[0:4, 6, _change]
Controllers:
AndroidDevice:
- serial: 8A9X0NS5Z
label: dut
- serial: 5B16001229
label: tablet
TestParams:
brightness: 192
chart_distance: 22.0
debug_mode: "False"
chart_loc_arg: ""
camera: 0
scene: <scene-name> # if <scene-name> runs all scenes
- Name: TEST_BED_SENSOR_FUSION
# Test configuration for sensor_fusion/test_sensor_fusion.py
Controllers:
AndroidDevice:
- serial: 8A9X0NS5Z
label: dut
TestParams:
fps: 30
img_size: 640,480
test_length: 7
debug_mode: "False"
chart_distance: 25
rotator_cntl: arduino # cntl can be arduino or canakit
rotator_ch: 1
camera: 0
Test manuel du fichier config.yml
Voici un exemple de fichier config.yml
pour les tests manuels. De
Android 14, manuel
est accepté pour tous les tests, à l'exception de
scene_extensions
tests. Pour les tests manuels, le mot clé MANUAL
doit figurer dans le nom de la campagne test.
De plus, la section AndroidDevice
ne peut pas inclure de section concernant les séries ou les étiquettes pour
une tablette.
TestBeds:
- Name: TEST_BED_MANUAL
Controllers:
AndroidDevice:
- serial: 8A9X0NS5Z
label: dut
TestParams:
debug_mode: "False"
camera: 0
scene: 1
Exécuter des tests ITS
Cette section explique comment exécuter des tests ITS.
Appeler des tests
Une fois l'appareil, la machine hôte (y compris l'environnement) et la scène physique configurés, exécutez les tests ITS en suivant la procédure ci-dessous.
Ouvrez l'application CTS Verifier. Dans le menu des tests, sélectionnez Camera ITS Test (Test ITS de la caméra).
Sur la machine hôte, exécutez les tests ITS à partir du répertoire
CameraITS/
. Par exemple, pour un appareil équipé d'une caméra avant et arrière, exécutez la commande suivante : la commande suivante:python tools/run_all_tests.py
Le script parcourt les caméras et les scènes de test en fonction
config.yml
. Pour le débogage des configurations, nous vous recommandons d'exécuter l'une des scènesscene2
avec un seul test pour un traitement plus rapide.Pour les tests manuels, avant de commencer à exécuter l'ensemble de tests ITS sur chaque scène, le script prend une photo de la scène actuelle, l'enregistre au format JPEG, le chemin d'accès au fichier JPEG sur la console, et demande à l'utilisateur de confirmer si l'image n'est pas un problème. Ce flux de capture et confirmation est répété jusqu'à ce que l'utilisateur confirme que l'image est correcte. Voici les messages de ce flux.
Preparing to run ITS on camera 0 Start running ITS on camera: 0 Press Enter after placing camera 0 to frame the test scene: scene1_1 The scene setup should be: A grey card covering at least the middle 30% of the scene Running vendor 3A on device Capture an image to check the test scene Capturing 1 frame with 1 format [yuv] Please check scene setup in /tmp/tmpwBOA7g/0/scene1_1.jpg Is the image okay for ITS scene1_1? (Y/N)
Chaque exécution du script imprime un journal affichant
PASS
,FAIL
,FAIL*
ouSKIP
pour chaque test ITS.FAIL*
indique que le test a échoué, mais comme il n'est pas encore obligatoire, il sera signalé commePASS
à CtsVerifier.SKIP
indique que le test a réussi, car l'appareil n'a pas annoncé la fonctionnalité sous-jacente en cours de test. Pour Par exemple, si un appareil n'annonce pas par le biais des interfaces de l'appareil photo compatible DNG, les tests liés à la capture de fichiers DNG sont ignorés et comptabilisés en tant quePASS
.Pour confirmer que les tests ont satisfait aux exigences de test, appuyez sur l'icône une coche verte. L'entrée Camera ITS Test (Appareil photo ITS Test) dans l'outil de vérification CTS le menu des tests devient vert et signifie que le téléphone a réussi les tests de l'appareil photo.
Test DUT parallèle
Les appareils équipés d'Android 14 ou version ultérieure sont compatibles avec les tests DUT parallèles. Vous pouvez ainsi tester les DUT en parallèle avec plusieurs plates-formes pour accélérer les tests globaux. Par exemple, les tests en parallèle vous permettent de tester la caméra 0 le support et la caméra 1 sur un autre support en même temps. Tous les tests pour les sessions de test parallèles sont agrégés sur la session du vérificateur CTS sur le DUT de référence. Vous devez effectuer des tests en parallèle avec la commande d'éclairage Arduino, car l'éclairage manuel n'est pas compatible avec les tests en parallèle. Assurez-vous qu'un autre sur le même contrôleur Arduino contrôle l'éclairage de chaque support.
Voici un exemple de fichier config.yml
qui définit trois plates-formes de test à exécuter en parallèle.
TestBeds:
- Name: TEST_BED_TABLET_SCENES_INDEX_0
Controllers:
AndroidDevice:
- serial: <device-id-0>
label: dut
- serial: <tablet-id-0>
label: tablet
TestParams:
brightness: 192
chart_distance: 22.0
debug_mode: "False"
lighting_cntl: "arduino"
lighting_ch: <controller-channel-0>
camera: 0
scene: <scene-name> # if <scene-name> left as-is runs all scenes
foldable_device: "False"
- Name: TEST_BED_TABLET_SCENES_INDEX_1
Controllers:
AndroidDevice:
- serial: <device-id-1>
label: dut
- serial: <tablet-id-1>
label: tablet
TestParams:
brightness: 192
chart_distance: 22.0
debug_mode: "False"
lighting_cntl: "arduino"
lighting_ch: <controller-channel-1>
camera: 1
scene: <scene-name> # if <scene-name> left as-is runs all scenes
foldable_device: "False"
# TEST_BED_SENSOR_FUSION represents testbed index 2
# Parallel sensor_fusion is currently unsupported due to Arduino requirements
- Name: TEST_BED_SENSOR_FUSION
# Test configuration for sensor_fusion
Controllers:
AndroidDevice:
- serial: <device-id>
label: dut
TestParams:
fps: 30
img_size: 640,480
test_length: 7
debug_mode: "False"
chart_distance: 25
rotator_cntl: "arduino"
rotator_ch: <controller-channel-2>
camera: <camera-id>
foldable_device: "False"
tablet_device: "False"
lighting_cntl: "None"
lighting_ch: <controller-channel>
scene: "sensor_fusion"
Pour exécuter les plates-formes de test en parallèle, utilisez la commande suivante :
for i in 0 1 2; do python3 tools/run_all_tests.py testbed_index=$i num_testbeds=3 & done; wait
Modèle de bruit DNG
Les appareils qui annoncent la possibilité de capturer des fichiers RAW ou DNG doivent fournir un modèle de bruit dans les métadonnées de résultat de capture de chaque photo RAW. Ce modèle de bruit doit être intégré au HAL de chaque caméra (par exemple, avant et les caméras arrière) sur l'appareil qui en revendique la prise en charge.
Implémentation d'un modèle de bruit
Pour implémenter un modèle de bruit, procédez comme suit afin de générer un modèle de bruit et intégrer le modèle dans le HAL de la caméra.
Pour générer un modèle de bruit pour chaque caméra, exécutez le script
dng_noise_model.py
dans le répertoiretools
. Vous obtenez un extrait de code C. Pour en savoir plus sur la configuration de la caméra et de l'environnement de capture, consultez le documentDngNoiseModel.pdf
dans le répertoiretools
.Pour implémenter le modèle de bruit pour l'appareil, coupez et collez l'extrait de code C dans le HAL de la caméra.
Validation du modèle de bruit
tests/scene1_1/test_dng_noise_model.py
un test ITS automatisé valide le modèle de bruit en vérifiant que les valeurs de bruit
pour l'exposition et le gain du plan fournis dans les données de l'appareil photo sont corrects.