Link to this sectionComo visualizar resultados de inferência do YOLO no terminal do VSCode#
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.
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#
-
Primeiro, você deve habilitar as configurações
terminal.integrated.enableImageseterminal.integrated.gpuAccelerationno VSCode."terminal.integrated.gpuAcceleration": "auto" # "auto" is default, can also use "on" "terminal.integrated.enableImages": true
-
Instale a biblioteca
python-sixelno seu ambiente virtual. Este é um fork da bibliotecaPySixel, que não é mais mantida.pip install sixel -
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)!- Consulte parâmetros do método plot para ver os possíveis argumentos a serem usados.
-
Agora, use o OpenCV para converter o
np.ndarraypara dadosbytes. Em seguida, useio.BytesIOpara 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)- É possível usar outras extensões de imagem também.
- Apenas o objeto no índice
1que é retornado é necessário.
-
Crie uma instância
SixelWritere, 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#
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)- É possível usar outras extensões de imagem também.
- Apenas o objeto no índice
1que é retornado é necessário. - Consulte parâmetros do método plot para ver os possíveis argumentos a serem usados.
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:
-
Habilite as configurações necessárias do VSCode:
"terminal.integrated.enableImages": true "terminal.integrated.gpuAcceleration": "auto" -
Instale a biblioteca sixel:
pip install sixel -
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() -
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:
- Confirme se
terminal.integrated.enableImageseterminal.integrated.gpuAccelerationestão habilitados, conforme mostrado na seção Processo, e reinicie o terminal integrado para que as configurações entrem em vigor. - Verifique se
sixelestá instalado no mesmo ambiente virtual em que seu script é executado (pip install sixel). - Certifique-se de que
plotseja umnp.ndarrayválido antes de codificá-lo, já quecv2.imencodegera 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 queresults[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.