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.
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#
-
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 librería
python-sixelen tu entorno virtual. Esta es una bifurcación de la libreríaPySixel, que ya no recibe mantenimiento.pip install sixel -
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)!- Consulta los parámetros del método plot para ver los posibles argumentos que puedes utilizar.
-
Ahora, usa OpenCV para convertir los datos de
np.ndarrayabytes. Después, utilizaio.BytesIOpara 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)- Es posible usar también otras extensiones de imagen.
- Solo se necesita el objeto devuelto en el índice
1.
-
Crea una instancia de
SixelWritery 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#
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)- Es posible usar también otras extensiones de imagen.
- Solo se necesita el objeto devuelto en el índice
1. - Consulta los parámetros del método plot para ver los posibles argumentos que puedes utilizar.
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:
-
Activa los ajustes necesarios en VSCode:
"terminal.integrated.enableImages": true "terminal.integrated.gpuAcceleration": "auto" -
Instala la librería 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 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:
- Confirma que tanto
terminal.integrated.enableImagescomoterminal.integrated.gpuAccelerationestén habilitados, tal como se muestra en la sección Proceso, y luego reinicia la terminal integrada para que la configuración surta efecto. - Verifica que
sixelesté instalado en el mismo entorno virtual en el que se ejecuta tu script (pip install sixel). - Asegúrate de que
plotsea 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 conocer los valores que aceptaresults[0].plot().
Si los problemas persisten, consulta el repositorio de VSCode para ver el estado de compatibilidad de imágenes en la terminal.
- Confirma que tanto
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
sixeles una bifurcación de la librería sin mantenimientoPySixely consiste en un envoltorio ligero en Python sobre Pillow (PIL). Siimport sixelfalla oSixelWriter().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 adraw(), consulta la documentación del modo de predicción.