Link to this sectionComment afficher les résultats d'inférence YOLO dans un terminal VSCode#
Image provenant du site web libsixel.
Link to this sectionMotivation#
Lorsque tu te connectes à une machine distante via SSH, visualiser les résultats d'image normalement n'est pas possible ou nécessite de déplacer les données vers un appareil local doté d'une interface graphique. Le terminal intégré de VSCode peut afficher des images directement, ce qui te permet d'inspecter les résultats de prédiction là où tu exécutes l'inférence, sans copier de fichiers sur ton ordinateur portable. Ce guide détaille la configuration à suivre, la mise en place du code, et répond aux questions fréquentes.
Compatible uniquement avec Linux et macOS. Consulte le dépôt VSCode, vérifie l'état des tickets, ou la documentation pour obtenir des mises à jour sur le support de Windows pour l'affichage d'images dans le terminal avec sixel.
Les protocoles compatibles avec VSCode pour visualiser des images via le terminal intégré sont sixel et iTerm. Ce guide démontre l'utilisation du protocole sixel.
Link to this sectionProcessus#
-
Tout d'abord, tu dois activer les paramètres
terminal.integrated.enableImagesetterminal.integrated.gpuAccelerationdans VSCode."terminal.integrated.gpuAcceleration": "auto" # "auto" is default, can also use "on" "terminal.integrated.enableImages": true
-
Installe la bibliothèque
python-sixeldans ton environnement virtuel. Il s'agit d'un fork de la bibliothèquePySixel, qui n'est plus maintenue.pip install sixel -
Charge un modèle et exécute l'inférence, puis trace les résultats et stocke-les dans une variable. En savoir plus sur les arguments d'inférence et l'utilisation des résultats sur la page mode prédiction.
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 les paramètres de la méthode plot pour voir les arguments possibles à utiliser.
-
Maintenant, utilise OpenCV pour convertir le
np.ndarrayen donnéesbytes. Puis utiliseio.BytesIOpour créer un objet "type fichier".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)- Il est également possible d'utiliser d'autres extensions d'image.
- Seul l'objet à l'index
1retourné est nécessaire.
-
Crée une instance
SixelWriter, puis utilise la méthode.draw()pour afficher l'image dans le 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 sectionExemple de résultats d'inférence#
L'utilisation de cet exemple avec des vidéos ou des images GIF animées n'a pas été testée. Tente-le à tes risques et périls.
Link to this sectionExemple de code complet#
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)- Il est également possible d'utiliser d'autres extensions d'image.
- Seul l'objet à l'index
1retourné est nécessaire. - Consulte les paramètres de la méthode plot pour voir les arguments possibles à utiliser.
Tu peux avoir besoin d'utiliser clear pour "effacer" la vue de l'image dans le terminal.
Link to this sectionFAQ#
Link to this sectionComment puis-je afficher les résultats d'inférence YOLO dans un terminal VSCode sur macOS ou Linux ?#
Pour afficher les résultats d'inférence YOLO dans un terminal VSCode sur macOS ou Linux, suis ces étapes :
-
Active les paramètres VSCode nécessaires :
"terminal.integrated.enableImages": true "terminal.integrated.gpuAcceleration": "auto" -
Installe la bibliothèque sixel :
pip install sixel -
Charge ton modèle YOLO et lance l'inférence :
from ultralytics import YOLO model = YOLO("yolo26n.pt") results = model.predict(source="ultralytics/assets/bus.jpg") plot = results[0].plot() -
Convertis l'image du résultat d'inférence en octets et affiche-la dans le 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)
Pour plus de détails, consulte la page mode prédiction.
Link to this sectionPourquoi le protocole sixel ne fonctionne-t-il que sur Linux et macOS ?#
Le protocole sixel n'est actuellement pris en charge que sur Linux et macOS, car ces plateformes disposent de capacités de terminal natives compatibles avec les graphiques sixel. Le support Windows pour les graphiques de terminal utilisant sixel est toujours en cours de développement. Pour des mises à jour sur la compatibilité Windows, vérifie l'état du ticket VSCode et la documentation.
Link to this sectionQue faire si je rencontre des problèmes lors de l'affichage des images dans le terminal VSCode ?#
Si rien ne s'affiche, effectue ces vérifications dans l'ordre :
- Confirme que
terminal.integrated.enableImagesetterminal.integrated.gpuAccelerationsont bien activés, comme indiqué dans la section Processus, puis redémarre le terminal intégré pour que les paramètres prennent effet. - Vérifie que
sixelest installé dans le même environnement virtuel que celui où ton script s'exécute (pip install sixel). - Assure-toi que
plotest unnp.ndarrayvalide avant de l'encoder, carcv2.imencodegénère une erreur si l'image est vide ou n'est pas un tableau valide. Consulte les paramètres de la méthode plot pour connaître les valeurs acceptées parresults[0].plot().
Si les problèmes persistent, consulte le dépôt VSCode pour connaître l'état du support des images dans le terminal.
Link to this sectionYOLO peut-il afficher des résultats d'inférence vidéo dans le terminal via sixel ?#
L'affichage de résultats d'inférence vidéo ou d'images GIF animées via sixel dans le terminal n'est pas testé actuellement et pourrait ne pas être supporté. Nous te recommandons de commencer par des images statiques pour vérifier la compatibilité. Tente les résultats vidéo à tes risques et périls, en gardant à l'esprit les contraintes de performance. Pour plus d'informations sur le traçage des résultats d'inférence, visite la page mode prédiction.
Link to this sectionComment puis-je dépanner les problèmes liés à la bibliothèque python-sixel ?#
Le paquet sixel est un fork de la bibliothèque non maintenue PySixel et consiste en un léger wrapper Python sur Pillow (PIL). Si import sixel échoue ou si SixelWriter().draw() génère une erreur, confirme que le paquet est bien installé dans ton environnement virtuel actif, assure-toi que Pillow est disponible, et vérifie le dépôt GitHub python-sixel pour des notes spécifiques à la plateforme. Pour en savoir plus sur la génération de l'image que tu passes à draw(), consulte la documentation du mode prédiction.