Link to this sectionVisualizando resultados de inferência num 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.
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#
-
Primeiro, deves ativar as definições
terminal.integrated.enableImageseterminal.integrated.gpuAccelerationno VSCode."terminal.integrated.gpuAcceleration": "auto" # "auto" is default, can also use "on" "terminal.integrated.enableImages": true
-
Instala a biblioteca
python-sixelno teu ambiente virtual. Este é um fork da bibliotecaPySixel, que já não é mantida.pip install sixel -
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)!- Consulta os parâmetros do método plot para ver os possíveis argumentos a utilizar.
-
Agora, usa o OpenCV para converter o
np.ndarraypara dadosbytes. Depois usaio.BytesIOpara 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)- Também é possível usar outras extensões de imagem.
- Apenas o objeto no índice
1que é retornado é necessário.
-
Cria uma instância de
SixelWritere, 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#
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)- Também é possível usar outras extensões de imagem.
- Apenas o objeto no índice
1que é retornado é necessário. - Consulta os parâmetros do método plot para ver os possíveis argumentos a utilizar.
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:
-
Ativa as definições necessárias do VSCode:
"terminal.integrated.enableImages": true "terminal.integrated.gpuAcceleration": "auto" -
Instala a biblioteca sixel:
pip install sixel -
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() -
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:
-
Certifica-te de que as definições necessárias no VSCode estão ativadas:
"terminal.integrated.enableImages": true "terminal.integrated.gpuAcceleration": "auto" -
Verifica a instalação da biblioteca sixel:
pip install sixel -
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:
-
Certifica-te de que a biblioteca está instalada corretamente no teu ambiente virtual:
pip install sixel -
Verifica se tens as dependências necessárias do Python e do sistema.
-
Consulta o repositório GitHub do python-sixel para documentação adicional e suporte da comunidade.
-
Verifica novamente o teu código para potenciais erros, especificamente o uso de
SixelWritere 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.