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 el VSCode repositorioComprueba 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.
-
Instala el
python-sixel
en tu entorno virtual. Se trata de un horquilla de laPySixel
que ya no se mantiene. -
Importa las bibliotecas pertinentes
-
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".# Results image as bytes im_bytes = cv.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 as cv
from ultralytics import YOLO
from sixel import SixelWriter
# 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 = cv.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.