Ir al contenido

Visualizaci贸n de los resultados de la inferencia en un terminal

Sixel ejemplo de imagen en Terminal

Imagen de la web libsixel.

Motivaci贸n

Cuando se conecta a una m谩quina remota, normalmente la visualizaci贸n de los resultados de las im谩genes no es posible o requiere trasladar los datos a un dispositivo local con una interfaz gr谩fica de usuario. El terminal integrado VSCode permite renderizar directamente las im谩genes. Esta es una breve demostraci贸n de c贸mo utilizarlo junto con ultralytics con resultados de las predicciones.

Advertencia

S贸lo compatible con Linux y MacOS. Compruebe el Repositorio VSCodecomprobar Estado de la cuesti贸no documentaci贸n para obtener informaci贸n actualizada sobre la compatibilidad con Windows para ver im谩genes en el terminal con sixel.

Los protocolos compatibles con VSCode para la visualizaci贸n de im谩genes mediante el terminal integrado son los siguientes sixel y iTerm. Esta gu铆a mostrar谩 el uso del sixel protocolo.

Proceso

  1. En primer lugar, debe activar la configuraci贸n 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 enable terminal images setting

  2. Instale el python-sixel en su 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 los almacena en una variable. Consulte m谩s informaci贸n sobre los argumentos de inferencia y el trabajo con los resultados en la p谩gina del modo de predicci贸n.

    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)!
    
    1. Consulte los par谩metros del m茅todo de trazado para ver los posibles argumentos a utilizar.
  4. Ahora, utilice OpenCV para convertir el numpy.ndarray a bytes datos. A continuaci贸n, utilice io.BytesIO para 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)
    
    1. Tambi茅n es posible utilizar otras extensiones de imagen.
    2. S贸lo el objeto en el 铆ndice 1 que se devuelve es necesario.
  5. Crear un SixelWriter y, a continuaci贸n, utilice 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 el uso de este ejemplo con v铆deos o marcos GIF animados. Int茅ntelo bajo su propia responsabilidad.

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)
  1. Tambi茅n es posible utilizar otras extensiones de imagen.
  2. S贸lo el objeto en el 铆ndice 1 que se devuelve es necesario.
  3. Consulte los par谩metros del m茅todo de trazado para ver los posibles argumentos a utilizar.

Consejo

Puede que necesite 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, siga estos pasos:

  1. Habilite los ajustes VSCode necesarios:

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

    pip install sixel
    
  3. 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()
    
  4. Convierte la imagen del resultado de la inferencia en bytes y la muestra 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, visite la p谩gina del modo de predicci贸n.

驴Por qu茅 el protocolo sixel s贸lo funciona en Linux y macOS?

Actualmente, el protocolo sixel solo es compatible con Linux y macOS, ya que estas plataformas disponen de funciones de terminal nativas compatibles con los gr谩ficos sixel. La compatibilidad de Windows con gr谩ficos de terminal mediante sixel a煤n est谩 en fase de desarrollo. Para obtener informaci贸n actualizada sobre la compatibilidad con Windows, consulte el estado y la documentaci贸n de VSCode Issue.

驴Qu茅 ocurre si tengo problemas para visualizar im谩genes en el terminal VSCode?

Si tiene problemas para visualizar im谩genes en el terminal VSCode utilizando sixel:

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

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

    pip install sixel
    
  3. 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 VSCode y visite la secci贸n de par谩metros del m茅todo de trazado para obtener m谩s informaci贸n.

驴Puede YOLO mostrar los resultados de la inferencia de v铆deo en el terminal utilizando sixel?

La visualizaci贸n de los resultados de la inferencia de v铆deo o de fotogramas GIF animados mediante sixel en el terminal no se ha probado actualmente y es posible que no sea compatible. Recomendamos empezar con im谩genes est谩ticas y verificar la compatibilidad. Intente mostrar resultados de v铆deo bajo su propia responsabilidad, teniendo en cuenta las limitaciones de rendimiento. Para m谩s informaci贸n sobre el trazado de resultados de inferencia, visite la p谩gina del modo de predicci贸n.

驴C贸mo puedo solucionar problemas con el python-sixel 驴Biblioteca?

Para solucionar problemas con el python-sixel biblioteca:

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

    pip install sixel
    
  2. Compruebe que dispone de las dependencias necesarias de Python y del sistema.

  3. Consulte el repositorio GitHubpython -sixel para obtener documentaci贸n adicional y apoyo de la comunidad.

  4. Compruebe su c贸digo en busca de posibles errores, especialmente el uso de SixelWriter y los 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, consulte las p谩ginas de documentaci贸n sobre exportaci贸n y modo predictivo.

Creado hace 9 meses 鉁忥笍 Actualizado hace 2 meses

Comentarios