Anzeigen von Inferenz-Ergebnissen in einem Terminal
Bild von der libsixel Webseite.
Motivation
Beim Verbinden mit einem Remote-Rechner ist die Visualisierung von Bildresultaten normalerweise nicht möglich oder erfordert das Verschieben von Daten auf ein lokales Gerät mit einer GUI. Das integrierte VSCode-Terminal ermöglicht das direkte Rendern von Bildern. Dies ist eine kurze Demonstration, wie man dies in Verbindung mit ultralytics
mit Vorhersageergebnisse.
Warnung
Nur kompatibel mit Linux und MacOS. Überprüfen Sie die VSCode-Repository, überprüfen Sie Problemstatus, oder Dokumentation für Updates zur Windows-Unterstützung, um Bilder im Terminal anzuzeigen mit sixel
.
Die VSCode-kompatiblen Protokolle zur Anzeige von Bildern über das integrierte Terminal sind sixel
und iTerm
. Dieser Leitfaden demonstriert die Verwendung von sixel
Protokoll.
Prozess
-
Zuerst müssen Sie 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": true
-
Installieren Sie das
python-sixel
-Bibliothek in Ihrer virtuellen Umgebung. Dies ist eine Fork von demPySixel
-Bibliothek, die nicht mehr gewartet wird.pip install sixel
-
Laden Sie ein Modell und führen Sie eine Inferenz aus. Stellen Sie dann die Ergebnisse grafisch dar und speichern Sie sie in einer Variablen. Weitere Informationen zu Inferenzargumenten und zur Arbeit mit Ergebnissen finden Sie auf der Seite Vorhersagemodus.
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)!
- Unter Parameter der Plot-Methode finden Sie mögliche Argumente für die Verwendung.
-
Verwenden Sie nun OpenCV um das
np.ndarray
zubytes
Daten. Verwenden Sie 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 Objekt am Index
1
das zurückgegeben wird, benötigt wird.
-
Erstellen Sie eine
SixelWriter
Instanz und verwenden Sie 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)
Beispielhafte Inferenz-Ergebnisse
Gefahr
Die Verwendung dieses Beispiels mit Videos oder animierten GIF-Frames wurde nicht getestet. Versuch auf eigene Gefahr.
Vollständiges Codebeispiel
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)
- Es ist auch möglich, andere Bildformate zu verwenden.
- Nur das Objekt am Index
1
das zurückgegeben wird, benötigt wird. - Unter Parameter der Plot-Methode finden Sie mögliche Argumente für die Verwendung.
Tipp
Sie müssen möglicherweise clear
um die Ansicht des Bildes 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, führen Sie die folgenden Schritte aus:
-
Aktivieren Sie die notwendigen VSCode-Einstellungen:
"terminal.integrated.enableImages": true "terminal.integrated.gpuAcceleration": "auto"
-
Installieren Sie die sixel-Bibliothek:
pip install sixel
-
Laden Sie Ihr YOLO-Modell und führen Sie eine Inferenz aus:
from ultralytics import YOLO model = YOLO("yolo11n.pt") results = model.predict(source="path_to_image") plot = results[0].plot()
-
Konvertieren Sie das Inferenz-Ergebnisbild in Bytes und zeigen Sie 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 Informationen finden Sie auf der Seite 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 Terminalgrafiken mit Sixel ist noch in der Entwicklung. Für Updates zur Windows-Kompatibilität überprüfen Sie den VSCode Issue-Status und die Dokumentation.
Was ist, wenn ich Probleme mit der Anzeige von Bildern im VSCode-Terminal habe?
Wenn Probleme bei der Anzeige von Bildern im VSCode-Terminal mit Sixel auftreten:
-
Stellen Sie sicher, dass die notwendigen Einstellungen in VSCode aktiviert sind:
"terminal.integrated.enableImages": true "terminal.integrated.gpuAcceleration": "auto"
-
Überprüfen Sie die Installation der Sixel-Bibliothek:
pip install sixel
-
Überprüfen Sie Ihren Code zur Konvertierung und Darstellung von Bilddaten 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)
Wenn 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 mit Sixel anzeigen?
Die Anzeige von Video-Inferenz-Ergebnissen oder animierten GIF-Frames mit 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 überprüfen. Versuchen Sie Videoergebnisse auf eigenes Risiko, wobei Sie die Leistungseinschränkungen beachten sollten. Weitere Informationen zum Plotten von Inferenz-Ergebnissen finden Sie auf der Seite Vorhersagemodus.
Wie kann ich Probleme mit dem python-sixel
-Bibliothek?
Zur Fehlerbehebung bei Problemen mit der python-sixel
-Bibliothek:
-
Stellen Sie sicher, dass die Bibliothek korrekt in Ihrer virtuellen Umgebung installiert ist:
pip install sixel
-
Stellen Sie sicher, dass Sie über die notwendigen Python- und Systemabhängigkeiten verfügen.
-
Weitere Dokumentationen und Community-Support finden Sie im python-sixel GitHub Repository.
-
Überprüfen Sie Ihren Code nochmals auf mögliche Fehler, insbesondere die Verwendung von
SixelWriter
und Bilddatenkonvertierungsschritte.
Weitere Unterstützung bei der Arbeit mit YOLO-Modellen und der Sixel-Integration finden Sie auf den Dokumentationsseiten zum Export und Vorhersagemodus.