Ir al contenido

Visualización de los resultados de la inferencia en un terminal

Sixel ejemplo de imagen en Terminal

Imagen de la web libsixel.

Motivación

Cuando se conecta a una máquina remota, normalmente la visualización de los resultados de las imágenes no es posible o requiere trasladar los datos a un dispositivo local con una interfaz gráfica de usuario. El terminal integrado VSCode permite renderizar directamente las imágenes. Esta es una breve demostración de cómo utilizarlo junto con ultralytics con resultados de las predicciones.

Advertencia

Sólo compatible con Linux y MacOS. Compruebe el Repositorio VSCodecomprobar Estado de la cuestióno documentación para obtener información actualizada sobre la compatibilidad con Windows para ver imágenes en el terminal con sixel.

Los protocolos compatibles con VSCode para la visualización de imágenes mediante el terminal integrado son los siguientes sixel y iTerm. Esta guía mostrará el uso del sixel protocolo.

Proceso

  1. En primer lugar, debe activar la configuración terminal.integrated.enableImages y terminal.integrated.gpuAcceleration en VSCode.

    "terminal.integrated.gpuAcceleration": "auto" # "auto" is default, can also use "on"
    "terminal.integrated.enableImages": true
    

    VSCode enable terminal images setting

  2. Instale el python-sixel en su entorno virtual. Se trata de un horquilla de la PySixel que ya no se mantiene.

    pip install sixel
    
  3. Carga un modelo y ejecuta la inferencia, luego traza los resultados y los almacena en una variable. Consulte más información sobre los argumentos de inferencia y el trabajo con los resultados en la página del modo de predicción.

    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo11n.pt")
    
    # Run inference on an image
    results = model.predict(source="ultralytics/assets/bus.jpg")
    
    # Plot inference results
    plot = results[0].plot()  
    
  4. Ahora, utilice OpenCV para convertir el numpy.ndarray a bytes datos. A continuación, utilice io.BytesIO para crear un objeto "similar a un archivo".

    import io
    
    import cv2
    
    # Results image as bytes
    im_bytes = cv2.imencode(
        ".png",  
        plot,
    )[1].tobytes()  
    
    # Image bytes as a file-like object
    mem_file = io.BytesIO(im_bytes)
    
  5. Crear un SixelWriter y, a continuación, utilice la función .draw() para dibujar la imagen en el terminal.

    from sixel import SixelWriter
    
    # Create sixel writer object
    w = SixelWriter()
    
    # Draw the sixel image in the terminal
    w.draw(mem_file)
    

Ejemplo de resultados de inferencia

Ver imagen en el terminal

Peligro

No se ha probado el uso de este ejemplo con vídeos o marcos GIF animados. Inténtelo bajo su propia responsabilidad.

Ejemplo de código completo

import io

import cv2
from sixel import SixelWriter

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n.pt")

# Run inference on an image
results = model.predict(source="ultralytics/assets/bus.jpg")

# Plot inference results
plot = results[0].plot()  

# Results image as bytes
im_bytes = cv2.imencode(
    ".png",  
    plot,
)[1].tobytes()  

mem_file = io.BytesIO(im_bytes)
w = SixelWriter()
w.draw(mem_file)

Consejo

Puede que necesite utilizar clear para "borrar" la vista de la imagen en el terminal.

PREGUNTAS FRECUENTES

¿Cómo puedo ver los resultados de la inferencia YOLO en un terminal VSCode en macOS o Linux?

Para ver los resultados de la inferencia YOLO en un terminal VSCode en macOS o Linux, siga estos pasos:

  1. Habilite los ajustes VSCode necesarios:

    "terminal.integrated.enableImages": true
    "terminal.integrated.gpuAcceleration": "auto"
    
  2. Instala la biblioteca sixel:

    pip install sixel
    
  3. Cargue su modelo YOLO y ejecute la inferencia:

    from ultralytics import YOLO
    
    model = YOLO("yolo11n.pt")
    results = model.predict(source="path_to_image")
    plot = results[0].plot()
    
  4. Convierte la imagen del resultado de la inferencia en bytes y la muestra en el terminal:

    import io
    
    import cv2
    from sixel import SixelWriter
    
    im_bytes = cv2.imencode(".png", plot)[1].tobytes()
    mem_file = io.BytesIO(im_bytes)
    SixelWriter().draw(mem_file)
    

Para más detalles, visite la página del modo de predicción.

¿Por qué el protocolo sixel sólo funciona en Linux y macOS?

Actualmente, el protocolo sixel solo es compatible con Linux y macOS, ya que estas plataformas disponen de funciones de terminal nativas compatibles con los gráficos sixel. La compatibilidad de Windows con gráficos de terminal mediante sixel aún está en fase de desarrollo. Para obtener información actualizada sobre la compatibilidad con Windows, consulte el estado y la documentación de VSCode Issue.

¿Qué ocurre si tengo problemas para visualizar imágenes en el terminal VSCode?

Si tiene problemas para visualizar imágenes en el terminal VSCode utilizando sixel:

  1. Asegúrese de que los ajustes necesarios en VSCode están activados:

    "terminal.integrated.enableImages": true
    "terminal.integrated.gpuAcceleration": "auto"
    
  2. Verifique la instalación de la biblioteca sixel:

    pip install sixel
    
  3. Compruebe si hay errores en la conversión de datos de imagen y en el código de trazado. Por ejemplo:

    import io
    
    import cv2
    from sixel import SixelWriter
    
    im_bytes = cv2.imencode(".png", plot)[1].tobytes()
    mem_file = io.BytesIO(im_bytes)
    SixelWriter().draw(mem_file)
    

Si los problemas persisten, consulte el repositorio VSCode y visite la sección de parámetros del método de trazado para obtener más información.

¿Puede YOLO mostrar los resultados de la inferencia de vídeo en el terminal utilizando sixel?

La visualización de los resultados de la inferencia de vídeo o de fotogramas GIF animados mediante sixel en el terminal no se ha probado actualmente y es posible que no sea compatible. Recomendamos empezar con imágenes estáticas y verificar la compatibilidad. Intente mostrar resultados de vídeo bajo su propia responsabilidad, teniendo en cuenta las limitaciones de rendimiento. Para más información sobre el trazado de resultados de inferencia, visite la página del modo de predicción.

¿Cómo puedo solucionar problemas con el python-sixel ¿Biblioteca?

Para solucionar problemas con el python-sixel library:

  1. Asegúrese de que la biblioteca está correctamente instalada en su entorno virtual:

    pip install sixel
    
  2. Compruebe que dispone de las dependencias necesarias de Python y del sistema.

  3. Consulte el repositorio GitHubpython -sixel para obtener documentación adicional y apoyo de la comunidad.

  4. Compruebe su código en busca de posibles errores, especialmente el uso de SixelWriter y los pasos de conversión de datos de imagen.

Para obtener más ayuda sobre el trabajo con los modelos YOLO y la integración de sixel, consulte las páginas de documentación sobre exportación y modo predictivo.

Creado hace 1 año ✏️ Actualizado hace 8 días

Comentarios