Ver los resultados de la inferencia en un terminal
Imagen de la web libsixel.
Motivaci贸n
Cuando te conectas a una m谩quina remota, normalmente no es posible visualizar los resultados de las im谩genes o es necesario trasladar los datos a un dispositivo local con una interfaz gr谩fica de usuario. El terminal integrado VSCode permite visualizar directamente las im谩genes. 脡sta es una breve demostraci贸n de c贸mo utilizarlo junto con ultralytics
con resultados de la predicci贸n.
Advertencia
S贸lo compatible con Linux y MacOS. Comprueba Repositorio VSCodeComprueba Estado de la cuesti贸no documentaci贸n para actualizaciones sobre la compatibilidad con Windows para ver im谩genes en el terminal con sixel
.
Los protocolos compatibles con VSCode para visualizar im谩genes utilizando el terminal integrado son sixel
y iTerm
. Esta gu铆a mostrar谩 el uso del sixel
protocolo.
Proceso
-
Primero, debes activar los ajustes
terminal.integrated.enableImages
yterminal.integrated.gpuAcceleration
en VSCode."terminal.integrated.gpuAcceleration": "auto" # "auto" is default, can also use "on" "terminal.integrated.enableImages": false
-
Instala el
python-sixel
en tu entorno virtual. Se trata de un horquilla de laPySixel
que ya no se mantiene. -
Carga un modelo y ejecuta la inferencia, luego traza los resultados y almac茅nalos en una variable. Consulta m谩s informaci贸n sobre los argumentos de inferencia y el trabajo con los resultados en la p谩gina del modo Predecir.
from ultralytics import YOLO # Load a model model = YOLO("yolov8n.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 de trazado para ver los posibles argumentos a utilizar.
-
Ahora, utiliza OpenCV para convertir el
numpy.ndarray
abytes
datos. A continuaci贸n, utilizaio.BytesIO
para hacer 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 es posible utilizar otras extensiones de imagen.
- S贸lo el objeto del 铆ndice
1
que se devuelve es necesario.
-
Crea una
SixelWriter
y luego utiliza la funci贸n.draw()
para dibujar la imagen en el terminal.
Ejemplo de resultados de inferencia
Peligro
No se ha probado la utilizaci贸n de este ejemplo con v铆deos o fotogramas GIF animados. 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("yolov8n.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 es posible utilizar otras extensiones de imagen.
- S贸lo el objeto del 铆ndice
1
que se devuelve es necesario. - Consulta los par谩metros del m茅todo de trazado para ver los posibles argumentos a utilizar.
Consejo
Puede que necesites utilizar clear
para "borrar" la vista de la imagen en el terminal.
PREGUNTAS FRECUENTES
驴C贸mo puedo ver los resultados de la inferencia YOLO en un terminal VSCode en macOS o Linux?
Para ver los resultados de la inferencia YOLO en un terminal VSCode en macOS o Linux, sigue estos pasos:
-
Activa los ajustes VSCode necesarios:
-
Instala la biblioteca sixel:
-
Carga tu modelo YOLO y ejecuta la inferencia:
-
Convierte la imagen del resultado de la inferencia en bytes y mu茅strala en el terminal:
Para m谩s detalles, visita la p谩gina del modo predecir.
驴Por qu茅 el protocolo sixel s贸lo funciona en Linux y macOS?
Actualmente, el protocolo sixel s贸lo es compatible con Linux y macOS porque estas plataformas tienen capacidades de terminal nativas compatibles con los gr谩ficos sixel. La compatibilidad de Windows con gr谩ficos de terminal utilizando sixel est谩 a煤n en desarrollo. Para obtener informaci贸n actualizada sobre la compatibilidad con Windows, consulta el estado y la documentaci贸n de VSCode Issue.
驴Qu茅 pasa si tengo problemas con la visualizaci贸n de im谩genes en el terminal VSCode?
Si tienes problemas para mostrar im谩genes en el terminal VSCode utilizando sixel:
-
Aseg煤rate de que est谩n activados los ajustes necesarios en VSCode:
-
Verifica la instalaci贸n de la biblioteca sixel:
-
Comprueba si hay errores en la conversi贸n de datos de imagen y en el c贸digo de trazado. Por ejemplo:
Si los problemas persisten, consulta el repositorio VSCode, y visita la secci贸n de par谩metros del m茅todo de trazado para obtener orientaci贸n adicional.
驴Puede YOLO mostrar los resultados de la inferencia de v铆deo en el terminal utilizando sixel?
La visualizaci贸n de resultados de inferencia de v铆deo o de fotogramas GIF animados utilizando sixel en el terminal no se ha probado actualmente y puede que no sea 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 el trazado de resultados de inferencia, visita la p谩gina del modo predecir.
驴C贸mo puedo solucionar los problemas con el python-sixel
驴biblioteca?
Para solucionar problemas con el python-sixel
biblioteca:
-
Aseg煤rate de que la biblioteca est谩 correctamente instalada en tu entorno virtual:
-
Comprueba que tienes las dependencias necesarias de Python y del sistema.
-
Consulta el repositorio GitHub depython -sixel para obtener documentaci贸n adicional y ayuda de la comunidad.
-
Comprueba dos veces tu c贸digo en busca de posibles errores, concretamente el uso de
SixelWriter
y pasos de conversi贸n de datos de imagen.
Para obtener m谩s ayuda sobre el trabajo con los modelos YOLO y la integraci贸n de sixel, consulta las p谩ginas de documentaci贸n de los modos exportar y predecir.