Visualización de los resultados de la inferencia en una terminal
Imagen del sitio web de libsixel.
Motivación
Al conectarse a una máquina remota, normalmente la visualización de los resultados de la imagen no es posible o requiere mover los datos a un dispositivo local con una GUI. El terminal integrado de VSCode permite renderizar imágenes directamente. Esta es una breve demostración de cómo usar esto junto con ultralytics
con resultados de predicción.
Advertencia
Solo compatible con Linux y MacOS. Consulte el repositorio de VSCode, consulte el estado del problema, o documentación para obtener actualizaciones sobre la compatibilidad con Windows para ver imágenes en la terminal con sixel
.
Los protocolos compatibles con VSCode para ver imágenes usando el terminal integrado son sixel
y iTerm
. Esta guía demostrará el uso del sixel
protocolo.
Proceso
-
Primero, debe habilitar la configuración
terminal.integrated.enableImages
yterminal.integrated.gpuAcceleration
en VSCode."terminal.integrated.gpuAcceleration": "auto" # "auto" is default, can also use "on" "terminal.integrated.enableImages": true
-
Instale el
python-sixel
biblioteca en su entorno virtual. Esta es una bifurcación de laPySixel
biblioteca, que ya no se mantiene.pip install sixel
-
Cargue un modelo y ejecute la inferencia, luego trace los resultados y guárdelos en una variable. Consulte más información sobre los argumentos de inferencia y cómo trabajar con los resultados en la página del modo predict.
from ultralytics import YOLO # Load a model model = YOLO("yolo11n.pt") # Run inference on an image results = model.predict(source="ultralytics/assets/bus.jpg") # Plot inference results plot = results[0].plot() # (1)!
- Consulte los parámetros del método plot para ver los posibles argumentos que puede utilizar.
-
Ahora, use OpenCV para convertir los
np.ndarray
a datosbytes
datos. Luego, useio.BytesIO
para 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)
- También es posible utilizar otras extensiones de imagen.
- Solo se necesita el objeto en el índice
1
que se devuelve.
-
Crea un
SixelWriter
y luego use 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
Peligro
El uso de este ejemplo con vídeos o fotogramas GIF animados no se ha probado. Inténtelo bajo su propio riesgo.
Ejemplo de código completo
import io
import cv2
from sixel import SixelWriter
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.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.
- Solo se necesita el objeto en el índice
1
que se devuelve. - Consulte los parámetros del método plot para ver los posibles argumentos que puede utilizar.
Consejo
Es posible que necesite usar clear
para "borrar" la vista de la imagen en la terminal.
Preguntas frecuentes
¿Cómo puedo ver los resultados de la inferencia de YOLO en una terminal de VSCode en macOS o Linux?
Para ver los resultados de la inferencia de YOLO en una terminal de VSCode en macOS o Linux, siga estos pasos:
-
Habilite la configuración necesaria de VSCode:
"terminal.integrated.enableImages": true "terminal.integrated.gpuAcceleration": "auto"
-
Instale la biblioteca sixel:
pip install sixel
-
Cargue su modelo YOLO y ejecute la inferencia:
from ultralytics import YOLO model = YOLO("yolo11n.pt") results = model.predict(source="path_to_image") plot = results[0].plot()
-
Convierta la imagen del resultado de la inferencia a bytes y muéstrela en la 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 obtener más detalles, visite la página del modo predict.
¿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 con gráficos de terminal mediante sixel aún está en desarrollo. Para obtener actualizaciones sobre la compatibilidad con Windows, consulte el estado del problema en VSCode y la documentación.
¿Qué ocurre si tengo problemas para mostrar imágenes en la terminal de VSCode?
Si tiene problemas para mostrar imágenes en la terminal de VSCode usando sixel:
-
Asegúrese de que la configuración necesaria en VSCode esté habilitada:
"terminal.integrated.enableImages": true "terminal.integrated.gpuAcceleration": "auto"
-
Verifique la instalación de la biblioteca sixel:
pip install sixel
-
Compruebe si hay errores en la conversión de datos de imagen y en el código de 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, consulte el repositorio de VSCode y visite la sección de parámetros del método plot para obtener orientación adicional.
¿Puede YOLO mostrar los resultados de la inferencia de vídeo en la terminal usando sixel?
La visualización de resultados de inferencia de video o fotogramas GIF animados mediante sixel en la terminal no se ha probado actualmente y puede no ser compatible. Recomendamos comenzar con imágenes estáticas y verificar la compatibilidad. Intente obtener resultados de video bajo su propio riesgo, teniendo en cuenta las limitaciones de rendimiento. Para obtener más información sobre el trazado de resultados de inferencia, visite la página del modo predict.
¿Cómo puedo solucionar problemas con la python-sixel
librería?
Para solucionar problemas con la python-sixel
librería:
-
Asegúrese de que la librería esté correctamente instalada en su entorno virtual:
pip install sixel
-
Verifique que tiene las dependencias necesarias de python y del sistema.
-
Consulte el repositorio de python-sixel en GitHub para obtener documentación adicional y soporte de la comunidad.
-
Revise su código en busca de posibles errores, específicamente el uso de
SixelWriter
y 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 de sixel, consulte las páginas de documentación de export y modo predict.