YOLO Vision 2026:

Como visualizar resultados de inferência do YOLO no terminal do VSCode#

Sixel example of image in Terminal

Imagem do site do libsixel.

Motivação#

Ao conectar a uma máquina remota via SSH, visualizar resultados de imagem normalmente não é possível ou exige mover dados para um dispositivo local com interface gráfica. O terminal integrado do VSCode pode renderizar imagens diretamente, para que possas inspecionar os resultados de previsão exatamente onde executas a inferência, sem copiar ficheiros de volta para o teu portátil. Este guia percorre a ativação da configuração, a ligação do código e responde a perguntas comuns.

Apenas Linux e macOS

Apenas compatível com Linux e macOS. Consulta o repositório do VSCode, verifica o estado do problema ou a documentação para atualizações sobre o suporte ao Windows para ver imagens no terminal com sixel.

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

Processo#

  1. Primeiro, deves ativar as definiçõ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. Instala a biblioteca python-sixel no teu ambiente virtual. Esta é uma derivação (fork) da biblioteca PySixel, que já não é mantida.

    pip install sixel
  3. Carrega um modelo e executa a inferência, depois plota os resultados e armazena-os numa variável. Vê mais sobre os argumentos de inferência e como trabalhar com resultados na página do 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. Consulta parâmetros do método plot para ver os argumentos possíveis a utilizar.
  4. Agora, utiliza o OpenCV para converter os dados de np.ndarray para bytes. Em seguida, utiliza io.BytesIO para criar um objeto "semelhante a um ficheiro" (file-like).

    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 é devolvido é necessário.
  5. Cria uma instância de SixelWriter e, em seguida, utiliza 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)

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

Exemplo 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 é devolvido é necessário.
  3. Consulta parâmetros do método plot para ver os argumentos possíveis a utilizar.

Limpando a imagem

Poderás precisar de usar clear para "apagar" a visualização da imagem no terminal.

FAQ#

  • 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, visita a página do modo predict.

  • O protocolo sixel é atualmente suportado apenas em Linux e macOS porque estas plataformas possuem capacidades nativas de terminal compatíveis com gráficos sixel. O suporte do Windows para gráficos de terminal utilizando sixel ainda está em desenvolvimento. Para atualizações sobre a compatibilidade com o Windows, verifica o estado dos problemas do VSCode e a documentação.

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

    1. Confirma que tanto terminal.integrated.enableImages como terminal.integrated.gpuAcceleration estão ativados, conforme mostrado na secção Processo, e reinicia o terminal integrado para que as definições façam efeito.
    2. Verifica se sixel está instalado no mesmo ambiente virtual em que o teu script é executado (pip install sixel).
    3. Certifica-te de que plot é um np.ndarray válido antes de o codificar, uma vez que cv2.imencode gera um erro se a imagem estiver vazia ou não for uma matriz válida. Consulta os parâmetros do método plot para saber quais os valores que results[0].plot() aceita.

    Se os problemas persistirem, consulta o repositório do VSCode para ver o estado do suporte de imagens no terminal.

  • A exibição de resultados de inferência de vídeo ou fotogramas de GIF animados utilizando 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. Tenta obter resultados em vídeo por tua conta e risco, tendo em mente as restrições de desempenho. Para mais informações sobre a plotagem de resultados de inferência, visita a página do modo predict.

  • O pacote sixel é uma derivação (fork) da biblioteca não mantida PySixel e é um pequeno wrapper em Python sobre Pillow (PIL). Se import sixel falhar ou SixelWriter().draw() gerar um erro, confirma que o pacote foi instalado no teu ambiente virtual ativo, certifica-te de que o Pillow está disponível e consulta o repositório do python-sixel no GitHub para notas específicas da plataforma. Para saberes mais sobre a geração da imagem que passas para draw(), consulta a documentação do modo predict.

Comentários