Visualizzare i risultati dell'inferenza in un terminale
Immagine tratta dal sito web di libsixel.
Motivazione
Quando ci si connette a un computer remoto, normalmente la visualizzazione dei risultati delle immagini non è possibile o richiede lo spostamento dei dati su un dispositivo locale dotato di interfaccia grafica. Il terminale integrato VSCode permette di visualizzare direttamente le immagini. Questa è una breve dimostrazione di come utilizzarlo insieme a ultralytics
con Risultati delle previsioni.
Avvertenze
Compatibile solo con Linux e MacOS. Controlla il codice VSCode deposito, controlla Stato del problema, oppure documentazione per aggiornamenti sul supporto di Windows per la visualizzazione di immagini nel terminale con sixel
.
I protocolli compatibili con il VSCode per la visualizzazione delle immagini tramite il terminale integrato sono sixel
e iTerm
. Questa guida illustra l'uso del programma sixel
protocollo.
Processo
-
Per prima cosa, devi attivare le impostazioni
terminal.integrated.enableImages
eterminal.integrated.gpuAcceleration
in VSCode.
-
Installa il programma
python-sixel
nel tuo ambiente virtuale. Si tratta di un forcella delPySixel
che non viene più mantenuta. -
Importa le librerie pertinenti
-
Carica un modello ed esegue l'inferenza, quindi traccia i risultati e li memorizza in una variabile. Per saperne di più sugli argomenti dell'inferenza e sulla gestione dei risultati, consulta la pagina della modalità di previsione.
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)!
- Vedi i parametri del metodo plot per vedere i possibili argomenti da utilizzare.
-
Ora, usa OpenCV per convertire i dati
numpy.ndarray
abytes
dati. Quindi utilizzaio.BytesIO
per creare un oggetto "simile a un file".# 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)
- È possibile utilizzare anche altre estensioni di immagini.
- Solo l'oggetto all'indice
1
che viene restituito è necessario.
-
Crea un
SixelWriter
e poi utilizzare l'istanza.draw()
per disegnare l'immagine nel terminale.
Esempio di risultati dell'inferenza
Pericolo
L'utilizzo di questo esempio con video o fotogrammi GIF animati non è stato testato. Provaci a tuo rischio e pericolo.
Esempio di codice completo
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)
- È possibile utilizzare anche altre estensioni di immagini.
- Solo l'oggetto all'indice
1
che viene restituito è necessario. - Vedi i parametri del metodo plot per vedere i possibili argomenti da utilizzare.
Suggerimento
Potrebbe essere necessario utilizzare clear
per "cancellare" la vista dell'immagine nel terminale.