YOLO Vision 2026:

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

Imagen del sitio web de libsixel.

Motivación#

Al conectar con una máquina remota mediante SSH, visualizar los resultados de las imágenes normalmente no es posible o requiere trasladar los datos a un dispositivo local con interfaz gráfica. La terminal integrada de VSCode puede renderizar imágenes directamente, por lo que puedes inspeccionar los resultados de predicción justo donde ejecutas la inferencia, sin copiar archivos de vuelta a tu portátil. Esta guía explica cómo habilitar la configuración, conectar el código y responde a preguntas frecuentes.

Solo para Linux y macOS

Compatible únicamente con Linux y macOS. Consulta el repositorio de VSCode, el estado de las incidencias o la documentación para ver actualizaciones sobre la compatibilidad con Windows para visualizar imágenes en la terminal con sixel.

Los protocolos compatibles con VSCode para ver imágenes usando la terminal integrada son sixel y iTerm. Esta guía demostrará el uso del protocolo sixel.

Proceso#

  1. Primero, debes habilitar 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 librería python-sixel en tu entorno virtual. Esta es una bifurcación de la librería PySixel, que ya no recibe mantenimiento.

    pip install sixel
  3. Carga un modelo y ejecuta la inferencia, luego dibuja los resultados y almacénalos en una variable. Obtén más información sobre los argumentos de inferencia y el trabajo con resultados en la página de modo de predicción.

    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n.pt")
    
    # Run inference on an image
    results = model.predict(source="ultralytics/assets/bus.jpg")
    
    # Plot inference results
    plot = results[0].plot()  # (1)!
    1. Consulta los parámetros del método plot para ver los posibles argumentos que puedes utilizar.
  4. Ahora, usa OpenCV para convertir los datos de np.ndarray a bytes. Después, utiliza io.BytesIO para crear un objeto tipo archivo.

    import io
    
    import cv2
    
    # Results image as bytes
    im_bytes = cv2.imencode(
        ".png",  # (1)!
        plot,
    )[1].tobytes()  # (2)!
    
    # Image bytes as a file-like object
    mem_file = io.BytesIO(im_bytes)
    1. Es posible usar también otras extensiones de imagen.
    2. Solo se necesita el objeto devuelto en el índice 1.
  5. Crea una instancia de SixelWriter y luego utiliza el método .draw() para dibujar la imagen en la 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#

YOLO inference results displayed in terminal

Vídeos y GIFs no probados

El uso de este ejemplo con vídeos o marcos de GIF animados no ha sido probado. Inténtalo bajo tu propia responsabilidad.

Ejemplo de código completo#

import io

import cv2
from sixel import SixelWriter

from ultralytics import YOLO

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

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

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

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

mem_file = io.BytesIO(im_bytes)
w = SixelWriter()
w.draw(mem_file)
  1. Es posible usar también 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 posibles argumentos que puedes utilizar.

Limpiar la imagen

Es posible que necesites usar clear para "borrar" la vista de la imagen en la terminal.

FAQ#

  • 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 en VSCode:

      "terminal.integrated.enableImages": true
      "terminal.integrated.gpuAcceleration": "auto"
    2. Instala la librería 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="ultralytics/assets/bus.jpg")
      plot = results[0].plot()
    4. Convierte la imagen del resultado de la inferencia a 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 más detalles, visita la página del modo de predicción.

  • El protocolo sixel actualmente solo es compatible con Linux y macOS porque estas plataformas tienen capacidades nativas de terminal compatibles con gráficos sixel. La compatibilidad con Windows para gráficos en la terminal mediante sixel sigue en desarrollo. Para obtener actualizaciones sobre la compatibilidad con Windows, consulta el estado de incidencias de VSCode y la documentación.

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

    1. Confirma que tanto terminal.integrated.enableImages como terminal.integrated.gpuAcceleration estén habilitados, tal como se muestra en la sección Proceso, y luego reinicia la terminal integrada para que la configuración surta efecto.
    2. Verifica que sixel esté instalado en el mismo entorno virtual en el que se ejecuta tu 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 conocer los valores que acepta results[0].plot().

    Si los problemas persisten, consulta el repositorio de VSCode para ver el estado de compatibilidad de imágenes en la terminal.

  • Mostrar resultados de inferencia de vídeo o fotogramas de GIF animados usando sixel en la terminal no se ha probado actualmente y es posible que no sea compatible. Recomendamos empezar con imágenes estáticas y verificar la compatibilidad. Intenta mostrar resultados de vídeo bajo tu propio riesgo, teniendo en cuenta las limitaciones de rendimiento. Para obtener más información sobre cómo trazar los resultados de la inferencia, visita la página del modo de predicción.

  • El paquete sixel es una bifurcación de la librería sin mantenimiento PySixel y consiste en un envoltorio ligero en Python sobre Pillow (PIL). Si import sixel falla o SixelWriter().draw() genera un error, confirma que el paquete se haya instalado en tu entorno virtual activo, asegúrate de que Pillow esté disponible y revisa el repositorio de GitHub de python-sixel para ver notas específicas de la 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