Anzeigen von Schlussfolgerungsergebnissen in einem Terminal
Bild von der libsixel Website.
Motivation
Wenn du eine Verbindung zu einem entfernten Rechner herstellst, ist es normalerweise nicht möglich, die Bildergebnisse zu visualisieren, oder die Daten müssen auf ein lokales Gerät mit einer grafischen Benutzeroberfläche übertragen werden. Das in VSCode integrierte Terminal ermöglicht die direkte Darstellung von Bildern. Dies ist eine kurze Demonstration, wie du es in Verbindung mit ultralytics
mit Vorhersageergebnisse.
Warnung
Nur kompatibel mit Linux und MacOS. Prüfe die VSCode Repository, prüfen Status der Ausgabe, oder Dokumentation für Updates zur Windows-Unterstützung für die Anzeige von Bildern im Terminal mit sixel
.
Die VSCode-kompatiblen Protokolle zum Betrachten von Bildern mit dem integrierten Terminal sind sixel
und iTerm
. In diesem Leitfaden wird die Verwendung der sixel
Protokoll.
Prozess
-
Zuerst musst du die Einstellungen aktivieren
terminal.integrated.enableImages
undterminal.integrated.gpuAcceleration
in VSCode."terminal.integrated.gpuAcceleration": "auto" # "auto" is default, can also use "on" "terminal.integrated.enableImages": false
-
Installieren Sie die
python-sixel
Bibliothek in deiner virtuellen Umgebung. Dies ist eine Gabel derPySixel
Bibliothek, die nicht mehr gepflegt wird. -
Lade ein Modell und führe die Inferenz durch, zeichne die Ergebnisse auf und speichere sie in einer Variablen. Auf der Seite zum Vorhersagemodus erfährst du mehr über die Argumente der Inferenz und die Arbeit mit den Ergebnissen.
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)!
- Siehe Parameter der Plot-Methode, um zu sehen, welche Argumente du verwenden kannst.
-
Verwende nun OpenCV, um die
numpy.ndarray
zubytes
Daten. Dann verwendeio.BytesIO
um ein "dateiähnliches" Objekt zu erstellen.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)
- Es ist auch möglich, andere Bilderweiterungen zu verwenden.
- Nur das Objekt mit dem Index
1
die zurückgegeben wird, benötigt wird.
-
Erstellen einer
SixelWriter
Instanz, und verwenden Sie dann die.draw()
Methode, um das Bild im Terminal zu zeichnen.
Beispiel Inferenzergebnisse
Gefahr
Die Verwendung dieses Beispiels mit Videos oder animierten GIF-Frames wurde nicht getestet. Der Versuch erfolgt auf eigene Gefahr.
Vollständiges Code-Beispiel
import io
import cv2
from sixel import SixelWriter
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() # (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)
- Es ist auch möglich, andere Bilderweiterungen zu verwenden.
- Nur das Objekt mit dem Index
1
die zurückgegeben wird, benötigt wird. - Siehe Parameter der Plot-Methode, um zu sehen, welche Argumente du verwenden kannst.
Tipp
Möglicherweise musst du clear
um die Ansicht des Bildes im Terminal zu "löschen".
FAQ
Wie kann ich die Ergebnisse von YOLO in einem VSCode-Terminal unter macOS oder Linux anzeigen?
Um die Ergebnisse von YOLO in einem VSCode-Terminal unter macOS oder Linux anzuzeigen, befolge diese Schritte:
-
Aktiviere die erforderlichen VSCode-Einstellungen:
-
Installiere die Sixel-Bibliothek:
-
Lade dein YOLO Modell und führe die Inferenz durch:
-
Wandle das Ergebnisbild der Inferenz in Bytes um und zeige es im Terminal an:
Weitere Informationen findest du auf der Seite zum Vorhersagemodus.
Warum funktioniert das Sixel-Protokoll nur unter Linux und macOS?
Das Sixel-Protokoll wird derzeit nur unter Linux und macOS unterstützt, da diese Plattformen über native Terminalfunktionen verfügen, die mit Sixel-Grafiken kompatibel sind. Die Windows-Unterstützung für Terminal-Grafiken mit sixel ist noch in der Entwicklung. Aktuelle Informationen zur Windows-Kompatibilität findest du im VSCode Issue Status und in der Dokumentation.
Was ist, wenn ich Probleme mit der Anzeige von Bildern im VSCode-Terminal habe?
Wenn du Probleme bei der Anzeige von Bildern im VSCode-Terminal mit sixel hast:
-
Stelle sicher, dass die notwendigen Einstellungen in VSCode aktiviert sind:
-
Überprüfe die Installation der Sixel-Bibliothek:
-
Überprüfe deinen Bilddatenkonvertierungs- und Plot-Code auf Fehler. Zum Beispiel:
Wenn die Probleme weiterhin bestehen, sieh im VSCode-Repository nach und besuche den Abschnitt über die Parameter der Plot-Methode, um weitere Hinweise zu erhalten.
Kann YOLO die Ergebnisse der Videoinferenz mit sixel auf dem Terminal anzeigen?
Die Anzeige von Video-Inferenzergebnissen oder animierten GIF-Frames mit sixel im Terminal ist derzeit nicht getestet und wird möglicherweise nicht unterstützt. Wir empfehlen, mit statischen Bildern zu beginnen und die Kompatibilität zu überprüfen. Das Ausprobieren von Videoergebnissen erfolgt auf eigene Gefahr und unter Berücksichtigung von Leistungseinschränkungen. Weitere Informationen zum Plotten von Schlussfolgerungsergebnissen findest du auf der Seite zum Vorhersagemodus.
Wie behebe ich Probleme mit der python-sixel
Bibliothek?
Zur Fehlerbehebung von Problemen mit der python-sixel
Bibliothek:
-
Stelle sicher, dass die Bibliothek in deiner virtuellen Umgebung korrekt installiert ist:
-
Überprüfe, ob du die notwendigen Python und Systemabhängigkeiten hast.
-
Im python-sixel GitHub Repository findest du zusätzliche Dokumentation und Unterstützung durch die Community.
-
Überprüfe deinen Code auf mögliche Fehler, insbesondere die Verwendung von
SixelWriter
und Bilddatenkonvertierungsschritte.
Weitere Hilfestellungen zur Arbeit mit YOLO Modellen und der Sixel-Integration findest du auf den Dokumentationsseiten zum Export- und Vorhersagemodus.