Visualización de resultados de inferencia en un terminal
Imagen del sitio web de libsixel.
Motivación
Al conectar a una máquina remota, normalmente la visualización de los resultados de imágenes no es posible o requiere mover los datos a un dispositivo local con interfaz gráfica (GUI). El terminal integrado de VSCode permite renderizar imágenes directamente. Esta es una breve demostración de cómo utilizar esto junto con ultralytics con resultados de predicción.
Solo es compatible con Linux y MacOS. Consulta el repositorio de VSCode, comprueba el estado de la incidencia 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 visualizar imágenes usando el terminal integrado son sixel e 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 biblioteca
python-sixelen tu entorno virtual. Este es un fork de la bibliotecaPySixel, que 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 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 argumentos que puedes usar.
-
Ahora, usa OpenCV para convertir el
np.ndarraya datos de tipobytes. Luego, 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)- Es posible usar también otras extensiones de imagen.
- Solo es necesario el objeto en el índice
1que se devuelve.
-
Crea una instancia de
SixelWritery, a continuación, utiliza 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 ha sido 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)- Es posible usar también otras extensiones de imagen.
- Solo es necesario el objeto en el índice
1que se devuelve. - Consulta los parámetros del método plot para ver los argumentos que puedes usar.
Es posible que necesites usar clear para "borrar" la vista de la imagen en el terminal.
Preguntas frecuentes
¿Cómo puedo ver los resultados de la inferencia de YOLO en un terminal de VSCode en macOS o Linux?
Para ver los resultados de la inferencia de YOLO en un terminal de VSCode en macOS o Linux, sigue estos pasos:
-
Habilita los ajustes necesarios en 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="path_to_image") 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 de modo de predicción.
¿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. La compatibilidad de Windows para gráficos en terminal mediante sixel sigue en desarrollo. Para obtener actualizaciones sobre la compatibilidad con Windows, consulta el estado de la incidencia en VSCode y la documentación.
¿Qué ocurre si encuentro problemas al mostrar imágenes en el terminal de VSCode?
Si encuentras problemas al mostrar imágenes en el terminal de VSCode usando sixel:
-
Asegúrate de que los ajustes necesarios en VSCode estén habilitados:
"terminal.integrated.enableImages": true "terminal.integrated.gpuAcceleration": "auto" -
Verifica la instalación de la biblioteca sixel:
pip install sixel -
Revisa si hay errores en tu código de conversión de datos de imagen y trazado. Por ejemplo:
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)
Si los problemas persisten, consulta el repositorio de VSCode y visita la sección de parámetros del método plot para obtener orientación adicional.
¿Puede YOLO mostrar resultados de inferencia de vídeo en el terminal usando sixel?
Mostrar resultados de inferencia de vídeo o fotogramas GIF animados usando sixel en el terminal no ha sido probado actualmente y puede no ser compatible. Recomendamos comenzar 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 trazar los resultados de la inferencia, visita la página de modo de predicción.
¿Cómo puedo solucionar problemas con la biblioteca python-sixel?
Para solucionar problemas con la biblioteca python-sixel:
-
Asegúrate de que la biblioteca esté correctamente instalada en tu entorno virtual:
pip install sixel -
Verifica que tienes las dependencias necesarias de Python y del sistema.
-
Consulta el repositorio de GitHub de python-sixel para obtener documentación adicional y soporte de la comunidad.
-
Vuelve a comprobar tu código en busca de posibles errores, específicamente el uso de
SixelWritery los pasos de conversión de datos de imagen.
Para obtener más ayuda sobre cómo trabajar con modelos YOLO y la integración sixel, consulta las páginas de documentación de exportación y modo de predicción.