Afficher les résultats de l'inférence dans un terminal
Image tirée du site web de libsixel.
Motivation
Lors de la connexion à une machine distante, normalement la visualisation des résultats des images 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é VSCode permet de rendre directement les images. Voici une courte démonstration de l'utilisation de ce terminal en conjonction avec ultralytics
avec résultats des prédictions.
Avertissement
Compatible uniquement avec Linux et MacOS. Vérifier le VSCode dépôt, vérifie Statut de la questionou documentation pour des mises à jour sur la prise en charge par Windows de l'affichage des images dans le terminal avec sixel
.
Les protocoles compatibles avec le VSCode pour la visualisation des 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
-
Tout d'abord, tu dois activer les paramètres
terminal.integrated.enableImages
etterminal.integrated.gpuAcceleration
dans le VSCode.
-
Installe le
python-sixel
dans ton environnement virtuel. Il s'agit d'une fourchette de laPySixel
qui n'est plus maintenue. -
Importe les bibliothèques concernées
-
Charge un modèle et exécute l'inférence, puis trace les résultats et les stocke dans une variable. Pour en savoir plus sur les arguments d'inférence et l'utilisation des résultats, consulte la page du mode prédire.
from ultralytics import YOLO # Load a model model = YOLO("yolov8n.pt") # Run inference on an image results = model.predict(source="ultralytics/assets/bus.jpg") # Plot inference results plot = results[0].plot() #(1)!
- Voir les paramètres de la méthode de traçage pour connaître les arguments possibles à utiliser.
-
Maintenant, utilise OpenCV pour convertir le
numpy.ndarray
Ăbytes
données. Utilise ensuiteio.BytesIO
pour créer un objet qui ressemble à un fichier.# Results image as bytes im_bytes = cv.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'images.
- Seul l'objet Ă l'index
1
qui est renvoyée est nécessaire.
-
Crée un
SixelWriter
et utilise ensuite l'instance.draw()
pour dessiner l'image dans le terminal.
Exemple de résultats d'inférence
Danger
L'utilisation de cet exemple avec des vidéos ou des images GIF animées n' a pas été testée. Essaie à tes risques et périls.
Exemple de code complet
import io
import cv2 as cv
from ultralytics import YOLO
from sixel import SixelWriter
# Load a model
model = YOLO("yolov8n.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 = cv.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'images.
- Seul l'objet Ă l'index
1
qui est renvoyée est nécessaire. - Voir les paramètres de la méthode de traçage pour connaître les arguments possibles à utiliser.
Astuce
Il se peut que tu aies besoin d'utiliser clear
pour "effacer" la vue de l'image dans le terminal.