Meet YOLO26: next-gen vision AI.

Link to this sectionCómo ver los resultados de inferencia de YOLO en un terminal de VSCode#

Sixel example of image in Terminal

Imagen del sitio web libsixel.

Link to this sectionMotivación#

Al conectarse a una máquina remota mediante SSH, visualizar los resultados de imagen normalmente no es posible o requiere trasladar los datos a un dispositivo local con una interfaz gráfica (GUI). El terminal integrado 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 a tu portátil. Esta guía explica cómo activar la configuración, cómo preparar el código y responde a preguntas frecuentes.

Solo para Linux y macOS

Solo es compatible con Linux y macOS. Consulta el repositorio de VSCode, revisa el estado de los problemas o la documentación para obtener actualizaciones sobre la compatibilidad con Windows para ver imágenes en el terminal con sixel.

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

Link to this sectionProceso#

  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 librería python-sixel en tu entorno virtual. Este es un fork de la librería PySixel, la cual ya no recibe mantenimiento.

    pip install sixel
  3. Carga un modelo y ejecuta la inferencia, luego grafica los resultados y almacénalos en una variable. Consulta más información sobre los argumentos de inferencia y cómo trabajar con resultados en la página del modo predict.

    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, utiliza OpenCV para convertir el np.ndarray a datos de tipo bytes. Luego 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 en el índice 1 devuelto.
  5. Crea una instancia de SixelWriter y luego usa el método .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)

Link to this sectionEjemplo 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.

Link to this sectionEjemplo 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 en el índice 1 devuelto.
  3. Consulta los parámetros del método plot para ver los posibles argumentos que puedes utilizar.

Limpiar la imagen

Puede que necesites usar clear para "borrar" la vista de la imagen en el terminal.

Link to this sectionFAQ#

Link to this section¿Cómo puedo ver los resultados de inferencia de YOLO en un terminal de VSCode en macOS o Linux?#

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

Link to this section¿Por qué el protocolo sixel solo funciona en Linux y macOS?#

El protocolo sixel actualmente solo es compatible con Linux y macOS porque estas plataformas tienen capacidades de terminal nativas compatibles con gráficos sixel. El soporte para gráficos de terminal en Windows usando sixel aún está en desarrollo. Para obtener actualizaciones sobre la compatibilidad con Windows, consulta el estado de los problemas de VSCode y la documentación.

Link to this section¿Qué ocurre si tengo problemas al mostrar imágenes en el terminal de VSCode?#

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

  1. Confirma que tanto terminal.integrated.enableImages como terminal.integrated.gpuAcceleration estén activados, tal como se muestra en la sección Proceso, luego reinicia el terminal integrado para que los ajustes surtan efecto.
  2. Verifica que sixel esté instalado en el mismo entorno virtual donde 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 lanza un error si la imagen está vacía o no es un array válido. Consulta los parámetros del método plot para ver los valores que acepta results[0].plot().

Si los problemas persisten, consulta el repositorio de VSCode para conocer el estado del soporte de imágenes en terminal.

Link to this section¿Puede YOLO mostrar resultados de inferencia de vídeo en el terminal usando sixel?#

Mostrar resultados de inferencia de vídeo o marcos de GIF animados usando sixel en el terminal actualmente no ha sido probado y podría no ser compatible. Recomendamos empezar con imágenes estáticas y verificar la compatibilidad. Intenta obtener resultados de vídeo bajo tu propia responsabilidad, teniendo en cuenta las limitaciones de rendimiento. Para más información sobre cómo graficar los resultados de inferencia, visita la página del modo predict.

Link to this section¿Cómo puedo solucionar problemas con la librería python-sixel?#

El paquete sixel es un fork de la librería sin mantenimiento PySixel y es un envoltorio (wrapper) ligero de Python sobre Pillow (PIL). Si import sixel falla o SixelWriter().draw() lanza un error, confirma que el paquete se instaló en tu entorno virtual activo, asegúrate de que Pillow esté disponible y revisa el repositorio de GitHub de python-sixel para notas específicas de la plataforma. Para más información sobre cómo generar la imagen que pasas a draw(), consulta la documentación del modo predict.

Comentarios