Link to this sectionSo zeigst du YOLO-Inferenzergebnisse in einem VSCode-Terminal an#
Bild von der libsixel-Webseite.
Link to this sectionMotivation#
Wenn du dich per SSH mit einem Remote-Rechner verbindest, ist eine normale Visualisierung von Bildergebnissen nicht möglich oder erfordert das Verschieben von Daten auf ein lokales Gerät mit GUI. Das integrierte VSCode-Terminal kann Bilder direkt rendern, sodass du Vorhersageergebnisse genau dort untersuchen kannst, wo du die Inferenz ausführst, ohne Dateien zurück auf deinen Laptop kopieren zu müssen. Dieser Leitfaden führt dich durch die Einrichtung, die Verkabelung mit dem Code und beantwortet häufige Fragen.
Nur kompatibel mit Linux und macOS. Überprüfe das VSCode-Repository, den Issue-Status oder die Dokumentation auf Updates zur Windows-Unterstützung für die Anzeige von Bildern im Terminal mit sixel.
Die VSCode-kompatiblen Protokolle zur Bildanzeige über das integrierte Terminal sind sixel und iTerm. Dieser Leitfaden demonstriert die Verwendung des sixel-Protokolls.
Link to this sectionProzess#
-
Zuerst musst du die Einstellungen
terminal.integrated.enableImagesundterminal.integrated.gpuAccelerationin VSCode aktivieren."terminal.integrated.gpuAcceleration": "auto" # "auto" is default, can also use "on" "terminal.integrated.enableImages": true
-
Installiere die
python-sixel-Bibliothek in deiner virtuellen Umgebung. Dies ist ein Fork derPySixel-Bibliothek, die nicht mehr gepflegt wird.pip install sixel -
Lade ein Modell, führe die Inferenz aus, plotte dann die Ergebnisse und speichere sie in einer Variablen. Mehr über Inferenzargumente und das Arbeiten mit Ergebnissen findest du auf der Seite Vorhersagemodus.
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)!- Siehe Parameter der Plot-Methode für mögliche Argumente, die du verwenden kannst.
-
Verwende nun OpenCV, um das
np.ndarrayinbytes-Daten zu konvertieren. Nutze dannio.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 Bildformate zu verwenden.
- Nur das zurückgegebene Objekt an Index
1wird benötigt.
-
Erstelle eine
SixelWriter-Instanz und verwende dann die.draw()-Methode, um das Bild im Terminal zu zeichnen.from sixel import SixelWriter # Create sixel writer object w = SixelWriter() # Draw the sixel image in the terminal w.draw(mem_file)
Link to this sectionBeispiel für Inferenzergebnisse#
Die Verwendung dieses Beispiels mit Videos oder animierten GIF-Frames wurde nicht getestet. Die Verwendung erfolgt auf eigene Gefahr.
Link to this sectionVollständiges Codebeispiel#
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)- Es ist auch möglich, andere Bildformate zu verwenden.
- Nur das zurückgegebene Objekt an Index
1wird benötigt. - Siehe Parameter der Plot-Methode für mögliche Argumente, die du verwenden kannst.
Möglicherweise musst du clear verwenden, um die Bildansicht im Terminal zu "löschen".
Link to this sectionFAQ#
Link to this sectionWie kann ich YOLO-Inferenzergebnisse in einem VSCode-Terminal unter macOS oder Linux anzeigen?#
Um YOLO-Inferenzergebnisse in einem VSCode-Terminal unter macOS oder Linux anzuzeigen, befolge diese Schritte:
-
Aktiviere die erforderlichen VSCode-Einstellungen:
"terminal.integrated.enableImages": true "terminal.integrated.gpuAcceleration": "auto" -
Installiere die sixel-Bibliothek:
pip install sixel -
Lade dein YOLO-Modell und führe die Inferenz aus:
from ultralytics import YOLO model = YOLO("yolo26n.pt") results = model.predict(source="ultralytics/assets/bus.jpg") plot = results[0].plot() -
Konvertiere das Inferenzergebnisbild in Bytes und zeige es im Terminal an:
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)
Weitere Details findest du auf der Seite Vorhersagemodus.
Link to this sectionWarum funktioniert das sixel-Protokoll nur unter Linux und macOS?#
Das sixel-Protokoll wird derzeit nur unter Linux und macOS unterstützt, da diese Plattformen native Terminalfunktionen besitzen, die mit sixel-Grafiken kompatibel sind. Die Windows-Unterstützung für Terminalgrafiken mittels sixel befindet sich noch in der Entwicklung. Updates zur Windows-Kompatibilität findest du im VSCode Issue-Status und in der Dokumentation.
Link to this sectionWas kann ich tun, wenn Probleme bei der Bildanzeige im VSCode-Terminal auftreten?#
Wenn nichts gerendert wird, gehe diese Prüfungen der Reihe nach durch:
- Bestätige, dass sowohl
terminal.integrated.enableImagesals auchterminal.integrated.gpuAccelerationaktiviert sind, wie im Abschnitt Prozess gezeigt, und starte dann das integrierte Terminal neu, damit die Einstellungen wirksam werden. - Überprüfe, ob
sixelin derselben virtuellen Umgebung installiert ist, in der auch dein Skript läuft (pip install sixel). - Stelle sicher, dass
plotein gültigesnp.ndarrayist, bevor du es kodierst, dacv2.imencodeeinen Fehler auslöst, wenn das Bild leer ist oder kein gültiges Array darstellt. Siehe Parameter der Plot-Methode für die Werte, dieresults[0].plot()akzeptiert.
Wenn die Probleme weiterhin bestehen, konsultiere das VSCode-Repository bezüglich des Status der Terminal-Bildunterstützung.
Link to this sectionKann YOLO Video-Inferenzergebnisse im Terminal mittels sixel anzeigen?#
Die Anzeige von Video-Inferenzergebnissen oder animierten GIF-Frames mittels 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 verifizieren. Probiere Videoergebnisse auf eigene Gefahr aus und beachte die Leistungsbeschränkungen. Weitere Informationen zum Plotten von Inferenzergebnissen findest du auf der Seite Vorhersagemodus.
Link to this sectionWie kann ich Probleme mit der python-sixel-Bibliothek beheben?#
Das sixel-Paket ist ein Fork der nicht mehr gepflegten PySixel-Bibliothek und ein schlanker Python-Wrapper über Pillow (PIL). Wenn import sixel fehlschlägt oder SixelWriter().draw() einen Fehler auslöst, bestätige, dass das Paket in deiner aktiven virtuellen Umgebung installiert ist, stelle sicher, dass Pillow verfügbar ist, und prüfe das python-sixel GitHub-Repository auf plattformspezifische Hinweise. Mehr zur Erstellung des Bildes, das du an draw() übergibst, findest du in der Vorhersagemodus-Dokumentation.