Ultralytics YOLO27:
Get Started

Cómo ver los resultados de inferencia de YOLO en un terminal de VSCode#

Imagen del sitio web de libsixel.

Motivación#

Al conectarte a una máquina remota mediante SSH, normalmente no es posible visualizar imágenes o es necesario transferir los datos a un dispositivo local con interfaz gráfica. El terminal integrado de VSCode puede mostrar imágenes directamente, así que puedes inspeccionar los resultados de predicción justo donde ejecutas la inferencia, sin copiar archivos a tu portátil. Esta guía explica cómo activar la configuración, integrar el código y responde a las preguntas frecuentes.

Solo Linux y macOS

Solo es compatible con Linux y macOS. Consulta el repositorio de VSCode, el estado de la incidencia o la documentación para conocer las novedades sobre la compatibilidad con Windows para ver imágenes en el terminal con sixel.

Los protocolos compatibles con VSCode para ver imágenes en el terminal integrado son sixel y iTerm. En esta guía se muestra cómo usar el protocolo sixel.

Procedimiento#

  1. Primero, debes activar los ajustes 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. Instala la biblioteca python-sixel en tu entorno virtual. Es una bifurcación de la biblioteca PySixel, cuyo mantenimiento se ha abandonado.

    pip install sixel
  3. Carga un modelo y ejecuta la inferencia; después, representa los resultados gráficamente y guárdalos en una variable. Encontrarás más información sobre los argumentos de inferencia y el trabajo con resultados en la página del modo de predicción.

    from ultralytics import YOLO
    
    # Cargar un modelo
    model = YOLO("yolo26n.pt")
    
    # Ejecuta la inferencia en una imagen
    results = model.predict(source="https://ultralytics.com/images/bus.jpg")
    
    # Representar gráficamente los resultados de inferencia
    plot = results[0].plot()  # (1)!
    1. Consulta los parámetros del método plot para ver los argumentos que puedes usar.
  4. Ahora, usa OpenCV para convertir los datos np.ndarray en bytes. Después, usa io.BytesIO para crear un objeto «similar a un archivo».

    import io
    
    import cv2
    
    # Imagen de los resultados en bytes
    im_bytes = cv2.imencode(
        ".png",  # (1)!
        plot,
    )[1].tobytes()  # (2)!
    
    # Bytes de imagen como objeto similar a un archivo
    mem_file = io.BytesIO(im_bytes)
    1. También puedes usar otras extensiones de imagen.
    2. Solo se necesita el objeto devuelto en el índice 1.
  5. Crea una instancia de SixelWriter y, después, usa el método .draw() para dibujar la imagen en el terminal.

    from sixel import SixelWriter
    
    # Crear un objeto escritor de sixel
    w = SixelWriter()
    
    # Dibujar la imagen sixel en el terminal
    w.draw(mem_file)

Ejemplos de resultados de inferencia#

YOLO inference results displayed in terminal

Vídeos y GIF no probados

No se ha probado el uso de este ejemplo con vídeos o fotogramas de GIF animados. Úsalo bajo tu responsabilidad.

Ejemplo de código completo#

import io

import cv2
from sixel import SixelWriter

from ultralytics import YOLO

# Cargar un modelo
model = YOLO("yolo26n.pt")

# Ejecuta la inferencia en una imagen
results = model.predict(source="https://ultralytics.com/images/bus.jpg")

# Representar gráficamente los resultados de inferencia
plot = results[0].plot()  # (3)!

# Imagen de los resultados en bytes
im_bytes = cv2.imencode(
    ".png",  # (1)!
    plot,
)[1].tobytes()  # (2)!

mem_file = io.BytesIO(im_bytes)
w = SixelWriter()
w.draw(mem_file)
  1. También puedes usar otras extensiones de imagen.
  2. Solo se necesita el objeto devuelto en el índice 1.
  3. Consulta los parámetros del método plot para ver los argumentos que puedes usar.
Borrar la imagen

Puede que tengas que usar clear para «borrar» la imagen que se muestra en el terminal.

Preguntas frecuentes#

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

    1. Activa los ajustes necesarios de VSCode:

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

      pip install sixel
    3. Carga tu modelo YOLO y ejecuta la inferencia:

      from ultralytics import YOLO
      
      model = YOLO("yolo26n.pt")
      results = model.predict(source="https://ultralytics.com/images/bus.jpg")
      plot = results[0].plot()
    4. Convierte la imagen del resultado de inferencia en bytes y muéstrala 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 obtener más detalles, visita la página del modo de predicción.

  • Actualmente, el protocolo sixel solo es compatible con Linux y macOS porque estas plataformas cuentan con capacidades nativas de terminal compatibles con los gráficos sixel. La compatibilidad de Windows con los gráficos de terminal mediante sixel aún está en desarrollo. Para conocer las novedades sobre la compatibilidad con Windows, consulta el estado de la incidencia de VSCode y la documentación.

  • Si no se muestra nada, realiza estas comprobaciones en orden:

    1. Comprueba que estén activados tanto terminal.integrated.enableImages como terminal.integrated.gpuAcceleration, tal como se indica en la sección Procedimiento, y reinicia el terminal integrado para que se apliquen los ajustes.
    2. Comprueba que sixel esté instalado en el mismo entorno virtual en el que se ejecuta el script (pip install sixel).
    3. Asegúrate de que plot sea un np.ndarray válido antes de codificarlo, ya que cv2.imencode genera un error si la imagen está vacía o no es una matriz válida. Consulta los parámetros del método plot para ver qué valores acepta results[0].plot().

    Si el problema persiste, consulta el repositorio de VSCode para conocer el estado de la compatibilidad con imágenes en el terminal.

  • Actualmente, no se ha probado la visualización de resultados de inferencia de vídeo ni de fotogramas de GIF animados mediante sixel en el terminal, y es posible que no sea compatible. Te recomendamos empezar con imágenes estáticas y comprobar la compatibilidad. Prueba los resultados de vídeo bajo tu responsabilidad y ten en cuenta las limitaciones de rendimiento. Para obtener más información sobre la representación gráfica de los resultados de inferencia, visita la página del modo de predicción.

  • El paquete sixel es una bifurcación de la biblioteca PySixel, cuyo mantenimiento se ha abandonado, y es un envoltorio ligero de Python para Pillow (PIL). Si import sixel falla o SixelWriter().draw() genera un error, comprueba que el paquete esté instalado en el entorno virtual activo, asegúrate de que Pillow esté disponible y consulta el repositorio de python-sixel en GitHub para ver las notas específicas de cada plataforma. Para obtener más información sobre cómo generar la imagen que pasas a draw(), consulta la documentación del modo de predicción.

Comentarios