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 den 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.
-
Installieren Sie die
python-sixel
Bibliothek in deiner virtuellen Umgebung. Dies ist eine Gabel derPySixel
Bibliothek, die nicht mehr gepflegt wird. -
Importiere die relevanten Bibliotheken
-
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.# 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)
- 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 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)
- 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".