Visualizar resultados de inferência num terminal
Imagem do sítio Web da libsixel.
Motivação
Quando se liga a uma máquina remota, normalmente não é possível visualizar os resultados da imagem ou é necessário mover os dados para um dispositivo local com uma GUI. O terminal integrado VSCode permite a renderização direta de imagens. Esta é uma breve demonstração de como utilizá-lo em conjunto com ultralytics
com resultados das previsões.
Aviso
Compatível apenas com Linux e MacOS. Verificar o Repositório VSCode, verificar Estado da questão, ou documentação para obter actualizações sobre o suporte do Windows para visualizar imagens no terminal com sixel
.
Os protocolos compatíveis com VSCode para visualizar imagens utilizando o terminal integrado são sixel
e iTerm
. Este guia demonstrará a utilização do sixel
protocolo.
Processo
-
Primeiro, é necessário ativar as definições
terminal.integrated.enableImages
eterminal.integrated.gpuAcceleration
no VSCode."terminal.integrated.gpuAcceleration": "auto" # "auto" is default, can also use "on" "terminal.integrated.enableImages": false
-
Instalar o
python-sixel
no seu ambiente virtual. Esta é uma garfo doPySixel
biblioteca, que já não é mantida. -
Carrega um modelo e executa a inferência, depois traça os resultados e armazena-os numa variável. Veja mais sobre argumentos de inferência e como trabalhar com resultados na página do modo de previsão.
from ultralytics import YOLO # Load a model model = YOLO("yolo11n.pt") # Run inference on an image results = model.predict(source="ultralytics/assets/bus.jpg") # Plot inference results plot = results[0].plot() # (1)!
- Ver parâmetros do método plot para ver os argumentos possíveis a utilizar.
-
Agora, utilize OpenCV para converter o
numpy.ndarray
parabytes
dados. Em seguida, utilizario.BytesIO
para criar um objeto do 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 utilizar outras extensões de imagem.
- Apenas o objeto no índice
1
que é devolvido é necessário.
-
Criar um
SixelWriter
e, em seguida, utilizar a instância.draw()
para desenhar a imagem no terminal.
Exemplo de resultados de inferência
Perigo
A utilização deste exemplo com vídeos ou quadros GIF animados não foi testada. 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("yolo11n.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 utilizar outras extensões de imagem.
- Apenas o objeto no índice
1
que é devolvido é necessário. - Ver parâmetros do método plot para ver os argumentos possíveis a utilizar.
Dica
Poderá ser necessário utilizar clear
para "apagar" a visualização da imagem no terminal.
FAQ
Como é que posso ver os resultados da inferência YOLO num terminal VSCode no macOS ou no Linux?
Para visualizar os resultados da inferência YOLO num terminal VSCode no macOS ou Linux, siga estes passos:
-
Ativar as definições de VSCode necessárias:
-
Instalar a biblioteca sixel:
-
Carregue o seu modelo YOLO e execute a inferência:
-
Converte a imagem do resultado da inferência em bytes e apresenta-a no terminal:
Para mais informações, visite a página do modo de previsão.
Porque é que o protocolo sixel só funciona em Linux e macOS?
Atualmente, o protocolo sixel só é suportado em Linux e macOS porque estas plataformas têm capacidades de terminal nativas compatíveis com gráficos sixel. O suporte do Windows para gráficos de terminal usando sixel ainda está em desenvolvimento. Para obter atualizações sobre a compatibilidade do Windows, verifique o status e a documentação do problema do VSCode.
E se eu tiver problemas com a apresentação de imagens no terminal VSCode?
Se tiver problemas com a visualização de imagens no terminal VSCode utilizando o sixel:
-
Certifique-se de que as definições necessárias no VSCode estão activadas:
-
Verificar a instalação da biblioteca sixel:
-
Verifique se existem erros no seu código de conversão de dados de imagem e de plotagem. Por exemplo:
Se os problemas persistirem, consulte o repositório VSCode e visite a secção de parâmetros do método de plotagem para obter orientações adicionais.
O sítio YOLO pode apresentar os resultados da inferência de vídeo no terminal utilizando o sixel?
A exibição de resultados de inferência de vídeo ou quadros GIF animados usando sixel no terminal não foi testada no momento e pode não ser suportada. Recomendamos começar com imagens estáticas e verificar a compatibilidade. Tente resultados de vídeo por sua conta e risco, tendo em mente as restrições de desempenho. Para obter mais informações sobre a plotagem de resultados de inferência, visite a página do modo de previsão.
Como é que posso resolver problemas com o python-sixel
biblioteca?
Para solucionar problemas com o python-sixel
biblioteca:
-
Certifique-se de que a biblioteca está corretamente instalada no seu ambiente virtual:
-
Verifique se você tem as dependências necessárias do sistema e do Python .
-
Consulte o repositório GitHubpython -sixel para obter documentação adicional e suporte da comunidade.
-
Verifique novamente o seu código para detetar possíveis erros, especificamente a utilização de
SixelWriter
e passos de conversão de dados de imagem.
Para obter mais assistência sobre como trabalhar com os modelos YOLO e a integração do sixel, consulte as páginas de documentação do modo de exportação e previsão.