YOLO Vision 2026 :

Comment afficher les résultats d'inférence YOLO dans un terminal VSCode#

Image provenant du site Web de libsixel.

Motivation#

Lors d'une connexion à une machine distante via SSH, la visualisation des résultats d'image n'est normalement pas possible ou nécessite le transfert de données vers un appareil local doté d'une interface graphique. Le terminal intégré de VSCode peut afficher les images directement, ce qui te permet d'inspecter les résultats de prédiction là même où tu exécutes l'inférence, sans avoir à copier les fichiers sur ton ordinateur portable. Ce guide détaille l'activation de la configuration, 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, l'état des tickets, ou la documentation pour obtenir des mises à jour sur la prise en charge de Windows afin d'afficher des images dans le terminal avec sixel.

Les protocoles compatibles avec VSCode pour afficher des images à l'aide du terminal intégré sont sixel et iTerm. Ce guide démontrera l'utilisation du protocole sixel.

Processus#

  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. Apprends-en plus sur les arguments d'inférence et la manipulation des résultats sur la page du mode 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)!
    1. Consulte les paramètres de la méthode plot pour voir les arguments possibles à utiliser.
  4. Maintenant, utilise OpenCV pour convertir les données np.ndarray en bytes. Utilise ensuite io.BytesIO pour créer un objet de type fichier (« file-like »).

    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'indice 1 qui est renvoyé est nécessaire.
  5. Crée une instance SixelWriter, puis utilise la méthode .draw() pour dessiner 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)

Exemple 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.

Exemple 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'indice 1 qui est renvoyé est nécessaire.
  3. Consulte les paramètres de la méthode plot pour voir les arguments possibles à utiliser.

Effacer l'image

Tu pourrais avoir besoin d'utiliser clear pour « effacer » l'affichage de l'image dans le terminal.

FAQ#

  • 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, visite la page du mode predict.

  • Le protocole sixel n'est actuellement pris en charge que sur Linux et macOS car ces plateformes possèdent des fonctionnalités de terminal natives compatibles avec les graphiques sixel. La prise en charge de Windows pour les graphiques de terminal utilisant sixel est toujours en cours de développement. Pour les mises à jour concernant la compatibilité avec Windows, consulte l'état des tickets VSCode et la documentation.

  • Si rien ne s'affiche, effectue ces vérifications dans l'ordre :

    1. Confirme que terminal.integrated.enableImages et terminal.integrated.gpuAcceleration sont tous deux activés, comme indiqué dans la section Process, 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 dans lequel s'exécute ton script (pip install sixel).
    3. Assure-toi que plot est un np.ndarray valide avant de l'encoder, car cv2.imencode lève une erreur si l'image est vide ou ne constitue 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 de la prise en charge des images dans le terminal.

  • L'affichage des résultats d'inférence vidéo ou de cadres GIF animés à l'aide de sixel dans le terminal n'est actuellement pas testé et peut ne pas être pris en charge. Nous te recommandons de commencer par des images statiques et de vérifier la compatibilité. Tente d'afficher des résultats vidéo à tes propres risques, en gardant à l'esprit les contraintes de performance. Pour plus d'informations sur le tracé des résultats d'inférence, visite la page du mode predict.

  • Le paquet sixel est un fork de la bibliothèque non maintenue PySixel et constitue un mince wrapper Python au-dessus de Pillow (PIL). Si import sixel échoue ou si SixelWriter().draw() lève une erreur, confirme que le paquet a bien été installé dans ton environnement virtuel actif, assure-toi que Pillow est disponible et consulte le dépôt GitHub python-sixel pour les notes spécifiques à chaque plateforme. Pour en savoir plus sur la génération de l'image que tu passes à draw(), consulte la documentation du mode predict.

Commentaires