Inferentieresultaten bekijken in een terminal
Afbeelding van de libsixel website.
Motivatie
Wanneer je verbinding maakt met een machine op afstand, is het visualiseren van beeldresultaten normaal gesproken niet mogelijk of moet je gegevens verplaatsen naar een lokaal apparaat met een GUI. Met de geïntegreerde terminal van VSCode kunnen afbeeldingen direct worden weergegeven. Dit is een korte demonstratie van hoe je dit kunt gebruiken in combinatie met ultralytics
met voorspellingsresultaten.
Waarschuwing
Alleen compatibel met Linux en MacOS. Controleer de VSCode archiefcontroleer Statusof documentatie voor updates over Windows-ondersteuning om afbeeldingen te bekijken in terminal met sixel
.
De VSCode-compatibele protocollen voor het bekijken van afbeeldingen met de geïntegreerde terminal zijn sixel
en iTerm
. Deze handleiding demonstreert het gebruik van de sixel
protocol.
Proces
-
Eerst moet je de instellingen inschakelen
terminal.integrated.enableImages
enterminal.integrated.gpuAcceleration
in VSCode.
-
Installeer de
python-sixel
bibliotheek in je virtuele omgeving. Dit is een vork van dePySixel
bibliotheek, die niet langer wordt onderhouden. -
Importeer de relevante bibliotheken
-
Een model laden en inferentie uitvoeren, dan de resultaten plotten en opslaan in een variabele. Lees meer over inferentieargumenten en het werken met resultaten op de voorspellingsmodus pagina.
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)!
- Zie de parameters van de plotmethode om te zien welke argumenten je kunt gebruiken.
-
Gebruik nu OpenCV om de
numpy.ndarray
naarbytes
gegevens. Gebruik danio.BytesIO
om een "bestandsachtig" object te maken.# 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)
- Het is ook mogelijk om andere afbeeldingsextensies te gebruiken.
- Alleen het object op index
1
die wordt geretourneerd nodig is.
-
Maak een
SixelWriter
instantie en gebruik dan de.draw()
methode om de afbeelding in de terminal te tekenen.
Voorbeeld inferentie resultaten
Gevaar
Het gebruik van dit voorbeeld met video's of geanimeerde GIF-frames is niet getest. Probeer het op eigen risico.
Volledig codevoorbeeld
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)
- Het is ook mogelijk om andere afbeeldingsextensies te gebruiken.
- Alleen het object op index
1
die wordt geretourneerd nodig is. - Zie de parameters van de plotmethode om te zien welke argumenten je kunt gebruiken.
Tip
Mogelijk moet je clear
om het beeld in de terminal te "wissen".