Caméra ITS

La suite de tests d'images de caméra (ITS, Camera Image Test Suite) est un framework permettant d'exécuter des tests sur des images produites par un appareil photo Android. L'objectif général de chaque test dans les ITS est de configurer la caméra de manière spécifique, de prendre une ou plusieurs photos et d'examiner les clichés pour voir s'ils contiennent les données d'image attendues. La plupart des tests nécessitent que la caméra soit dirigée vers un graphique cible spécifique ou qu'elle soit illuminée à une intensité spécifique.

L'ITS se trouve dans le banc d'essais du vérificateur CTS dans cts/apps/CameraITS. Les appareils doivent réussir les tests ITS correspondant aux fonctionnalités compatibles annoncées 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é
  • Un ordinateur 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 appareil testé, procédez comme suit:

  1. Connectez le DUT à une machine hôte via USB.
  2. Accordez des autorisations à l'hôte pour qu'il puisse accéder à l'appareil testé via ADB.
  3. Installez l'application CTS Verifier (CtsVerifier.apk) sur l'appareil. Pour en savoir plus, consultez Utiliser le vérificateur 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

ITS exige que la machine hôte soit connectée à l'appareil testé via USB, qu'elle puisse utiliser ADB pour le contrôle et la communication des appareils, et qu'elle dispose du logiciel requis.

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 plate-forme du SDK Android doivent être installés et ADB doit se trouver dans le chemin d'exécution du shell ou du terminal exécuté sur la machine hôte. Pour la version publique des outils de la plate-forme du SDK Android, consultez les notes de version des outils de la plate-forme du SDK.

Python

Python doit être installé sur la machine hôte. Nous vous recommandons d'utiliser une distribution Python groupée pour garantir la compatibilité des versions. Pour connaître les versions de Python et de packages à installer pour une version spécifique, consultez les notes de version de la caméra ITS pour la version correspondante.

Mobilité

Pour Android 12 ou version ultérieure, le framework de test Mobly doit être installé. Mobly vous permet de configurer un DUT et une tablette de graphiques dans la classe 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 la variable d'environnement PYTHONPATH et exécute des tests unitaires sur les modules utils/*.py. Si aucune erreur n'est imprimée sur le terminal, l'environnement est prêt à exécuter les tests ITS.

Configuration de la scène

Pour configurer les scènes, nous vous recommandons d'utiliser la configuration Caméra ITS prête à l'emploi afin de faciliter l'automatisation, la fiabilité et l'efficacité des tests. Les bancs d'essai ITS-in-a-box répondent à toutes les exigences d'éclairage, de centrage et de changement de graphique pour les ITS. De plus, ITS-in-a-box est nécessaire pour les tests des extensions d'appareil photo.

Pour les tests manuels, assurez-vous que:

  • Le DUT est installé sur un trépied.
  • L'appareil testé est orienté vers la scène appropriée pour chaque test. (Le script de test ITS fournit des invites pour modifier la configuration de la scène avant de lancer les tests dans une nouvelle scène.)
  • L'appareil à tester est connecté à la machine hôte via USB.
  • L'appareil à tester ne bouge pas pendant l'exécution du test.
  • La scène est éclairée par une source lumineuse stable et non fluctuante. (N'utilisez pas de lumière fluorescente, car cela introduit un scintillement.)

Le script de test ITS affiche une invite demandant à l'utilisateur de modifier la configuration de la scène avant de commencer les tests dans une nouvelle scène.

L'orientation du téléphone doit être définie de sorte que l'appareil photo prenne des images sans rotation. Le moyen le plus simple de vérifier cela consiste à utiliser les scènes de visage de 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

À l'aide du framework Mobly, vous devez créer un fichier de configuration config.yml pour définir le testbed Mobly. Vous trouverez ci-dessous des exemples de différents cas d'utilisation.

Fichier config.yml de scènes basées sur une tablette

Voici un exemple de fichier config.yml pour les scènes sur tablette. Pour les tests sur tablette, le mot clé TABLET doit figurer dans le nom de la table de test. Lors de l'initialisation, le testeur 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 d'essais, exécutez tools/run_all_tests.py. Si aucune valeur de ligne de commande ne spécifie des caméras ou des 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

Fichier config.yml pour plusieurs plates-formes de test

Voici un exemple de fichier config.yml avec plusieurs plates-formes de test, une plate-forme de test pour tablette et une plate-forme de test sensor_fusion. Le banc d'essai approprié 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

Fichier config.yml de test manuel

Voici un exemple de fichier config.yml pour un test manuel. À partir d'Android 14, les tests manuels sont acceptés pour tous les tests, à l'exception des tests scene_extensions. Pour les tests manuels, le mot clé MANUAL doit figurer dans le nom du banc d'essais. De plus, la section AndroidDevice ne peut pas inclure de section de numéro de série ou de libellé 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.

  1. Ouvrez l'application CTS Verifier. Dans le menu des tests, sélectionnez Camera ITS Test (Test ITS de la caméra).

  2. Sur la machine hôte, exécutez les tests ITS à partir du répertoire CameraITS/. Par exemple, pour un appareil doté de caméras avant et arrière, exécutez la commande suivante:

    python tools/run_all_tests.py

    Le script itère sur les caméras et les scènes de test en fonction du fichier config.yml. Pour les configurations de débogage, nous vous recommandons d'exécuter l'une des scènes scene2 avec un seul test afin d'accélérer le délai.

    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, imprime le chemin d'accès au fichier JPEG dans la console et demande à l'utilisateur de confirmer si l'image est correcte. Ce flux de capture et de confirmation s'exécute en boucle jusqu'à ce que l'utilisateur confirme que l'image est correcte. Vous trouverez ci-dessous 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* ou SKIP pour chaque test ITS. FAIL* indique que le test a échoué. Toutefois, comme le test n'est pas encore obligatoire, le test est signalé en tant que PASS à CtsVerifier. SKIP indique que le test a réussi, car l'appareil n'a pas annoncé la fonctionnalité sous-jacente testée. Par exemple, si un appareil n'annonce pas via les interfaces de l'appareil photo qu'il est compatible avec le format DNG, les tests liés à la capture de fichiers DNG sont ignorés et comptabilisés comme PASS.

  3. Pour confirmer que les tests ont rempli les conditions requises, appuyez sur le bouton en forme de coche verte. L'entrée Camera ITS Test (Caméra ITS Test) dans le menu des tests de l'outil de vérification CTS devient ensuite verte et signifie que le téléphone a réussi le test Camera ITS.

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 parallèles vous permettent de tester la caméra 0 dans une plate-forme et la caméra 1 dans une autre en même temps. Tous les tests des sessions de test parallèles sont agrégés sur la session CTS Verifier dans l'appareil testé de référence. Vous devez effectuer des tests en parallèle avec le contrôle de l'éclairage Arduino, car le contrôle manuel de l'éclairage n'est pas compatible avec les tests en parallèle. Assurez-vous qu'un canal différent du même contrôleur Arduino contrôle l'éclairage de chaque plate-forme.

Voici un exemple de fichier config.yml qui définit trois tests à 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 images au format RAW ou DNG doivent fournir un modèle de bruit dans les métadonnées de résultat de la capture de chaque plan brut. Ce modèle de bruit doit être intégré au HAL de l'appareil photo pour chaque appareil photo (par exemple, les caméras avant et arrière) de l'appareil qui déclare être compatible.

Implémentation du modèle de bruit

Pour implémenter un modèle de bruit, procédez comme suit pour générer un modèle de bruit et l'intégrer au HAL de la caméra.

  1. Pour générer un modèle de bruit pour chaque caméra, exécutez le script dng_noise_model.py dans le répertoire tools. 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 document DngNoiseModel.pdf dans le répertoire tools.

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

Le test ITS automatisé tests/scene1_1/test_dng_noise_model.py valide le modèle de bruit en vérifiant que les valeurs de bruit pour l'exposition et le gain de plan fournis dans les données de l'appareil photo sont correctes.