Link to this sectionCómo ver los resultados de inferencia de YOLO en un terminal de VSCode#
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 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#
-
Primero, debes activar 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. Este es un fork de la libreríaPySixel, la cual ya no recibe mantenimiento.pip install sixel -
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)!- Consulta los parámetros del método plot para ver los posibles argumentos que puedes utilizar.
-
Ahora, utiliza OpenCV para convertir el
np.ndarraya datos de tipobytes. Luego 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 en el índice
1devuelto.
-
Crea una instancia de
SixelWritery 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#
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)- Es posible usar también otras extensiones de imagen.
- Solo se necesita el objeto en el índice
1devuelto. - Consulta los parámetros del método plot para ver los posibles argumentos que puedes utilizar.
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:
-
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 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:
- Confirma que tanto
terminal.integrated.enableImagescomoterminal.integrated.gpuAccelerationestén activados, tal como se muestra en la sección Proceso, luego reinicia el terminal integrado para que los ajustes surtan efecto. - Verifica que
sixelesté instalado en el mismo entorno virtual donde se ejecuta tu script (pip install sixel). - Asegúrate de que
plotsea unnp.ndarrayválido antes de codificarlo, ya quecv2.imencodelanza 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 aceptaresults[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.