Inferenz-Ergebnisse im Terminal anzeigen
Bild von der libsixel Website.
Motivation
Wenn du mit einer Remote-Maschine verbunden bist, ist die Visualisierung von Bild-Ergebnissen normalerweise nicht möglich oder erfordert das Verschieben von Daten auf ein lokales Gerät mit GUI. Das integrierte Terminal von VSCode ermöglicht das direkte Rendern von Bildern. Dies ist eine kurze Demonstration, wie du dies in Verbindung mit ultralytics und Vorhersage-Ergebnissen verwendest.
Nur kompatibel mit Linux und MacOS. Überprüfe das VSCode-Repository, den Issue-Status oder die Dokumentation für Updates zur Windows-Unterstützung, um Bilder im Terminal mit sixel anzuzeigen.
Die VSCode-kompatiblen Protokolle für die Anzeige von Bildern im integrierten Terminal sind sixel und iTerm. Diese Anleitung demonstriert die Verwendung des sixel-Protokolls.
Prozess
-
Zuerst musst du in VSCode die Einstellungen
terminal.integrated.enableImagesundterminal.integrated.gpuAccelerationaktivieren."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 gewartet wird.pip install sixel -
Lade ein Modell, führe die Inferenz aus, plotte die Ergebnisse und speichere sie in einer Variablen. Mehr Informationen zu Inferenz-Argumenten und zur Arbeit mit Ergebnissen findest du auf der Seite zum Vorhersage-Modus.
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, um die möglichen Argumente zu sehen.
-
Verwende nun OpenCV, um das
np.ndarrayinbytes-Daten umzuwandeln. 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.
- Es wird nur das Objekt am Index
1benötigt, das zurückgegeben wird.
-
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)
Beispiel für Inferenz-Ergebnisse
Die Verwendung dieses Beispiels mit Videos oder animierten GIF-Frames wurde nicht getestet. Versuche es auf eigenes Risiko.
Vollständiges Code-Beispiel
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.
- Es wird nur das Objekt am Index
1benötigt, das zurückgegeben wird. - Siehe Parameter der Plot-Methode, um die möglichen Argumente zu sehen.
Du musst eventuell clear verwenden, um die Bildansicht im Terminal zu "löschen".
FAQ
Wie kann ich YOLO-Inferenz-Ergebnisse in einem VSCode-Terminal unter macOS oder Linux anzeigen?
Um YOLO-Inferenz-Ergebnisse in einem VSCode-Terminal unter macOS oder Linux anzuzeigen, folge diesen Schritten:
-
Aktiviere die notwendigen 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="path_to_image") plot = results[0].plot() -
Konvertiere das Inferenz-Ergebnisbild 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 zum Vorhersage-Modus.
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 native Terminal-Funktionen haben, die mit sixel-Grafiken kompatibel sind. Die Windows-Unterstützung für Terminal-Grafiken mittels sixel befindet sich noch in der Entwicklung. Für Updates zur Windows-Kompatibilität, prüfe den VSCode Issue-Status und die Dokumentation.
Was ist, wenn ich Probleme bei 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:
"terminal.integrated.enableImages": true "terminal.integrated.gpuAcceleration": "auto" -
Überprüfe die Installation der sixel-Bibliothek:
pip install sixel -
Prüfe deinen Code zur Bilddatenkonvertierung und zum Plotten auf Fehler. Zum Beispiel:
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)
Falls die Probleme weiterhin bestehen, konsultiere das VSCode-Repository und besuche den Abschnitt Parameter der Plot-Methode für weitere Anleitungen.
Kann YOLO Video-Inferenz-Ergebnisse im Terminal mittels sixel anzeigen?
Die Anzeige von Video-Inferenz-Ergebnissen oder animierten GIF-Frames mittels sixel im Terminal ist derzeit ungetestet und wird möglicherweise nicht unterstützt. Wir empfehlen, mit statischen Bildern zu beginnen und die Kompatibilität zu prüfen. Versuche Video-Ergebnisse auf eigenes Risiko und bedenke dabei die Leistungsbeschränkungen. Für weitere Informationen zum Plotten von Inferenz-Ergebnissen besuche die Seite zum Vorhersage-Modus.
Wie kann ich Probleme mit der python-sixel-Bibliothek beheben?
Um Probleme mit der python-sixel-Bibliothek zu beheben:
-
Stelle sicher, dass die Bibliothek korrekt in deiner virtuellen Umgebung installiert ist:
pip install sixel -
Überprüfe, ob du die notwendigen Python- und System-Abhängigkeiten hast.
-
Weitere Dokumentation und Community-Support findest du im python-sixel GitHub-Repository.
-
Überprüfe deinen Code auf potenzielle Fehler, insbesondere die Verwendung von
SixelWriterund die Schritte zur Konvertierung der Bilddaten.
Für weitere Unterstützung bei der Arbeit mit YOLO-Modellen und der sixel-Integration, siehe die Dokumentationsseiten zu Export und Vorhersage-Modus.