Meet YOLO26: next-gen vision AI.

Link to this sectionComment afficher les résultats d'inférence YOLO dans un terminal VSCode#

Sixel example of image in Terminal

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.

Linux et macOS uniquement

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#

  1. Tout d'abord, tu dois activer les paramètres terminal.integrated.enableImages et terminal.integrated.gpuAcceleration dans VSCode.

    "terminal.integrated.gpuAcceleration": "auto" # "auto" is default, can also use "on"
    "terminal.integrated.enableImages": true

    VSCode enable terminal images setting

  2. Installe la bibliothèque python-sixel dans ton environnement virtuel. Il s'agit d'un fork de la bibliothèque PySixel, qui n'est plus maintenue.

    pip install sixel
  3. 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)!
    1. Consulte les paramètres de la méthode plot pour voir les arguments possibles à utiliser.
  4. Maintenant, utilise OpenCV pour convertir le np.ndarray en données bytes. Puis utilise io.BytesIO pour 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)
    1. Il est également possible d'utiliser d'autres extensions d'image.
    2. Seul l'objet à l'index 1 retourné est nécessaire.
  5. 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#

YOLO inference results displayed in terminal

Les vidéos et les GIF ne sont pas testés

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)
  1. Il est également possible d'utiliser d'autres extensions d'image.
  2. Seul l'objet à l'index 1 retourné est nécessaire.
  3. Consulte les paramètres de la méthode plot pour voir les arguments possibles à utiliser.

Effacer l'image

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 :

  1. Active les paramètres VSCode nécessaires :

    "terminal.integrated.enableImages": true
    "terminal.integrated.gpuAcceleration": "auto"
  2. Installe la bibliothèque sixel :

    pip install sixel
  3. 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()
  4. 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 :

  1. Confirme que terminal.integrated.enableImages et terminal.integrated.gpuAcceleration sont bien activés, comme indiqué dans la section Processus, puis redémarre le terminal intégré pour que les paramètres prennent effet.
  2. Vérifie que sixel est installé dans le même environnement virtuel que celui où ton script s'exécute (pip install sixel).
  3. Assure-toi que plot est un np.ndarray valide avant de l'encoder, car cv2.imencode gé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 par results[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.

Commentaires