Saltar al contenido

Ver los resultados de la inferencia en un terminal

Sixel ejemplo de imagen en 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

  1. Primero, debes activar los ajustes terminal.integrated.enableImages y terminal.integrated.gpuAcceleration en VSCode.

    "terminal.integrated.gpuAcceleration": "auto" # "auto" is default, can also use "on"
    "terminal.integrated.enableImages": false
    

    VSCode habilita el ajuste de las im谩genes del terminal

  2. Instala el python-sixel en tu entorno virtual. Se trata de un horquilla de la PySixel que ya no se mantiene.

    pip install sixel
    
  3. 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)!
    
    1. Consulta los par谩metros del m茅todo de trazado para ver los posibles argumentos a utilizar.
  4. Ahora, utiliza OpenCV para convertir el numpy.ndarray a bytes datos. A continuaci贸n, utiliza io.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)
    
    1. Tambi茅n es posible utilizar otras extensiones de imagen.
    2. S贸lo el objeto del 铆ndice 1 que se devuelve es necesario.
  5. Crea una SixelWriter y luego utiliza la funci贸n .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

Ver imagen en el terminal

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)
  1. Tambi茅n es posible utilizar otras extensiones de imagen.
  2. S贸lo el objeto del 铆ndice 1 que se devuelve es necesario.
  3. 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:

  1. Activa los ajustes VSCode necesarios:

    "terminal.integrated.enableImages": true
    "terminal.integrated.gpuAcceleration": "auto"
    
  2. Instala la biblioteca sixel:

    pip install sixel
    
  3. Carga tu modelo YOLO y ejecuta la inferencia:

    from ultralytics import YOLO
    
    model = YOLO("yolov8n.pt")
    results = model.predict(source="path_to_image")
    plot = results[0].plot()
    
  4. Convierte la imagen del resultado de la inferencia en 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 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:

  1. Aseg煤rate de que est谩n activados los ajustes necesarios en VSCode:

    "terminal.integrated.enableImages": true
    "terminal.integrated.gpuAcceleration": "auto"
    
  2. Verifica la instalaci贸n de la biblioteca sixel:

    pip install sixel
    
  3. Comprueba 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, 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:

  1. Aseg煤rate de que la biblioteca est谩 correctamente instalada en tu entorno virtual:

    pip install sixel
    
  2. Comprueba que tienes las dependencias necesarias de Python y del sistema.

  3. Consulta el repositorio GitHub depython -sixel para obtener documentaci贸n adicional y ayuda de la comunidad.

  4. 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.



Creado 2024-03-09, Actualizado 2024-07-05
Autores: glenn-jocher (6), IvorZhu331 (1), Burhan-Q (1)

Comentarios