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 trasladar los datos a un dispositivo local con una interfaz gráfica. 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 los archivos de vuelta a tu portátil. Esta guía explica cómo habilitar la configuración, integrar el código y responde a preguntas frecuentes.
Solo es compatible con Linux y macOS. Consulta el repositorio de VSCode, el estado de la incidencia o la documentación para obtener novedades sobre la compatibilidad con Windows para ver imágenes en el terminal con sixel.
Los protocolos compatibles con VSCode para ver imágenes mediante el terminal integrado son sixel y iTerm. En esta guía se demostrará el uso del protocolo sixel.
Proceso#
-
Primero, debes habilitar los ajustes
terminal.integrated.enableImagesyterminal.integrated.gpuAccelerationen VSCode."terminal.integrated.gpuAcceleration": "auto" # "auto" is default, can also use "on" "terminal.integrated.enableImages": true
-
Instala la biblioteca
python-sixelen tu entorno virtual. Es un fork de la bibliotecaPySixel, que ya no recibe mantenimiento.pip install sixel -
Carga un modelo y ejecuta la inferencia; después, representa gráficamente los resultados y guárdalos en una variable. Consulta la página de modo de predicción para obtener más información sobre los argumentos de inferencia y el trabajo con resultados.
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)!- Consulta los parámetros del método plot para ver los posibles argumentos que puedes utilizar.
-
Ahora, usa OpenCV para convertir
np.ndarrayen datosbytes. Después, usaio.BytesIOpara crear un objeto «similar a un 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)- También puedes usar otras extensiones de imagen.
- Solo necesitas el objeto devuelto en el índice
1.
-
Crea una instancia de
SixelWritery, después, 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)
Ejemplo de resultados de inferencia#
El uso de este ejemplo con vídeos o fotogramas de GIF animados no se ha probado. Hazlo 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)- También puedes usar otras extensiones de imagen.
- Solo necesitas el objeto devuelto en el índice
1. - Consulta los parámetros del método plot para ver los posibles argumentos que puedes utilizar.
Puede que tengas que usar clear para «borrar» la vista de la imagen 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:
-
Habilita los ajustes necesarios de VSCode:
"terminal.integrated.enableImages": true "terminal.integrated.gpuAcceleration": "auto" -
Instala la biblioteca sixel:
pip install sixel -
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() -
Convierte la imagen del resultado de la 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 información, visita la página de modo de predicción.
-
Actualmente, el protocolo sixel solo es compatible con Linux y macOS porque estas plataformas cuentan con funciones nativas del terminal compatibles con los gráficos sixel. La compatibilidad de Windows con los gráficos del terminal mediante sixel todavía está en desarrollo. Para consultar las novedades sobre la compatibilidad con Windows, revisa el estado de la incidencia de VSCode y la documentación.
Si no se renderiza nada, realiza estas comprobaciones en orden:
- Confirma que
terminal.integrated.enableImagesyterminal.integrated.gpuAccelerationestán habilitados, tal como se muestra en la sección Proceso, y después reinicia el terminal integrado para que los ajustes surtan efecto. - Verifica que
sixelestá instalado en el mismo entorno virtual en el que se ejecuta tu script (pip install sixel). - Asegúrate de que
plotes unnp.ndarrayválido antes de codificarlo, ya quecv2.imencodegenera 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 los valores que aceptaresults[0].plot().
Si los problemas persisten, consulta el repositorio de VSCode para conocer el estado de la compatibilidad con imágenes en el terminal.
- Confirma que
Actualmente, no se ha probado la visualización de resultados de inferencia de vídeo o de fotogramas de GIF animados mediante sixel en el terminal, por lo que puede que no sea compatible. Te recomendamos empezar con imágenes estáticas y verificar la compatibilidad. Prueba los resultados de vídeo bajo tu propia responsabilidad y ten en cuenta las limitaciones de rendimiento. Para obtener más información sobre la representación gráfica de resultados de inferencia, visita la página de modo de predicción.
El paquete
sixeles un fork de la bibliotecaPySixel, que ya no recibe mantenimiento, y es un envoltorio fino de Python sobre Pillow (PIL). Siimport sixelfalla oSixelWriter().draw()genera un error, confirma que el paquete está instalado en tu entorno virtual activo, asegúrate de que Pillow está disponible y consulta el repositorio de GitHub de python-sixel para obtener notas específicas de cada plataforma. Para obtener más información sobre cómo generar la imagen que pasas adraw(), consulta la documentación del modo de predicción.