Meet YOLO26: next-gen vision AI.

Link to this sectionComo visualizar resultados de inferência do YOLO no terminal do VSCode#

Sixel example of image in Terminal

Imagem do site libsixel.

Link to this sectionMotivação#

Ao conectar a uma máquina remota via SSH, a visualização normal de imagens não é possível ou requer a transferência de dados para um dispositivo local com interface gráfica (GUI). O terminal integrado do VSCode pode renderizar imagens diretamente, permitindo que você inspecione os resultados da predição exatamente onde executa a inferência, sem precisar copiar arquivos para o seu laptop. Este guia percorre a ativação da configuração, a implementação do código e responde a perguntas comuns.

Apenas Linux e macOS

Compatível apenas com Linux e macOS. Verifique o repositório do VSCode, o status dos problemas ou a documentação para atualizações sobre o suporte ao Windows para visualização de imagens no terminal com sixel.

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

Link to this sectionProcesso#

  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

    VSCode enable terminal images setting

  2. Instale a biblioteca python-sixel no seu ambiente virtual. Este é um fork da biblioteca PySixel, que não é mais mantida.

    pip install sixel
  3. Carregue um modelo e execute a inferência, em seguida, plote os resultados e armazene-os em uma variável. Veja mais sobre argumentos de inferência e como trabalhar com resultados na página modo predict.

    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n.pt")
    
    # Run inference on an image
    results = model.predict(source="ultralytics/assets/bus.jpg")
    
    # Plot inference results
    plot = results[0].plot()  # (1)!
    1. Consulte parâmetros do método plot para ver os possíveis argumentos a serem usados.
  4. Agora, use o OpenCV para converter o np.ndarray para dados bytes. 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. É possível usar outras extensões de imagem também.
    2. Apenas o objeto no índice 1 que é retornado é necessário.
  5. Crie uma instância SixelWriter e, em seguida, use o método .draw() 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)

Link to this sectionExemplo de resultados de inferência#

YOLO inference results displayed in terminal

Vídeos e GIFs não foram testados

O uso deste exemplo com vídeos ou frames de GIF animados não foi testado. Tente por sua própria conta e risco.

Link to this sectionExemplo de código completo#

import io

import cv2
from sixel import SixelWriter

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.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. É possível usar outras extensões de imagem também.
  2. Apenas o objeto no índice 1 que é retornado é necessário.
  3. Consulte parâmetros do método plot para ver os possíveis argumentos a serem usados.

Limpando a imagem

Você pode precisar usar clear para "apagar" a visualização da imagem no terminal.

Link to this sectionFAQ#

Link to this sectionComo posso visualizar resultados de inferência do YOLO em um terminal do VSCode no macOS ou Linux?#

Para visualizar resultados de inferência do YOLO em um terminal do VSCode no macOS ou Linux, siga estes passos:

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

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

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

    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")
    results = model.predict(source="ultralytics/assets/bus.jpg")
    plot = results[0].plot()
  4. Converta a imagem do resultado da inferência para bytes e exiba-a 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 mais detalhes, visite a página modo predict.

Link to this sectionPor que o protocolo sixel funciona apenas no Linux e macOS?#

O protocolo sixel atualmente é suportado apenas no Linux e macOS porque essas plataformas possuem capacidades nativas de terminal 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 compatibilidade no Windows, verifique o status dos problemas no VSCode e a documentação.

Link to this sectionE se eu encontrar problemas ao exibir imagens no terminal do VSCode?#

Se nada for renderizado, siga estas verificações em ordem:

  1. Confirme se terminal.integrated.enableImages e terminal.integrated.gpuAcceleration estão habilitados, conforme mostrado na seção Processo, e reinicie o terminal integrado para que as configurações entrem em vigor.
  2. Verifique se sixel está instalado no mesmo ambiente virtual em que seu script é executado (pip install sixel).
  3. Certifique-se de que plot seja um np.ndarray válido antes de codificá-lo, já que cv2.imencode gera um erro se a imagem estiver vazia ou não for uma matriz válida. Consulte os parâmetros do método plot para ver os valores que results[0].plot() aceita.

Se os problemas persistirem, consulte o repositório do VSCode para verificar o status do suporte a imagens no terminal.

Link to this sectionO YOLO consegue exibir resultados de inferência de vídeo no terminal usando sixel?#

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

Link to this sectionComo posso solucionar problemas com a biblioteca python-sixel?#

O pacote sixel é um fork da biblioteca não mantida PySixel e é um wrapper Python leve sobre o Pillow (PIL). Se o import sixel falhar ou o SixelWriter().draw() gerar um erro, confirme se o pacote foi instalado no seu ambiente virtual ativo, garanta que o Pillow esteja disponível e verifique o repositório do GitHub do python-sixel para notas específicas de plataforma. Para mais informações sobre como gerar a imagem que você passa para draw(), consulte a documentação do modo predict.

Comentários