Ir para o conteúdo

Visualizando Resultados de Inferência em um Terminal

Exemplo Sixel de imagem no Terminal

Imagem do site libsixel.

Motivação

Ao conectar-se a uma máquina remota, normalmente a visualização dos resultados da imagem não é possível ou requer a movimentação de dados para um dispositivo local com uma GUI. O terminal integrado do VSCode permite a renderização direta de imagens. Esta é uma breve demonstração de como usar isso em conjunto com ultralytics com resultados da previsão.

Aviso

Compatível apenas com Linux e MacOS. Verifique o Repositório VSCode, verifique Status da questão, ou documentação para atualizações sobre o suporte do Windows para visualizar imagens no terminal com sixel.

Os protocolos compatíveis com VSCode para visualizar imagens usando o terminal integrado são sixel e iTerm. Este guia demonstrará o uso do sixel protocolo.

Processo

  1. Primeiro, você deve habilitar as configurações terminal.integrated.enableImages e terminal.integrated.gpuAcceleration no VSCode.

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

    Ativar imagens de terminal no VSCode

  2. Instale o python-sixel biblioteca em seu ambiente virtual. Esta é uma Fork do PySixel biblioteca, que não é mais mantida.

    pip install sixel
    
  3. Carregue um modelo e execute a inferência, depois plote os resultados e armazene em uma variável. Veja mais sobre os argumentos de inferência e como trabalhar com os resultados na página do 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)!
    
    1. Consulte os parâmetros do método de plotagem para ver os possíveis argumentos a serem usados.
  4. Agora, use OpenCV para converter o np.ndarray para bytes dados. Em seguida, use io.BytesIO para criar um objeto "semelhante a um arquivo".

    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. Também é possível usar outras extensões de imagem.
    2. Apenas o objeto no índice 1 que é retornado é necessário.
  5. Criar um SixelWriter instância e, em seguida, use o .draw() método para desenhar a imagem no terminal.

    from sixel import SixelWriter
    
    # Create sixel writer object
    w = SixelWriter()
    
    # Draw the sixel image in the terminal
    w.draw(mem_file)
    

Exemplo de Resultados de Inferência

Visualizar Imagem no Terminal

Perigo

Usar este exemplo com vídeos ou quadros GIF animados não foi testado. Tente por sua conta e risco.

Exemplo 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. Também é possível usar outras extensões de imagem.
  2. Apenas o objeto no índice 1 que é retornado é necessário.
  3. Consulte os parâmetros do método de plotagem para ver os possíveis argumentos a serem usados.

Dica

Pode ser necessário usar clear para "apagar" a visualização da imagem no terminal.

FAQ

Como posso visualizar os resultados da inferência YOLO em um terminal VSCode no macOS ou Linux?

Para visualizar os resultados da inferência YOLO num terminal VSCode no macOS ou Linux, siga estes passos:

  1. Ative as configurações VSCode necessárias:

    "terminal.integrated.enableImages": true
    "terminal.integrated.gpuAcceleration": "auto"
    
  2. Instalar a biblioteca sixel:

    pip install sixel
    
  3. Carregue seu modelo YOLO e execute a inferência:

    from ultralytics import YOLO
    
    model = YOLO("yolo11n.pt")
    results = model.predict(source="path_to_image")
    plot = results[0].plot()
    
  4. Converter a imagem do resultado da inferência em bytes e exibi-la no 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 obter mais detalhes, visite a página do modo de previsão.

Por que o protocolo sixel funciona apenas no Linux e no macOS?

O protocolo sixel atualmente é suportado apenas em Linux e macOS porque essas plataformas possuem capacidades de terminal nativas compatíveis com gráficos sixel. O suporte do Windows para gráficos de terminal usando sixel ainda está em desenvolvimento. Para atualizações sobre a compatibilidade do Windows, verifique o status do VSCode Issue e a documentação.

E se eu encontrar problemas ao exibir imagens no terminal VSCode?

Se você encontrar problemas ao exibir imagens no terminal VSCode usando sixel:

  1. Certifique-se de que as configurações necessárias no VSCode estão ativadas:

    "terminal.integrated.enableImages": true
    "terminal.integrated.gpuAcceleration": "auto"
    
  2. Verifique a instalação da biblioteca sixel:

    pip install sixel
    
  3. Verifique se há erros no seu código de conversão e plotagem de dados de imagem. Por exemplo:

    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)
    

Se os problemas persistirem, consulte o repositório VSCode e visite a seção parâmetros do método plot para obter orientação adicional.

O YOLO pode exibir os resultados da inferência de vídeo no terminal usando sixel?

A exibição de resultados de inferência de vídeo ou frames de GIF animado usando sixel no terminal não foi testada e pode não ser suportada. Recomendamos começar com imagens estáticas e verificar a compatibilidade. Tente obter resultados de vídeo por sua conta e risco, tendo em mente as restrições de desempenho. Para obter mais informações sobre como plotar resultados de inferência, visite a página do modo predict.

Como posso solucionar problemas com o python-sixel biblioteca?

Para solucionar problemas com o python-sixel biblioteca:

  1. Certifique-se de que a biblioteca está instalada corretamente no seu ambiente virtual:

    pip install sixel
    
  2. Verifique se você tem as dependências de Python e do sistema necessárias.

  3. Consulte o repositório python-sixel no GitHub para documentação adicional e suporte da comunidade.

  4. Verifique seu código em busca de possíveis erros, especificamente o uso de SixelWriter e etapas de conversão de dados de imagem.

Para obter mais assistência sobre como trabalhar com modelos YOLO e integração Sixel, consulte as páginas de documentação de exportação e modo de previsão.



📅 Criado há 1 ano ✏️ Atualizado há 10 dias

Comentários