ITS de la cámara

El Paquete de pruebas de imagen de la cámara (ITS) es un framework para ejecutar pruebas en imágenes producido por una cámara de Android. El objetivo general de cada prueba del ITS es configurar la cámara de un modo específico, capturar una o más tomas examinar las tomas para ver si contienen los datos de imagen esperados. Muchos de los requieren que la cámara apunte a un gráfico objetivo específico se ilumina con una intensidad específica.

El ITS se encuentra en el agente de prueba del verificador del CTS en cts/apps/CameraITS Los dispositivos deben pasar las pruebas de ITS correspondientes a las funciones compatibles. anunciado por el framework de la cámara para apps de terceros como un subconjunto del CTS.

Configuración

Para ejecutar pruebas de ITS, debes configurar lo siguiente:

  • Un dispositivo en prueba (DUT)
  • Una máquina anfitrión (por ejemplo, una computadora de escritorio o laptop con Linux)
  • Una escena que toma la cámara

Configuración del dispositivo en prueba (DUT)

Para configurar un DUT, sigue estos pasos:

  1. Conecta el DUT a una máquina anfitrión mediante USB.
  2. Otorga permisos para que el host acceda al DUT mediante ADB.
  3. Instala la app del verificador del CTS (CtsVerifier.apk) en el dispositivo. Para ver más consulta Cómo usar el verificador del CTS.

    extract root/out/host/linux-x86/cts-verfier/android-cts-verifier.zip
    cd android-cts-verifier
    adb install -r -g CtsVerifier.apk
    

Configuración del host

El ITS requiere que la máquina anfitrión esté conectada al DUT a través de USB, usar ADB para controlar los dispositivos y comunicarse, y tener los permisos de que el software esté instalado.

Para configurar tu máquina anfitrión, asegúrate de que el siguiente software esté instalado.

Herramientas de la plataforma del SDK de Android

Las herramientas de la plataforma del SDK de Android deben estar instaladas y ADB debe estar en la ruta ejecutable de la shell o la terminal que se ejecuta en el host máquina. Para la versión pública de las herramientas de la plataforma del SDK de Android, ver Notas de la versión de las herramientas de la plataforma del SDK

Python

Python debe estar instalado en la máquina anfitrión. Recomendamos usar un paquete Distribución de Python para garantizar la compatibilidad con versiones compatibles. Para obtener detalles qué versiones de Python y paquetes instalar para un lanzamiento específico, consulta la Notas de la versión del ITS de la cámara para la versión correspondiente

Mobly

En el caso de Android 12 y versiones posteriores, el framework de pruebas de Mobly debe instalarse. Mobly te permite configurar una tablet de DUT y chart en la Clase its_base_test. Para instalar el framework de prueba de Mobly, ejecuta el siguiente comando:

pip install mobly

Configuración del entorno

Para configurar el entorno de pruebas, ejecuta el siguiente comando:

cd CameraITS
source build/envsetup.sh

Este comando verifica la instalación de Python y configura el PYTHONPATH variable de entorno y ejecuta pruebas de unidades en los módulos utils/*.py. Si la respuesta es no se imprimen los errores en la terminal, el entorno está listo para ejecutar el ITS y pruebas.

Si ves el mensaje de error libtinfo.so.6: no version information available (required by /bin/sh) en de ejecución, ejecuta el siguiente comando para cambiar el nombre del archivo libtinfo.so.6.

mv $ENV_DIRECTORY/lib/libtinfo.so.6 $ENV_DIRECTORY/lib/libtinfo.so.6.bak

Configuración de la escena

Para configurar las escenas, recomendamos usar la Configuración del ITS integrado en la cámara para facilidad en la automatización, confiabilidad y eficiencia en las pruebas. El ITS integrado los equipos de prueba admiten todos los requisitos de iluminación, centrado y cambio de gráficos para ITS. Además, el ITS-in-a-box es obligatorio para extensiones de cámara y pruebas.

Para las pruebas manuales, asegúrate de hacer lo siguiente:

  • El DUT tiene un trípode
  • El DUT apunta a la escena correcta para cada prueba. (El script de prueba de ITS proporciona mensajes para cambiar la configuración de escena antes de comenzar las pruebas en un nuevo entorno escena).
  • El DUT está conectado a la máquina anfitrión a través de USB.
  • El DUT no se mueve durante la ejecución de prueba.
  • La escena se ilumina con una fuente de luz estable que no fluctúa. (No usa una luz fluorescente porque introduce un parpadeo).

La secuencia de comandos de prueba de ITS muestra un mensaje en el que se le solicita al usuario que cambie de escena antes de comenzar las pruebas en una escena nueva.

La orientación del teléfono se debe configurar de manera que la cámara tome imágenes sin y la rotación de claves. La forma más fácil de verificar esto es con las escenas faciales en escena2. La mayoría de los teléfonos tienen el teléfono en orientación horizontal con el el teléfono se giró en el sentido contrario a las manecillas del reloj para la cámara posterior y se giró en el sentido de las manecillas del reloj para la cámara frontal.

Archivos de configuración

Con el framework de Mobly, debes crear un archivo de configuración config.yml para definir el banco de pruebas de Mobly. Los siguientes son ejemplos de diferentes casos de uso.

Archivo config.yml de escenas basadas en tablets

El siguiente es un archivo config.yml de ejemplo para escenas basadas en tablets. Para en las pruebas para tablets, la palabra clave TABLET debe estar en el nombre del grupo de prueba. Durante inicial, el ejecutor de pruebas de Mobly inicializa los parámetros en el archivo y las pasa a las pruebas individuales.

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

Para invocar el banco de prueba, ejecuta tools/run_all_tests.py. Si no hay comandos valores de línea que especifican cámaras o escenas, la prueba se ejecuta con el config.yml de los valores de archivo. Si hay valores de línea de comandos para cámaras o escenas, estos anula los valores de la sección TestParams del archivo config.yml. Por ejemplo:

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

Archivo config.yml de escena sensor_fusion

El siguiente es un archivo config_yml de ejemplo para pruebas sensor_fusion. Para la prueba de sensor_fusion, la palabra clave SENSOR_FUSION debe estar en el grupo de pruebas de la fuente de datos. Android 13 y las versiones posteriores solo admiten Arduino para la fusión de sensores debido a las pruebas de vista previa y estabilización de video. Android 12 admite controles de Arduino y 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

Para ejecutar pruebas de sensor_fusion con el comando sensor fusion box, ejecuta el siguiente comando:

python tools/run_all_tests.py scenes=sensor_fusion
python tools/run_all_tests.py scenes=sensor_fusion camera=0

Varios archivos config.yml testbeds

El siguiente es un archivo config.yml de ejemplo con varias testbeds, una testbed de tablet y un testbed de sensor_fusion. Se determina el banco de pruebas correcto las escenas que se prueban.

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

Archivo config.yml de prueba manual

El siguiente es un archivo config.yml de ejemplo para pruebas manuales. Desde Android 14 (manual) pruebas es compatible con todas las pruebas, excepto para el scene_extensions y pruebas. Para las pruebas manuales, la palabra clave MANUAL debe estar en el nombre de testbed. Además, la sección AndroidDevice no puede incluir una sección de serie o etiqueta para una tablet.

TestBeds:
  - Name: TEST_BED_MANUAL
    Controllers:
        AndroidDevice:
          - serial: 8A9X0NS5Z
            label: dut

    TestParams:
      debug_mode: "False"
      camera: 0
      scene: 1

Ejecución de pruebas de ITS

En esta sección, se describe cómo ejecutar pruebas de ITS.

Cómo invocar pruebas

Después del dispositivo, la máquina anfitrión (incluido el entorno) y la escena física configuración, ejecuta las pruebas de ITS mediante el siguiente proceso.

  1. Abre la app de verificación del CTS. En el menú de pruebas, selecciona Prueba de ITS de la cámara.

  2. En la máquina anfitrión, ejecuta las pruebas de ITS desde CameraITS/ . Por ejemplo, para un dispositivo con cámara frontal y posterior, ejecuta el siguiente comando:

    python tools/run_all_tests.py
    

    El guion itera a través de cámaras y escenas de prueba según la config.yml. Para las configuraciones de depuración, recomendamos ejecutar una de las escenas scene2 con una sola prueba para un tiempo de respuesta más rápido.

    Para las pruebas manuales, antes de comenzar a ejecutar el conjunto de pruebas de ITS en cada escena, la secuencia de comandos toma una foto de la escena actual, la guarda como JPEG, imprime la ruta de acceso al JPEG hasta la consola y le pide al usuario que confirme si la imagen está bien. Este flujo de captura y confirmación se repite hasta que el usuario confirma que la imagen es adecuada. Los siguientes son los mensajes de este flujo.

    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)
    

    Cada ejecución de la secuencia de comandos imprime un registro que muestra APROBADO, REPROBADO o SKIP durante cada prueba de ITS, donde SKIP indica que la prueba se aprobó porque el dispositivo no anunciaba la capacidad subyacente que se estaba probando. Por ejemplo, si un El dispositivo no publica anuncios a través de las interfaces de la cámara que admite. Las pruebas DNG relacionadas con la captura de archivos DNG se omiten y se cuentan como aprobadas.

  3. Para confirmar que las pruebas cumplieron con los requisitos, presiona el botón de marca de verificación verde. La entrada Prueba de ITS de la cámara en el verificador del CTS El menú de pruebas se ve verde e indica que el teléfono aprobó el ITS de la cámara.

Pruebas paralelas DUT

Los dispositivos que ejecutan Android 14 o versiones posteriores admiten la función Prueba del DUT Esto te permite probar los DUT en paralelo con varios equipos para acelerar la velocidad. las pruebas generales. Por ejemplo, las pruebas paralelas te permiten probar la cámara 0 en una. y la cámara 1 en otro equipo al mismo tiempo. Todas las pruebas para paralelo Las sesiones de prueba se agregan en la sesión del verificador del CTS en el DUT de referencia. Debes realizar pruebas paralelas con el control de iluminación Arduino, ya que la iluminación manual el control no es compatible con las pruebas paralelas. Asegúrate de que se haya canal en el mismo controlador de Arduino controla la iluminación de cada equipo.

El siguiente es un archivo config.yml de muestra que define tres testbeds que se ejecutarán en paralelo.

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"

Para ejecutar testbeds en paralelo, usa el siguiente comando:

for i in 0 1 2; do python3 tools/run_all_tests.py testbed_index=$i num_testbeds=3 & done; wait

Modelo de ruido DNG

Los dispositivos que promocionen la capacidad de capturar imágenes RAW o DNG deben proporcionar ruido. en los metadatos del resultado de la captura de cada toma sin procesar. Este modelo de ruido debe estar incorporada en la HAL de cada cámara (por ejemplo, frontal y cámaras posteriores) en el dispositivo que afirma ser compatible.

Implementación del modelo de ruido

Para implementar un modelo de ruido, sigue estos pasos para generarlo y incorporar el modelo en la HAL de la cámara.

  1. Para generar un modelo de ruido para cada cámara, ejecuta el Secuencia de comandos dng_noise_model.py en la tools. Esto genera un fragmento de código C. Para para obtener más información sobre cómo configurar la cámara y capturar el entorno, consulta el documento DngNoiseModel.pdf en el directorio tools.

  2. Para implementar el modelo de ruido en el dispositivo, corta y pega el código C. en la HAL de la cámara.

Validación del modelo de ruido

La tests/scene1_1/test_dng_noise_model.py la prueba automatizada de ITS valida el modelo de ruido verificando que los valores de ruido para la exposición y la ganancia de la toma que se proporcionan en los datos de la cámara.