Skip to content

Affichage des résultats de l'inférence dans un terminal

Exemple d'image dans le terminal

Image tirée du site web libsixel.

Motivation

Lors de la connexion à une machine distante, la visualisation des résultats de l'image n'est normalement pas possible ou nécessite le transfert des données vers un appareil local doté d'une interface graphique. Le terminal intégré VSCode permet de rendre directement les images. Il s'agit d'une courte démonstration de son utilisation en conjonction avec ultralytics avec résultats des prévisions.

Avertissement

Compatible uniquement avec Linux et MacOS. Vérifier la Référentiel VSCode, vérifier Statut de la questionou la documentation pour des mises à jour concernant la prise en charge par Windows de la visualisation d'images dans le terminal à l'aide de la fonction sixel.

Les protocoles compatibles avec le VSCode pour la visualisation d'images à l'aide du terminal intégré sont les suivants sixel et iTerm. Ce guide présente l'utilisation de l'outil sixel protocole.

Processus

  1. Tout d'abord, vous devez activer les paramètres terminal.integrated.enableImages et terminal.integrated.gpuAcceleration dans le code VSC.

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

    Activation du code VSCode pour le réglage des images du terminal

  2. Installer le python-sixel dans votre environnement virtuel. Il s'agit d'une fourchette de la PySixel qui n'est plus maintenue.

    pip install sixel
    
  3. Charger un modèle et exécuter l'inférence, puis tracer les résultats et les stocker dans une variable. Pour en savoir plus sur les arguments d'inférence et l'utilisation des résultats, consultez la page sur le mode prédictif.

    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)!
    
    1. Voir les paramètres de la méthode de traçage pour connaître les arguments possibles à utiliser.
  4. Maintenant, utilisez OpenCV pour convertir le numpy.ndarray à bytes données. Ensuite, utilisez io.BytesIO pour créer un objet de 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'images.
    2. Seul l'objet à l'index 1 qui est renvoyée est nécessaire.
  5. Créer un SixelWriter puis utiliser l'instance .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

Afficher l'image dans le terminal

Danger

L'utilisation de cet exemple avec des vidéos ou des images GIF animées n' a pas été testée. Tentez l'expérience à vos 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("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)
  1. Il est Ă©galement possible d'utiliser d'autres extensions d'images.
  2. Seul l'objet à l'index 1 qui est renvoyée est nécessaire.
  3. Voir les paramètres de la méthode de traçage pour connaître les arguments possibles à utiliser.

Conseil

Il se peut que vous deviez utiliser clear pour "effacer" la vue de l'image dans le terminal.

FAQ

Comment visualiser les résultats de l'inférence YOLO dans un terminal VSCode sous macOS ou Linux ?

Pour visualiser les résultats de l'inférence YOLO dans un terminal VSCode sous macOS ou Linux, procédez comme suit :

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

    "terminal.integrated.enableImages": true
    "terminal.integrated.gpuAcceleration": "auto"
    
  2. Installer la bibliothèque Sixel :

    pip install sixel
    
  3. Chargez votre modèle YOLO et lancez l'inférence :

    from ultralytics import YOLO
    
    model = YOLO("yolo11n.pt")
    results = model.predict(source="path_to_image")
    plot = results[0].plot()
    
  4. Convertit l'image du résultat de l'inférence en octets et l'affiche 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, visitez la page du mode de prédiction.

Pourquoi le protocole Sixel ne fonctionne-t-il que sous Linux et macOS ?

Le protocole sixel n'est actuellement pris en charge que par Linux et macOS, car ces plates-formes disposent de capacités de terminal natives compatibles avec les graphiques sixel. La prise en charge par Windows des graphiques de terminal utilisant sixel est encore en cours de développement. Pour des mises à jour sur la compatibilité avec Windows, consultez l'état de la question et la documentation du VSCode.

Que faire si je rencontre des problèmes d'affichage des images dans le terminal VSCode ?

Si vous rencontrez des problèmes pour afficher des images dans le terminal VSCode en utilisant sixel :

  1. Assurez-vous que les paramètres nécessaires dans VSCode sont activés :

    "terminal.integrated.enableImages": true
    "terminal.integrated.gpuAcceleration": "auto"
    
  2. Vérifier l'installation de la bibliothèque Sixel :

    pip install sixel
    
  3. Vérifiez que le code de conversion et de traçage des données de l'image ne comporte pas d'erreurs. Par exemple, le code de conversion des données de l'image et le code de traçage ne contiennent pas d'erreurs :

    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)
    

Si les problèmes persistent, consultez le référentiel VSCode, et visitez la section des paramètres de la méthode de traçage pour obtenir des conseils supplémentaires.

YOLO peut-il afficher les résultats de l'inférence vidéo sur le terminal à l'aide de sixel ?

L'affichage de résultats d'inférence vidéo ou d'images GIF animées à l'aide de sixel dans le terminal n'a pas encore été testé et pourrait ne pas être pris en charge. Nous recommandons de commencer par des images statiques et de vérifier la compatibilité. Tentez d'afficher des résultats vidéo à vos 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, visitez la page du mode prédictif.

Comment puis-je résoudre les problèmes liés à la python-sixel bibliothèque ?

Pour résoudre les problèmes liés à la python-sixel bibliothèque :

  1. Assurez-vous que la bibliothèque est correctement installée dans votre environnement virtuel :

    pip install sixel
    
  2. Vérifiez que vous disposez du site Python et des dépendances du système nécessaires.

  3. Consultez le dépôt GitHubpython -sixel pour obtenir de la documentation supplémentaire et l'aide de la communauté.

  4. Vérifiez deux fois que votre code ne contient pas d'erreurs potentielles, en particulier l'utilisation de SixelWriter et les étapes de conversion des données d'image.

Pour plus d'informations sur l'utilisation des modèles YOLO et l'intégration de Sixel, consultez les pages de documentation sur l'exportation et le mode prédictif.

📅C réé il y a 9 mois ✏️ Mis à jour il y a 2 mois

Commentaires