Meet YOLO26: next-gen vision AI.

Link to this sectionVisualizando resultados de inferência num terminal#

Sixel example of image in Terminal

Imagem do site libsixel.

Link to this sectionMotivação#

Ao conectar-te a uma máquina remota, visualizar resultados de imagem normalmente não é possível ou requer mover dados para um dispositivo local com uma GUI. O terminal integrado do VSCode permite renderizar imagens diretamente. Esta é uma breve demonstração sobre como usar isto em conjunto com o ultralytics e os resultados de predição.

Aviso

Compatível apenas com Linux e MacOS. Verifica o repositório do VSCode, o estado da Issue ou a documentação para atualizações sobre o suporte para Windows para visualizar 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, 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. Este é um 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 numa variável. Vê mais sobre argumentos de inferência e como trabalhar com resultados na página do predict mode.

    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 os parâmetros do método plot para ver os possíveis argumentos a utilizar.
  4. Agora, usa o OpenCV para converter o np.ndarray para dados bytes. Depois usa io.BytesIO para criar um objeto "tipo ficheiro".

    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. Cria uma instância de SixelWriter e, em seguida, usa 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

Perigo

Usar este exemplo com vídeos ou frames de GIF animados não foi testado. Tenta por tua 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. Também é possível usar outras extensões de imagem.
  2. Apenas o objeto no índice 1 que é retornado é necessário.
  3. Consulta os parâmetros do método plot para ver os possíveis argumentos a utilizar.

Dica

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

Link to this sectionFAQ#

Link to this sectionComo posso ver os resultados de inferência YOLO num terminal VSCode no macOS ou Linux?#

Para ver resultados de inferência YOLO num terminal VSCode no macOS ou Linux, segue estes passos:

  1. Ativa as definições necessárias do VSCode:

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

    pip install sixel
  3. Carrega o teu modelo YOLO e executa a inferência:

    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")
    results = model.predict(source="path_to_image")
    plot = results[0].plot()
  4. Converte a imagem do resultado da inferência para bytes e exibe-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 predict mode.

Link to this sectionPor que é que o protocolo sixel só funciona no Linux e macOS?#

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

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

Se encontrares problemas ao exibir imagens no terminal do VSCode usando sixel:

  1. Certifica-te de que as definições necessárias no VSCode estão ativadas:

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

    pip install sixel
  3. Verifica se há erros na tua conversão de dados de imagem e no código de plotagem. 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, consulta o repositório do VSCode e visita a secção de parâmetros do método plot para orientação adicional.

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

Exibir resultados de inferência de vídeo ou frames de GIF animados usando sixel no terminal não foi testado e pode não ser suportado. Recomendamos começar com imagens estáticas e verificar a compatibilidade. Tenta resultados de vídeo por tua conta e risco, tendo em mente as limitações de desempenho. Para mais informações sobre como plotar resultados de inferência, visita a página do predict mode.

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

Para resolver problemas com a biblioteca python-sixel:

  1. Certifica-te de que a biblioteca está instalada corretamente no teu ambiente virtual:

    pip install sixel
  2. Verifica se tens as dependências necessárias do Python e do sistema.

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

  4. Verifica novamente o teu código para potenciais erros, especificamente o uso de SixelWriter e os passos de conversão de dados de imagem.

Para assistência adicional sobre como trabalhar com modelos YOLO e integração sixel, vê as páginas de documentação de export e predict mode.

Comentários