Visualizzazione dei risultati dell'inferenza in un terminale
Immagine dal sito web di libsixel.
Motivazione
Quando ci si connette a una macchina remota, normalmente la visualizzazione dei risultati delle immagini non è possibile o richiede lo spostamento dei dati su un dispositivo locale con un'interfaccia grafica. Il terminale integrato VSCode consente di visualizzare direttamente le immagini. Questa è una breve dimostrazione di come utilizzarlo insieme a ultralytics
con risultati di previsione.
Avvertenze
Compatibile solo con Linux e MacOS. Controllare il Repository VSCode, controllare Stato del problema, o 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 sixel
protocollo.
Processo
-
Innanzitutto, è necessario abilitare le impostazioni
terminal.integrated.enableImages
eterminal.integrated.gpuAcceleration
in VSCode."terminal.integrated.gpuAcceleration": "auto" # "auto" is default, can also use "on" "terminal.integrated.enableImages": false
-
Installare il
python-sixel
nell'ambiente virtuale. Si tratta di un forcella delPySixel
che non viene più mantenuta. -
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 sull'utilizzo dei risultati, consultare la pagina della modalità predittiva.
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)!
- Vedere i parametri del metodo plot per vedere i possibili argomenti da utilizzare.
-
Ora, utilizzare OpenCV per convertire il
numpy.ndarray
abytes
dati. Quindi utilizzareio.BytesIO
per creare un oggetto "simile a un file".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)
- È possibile utilizzare anche altre estensioni di immagine.
- Solo l'oggetto all'indice
1
che viene restituito è necessario.
-
Creare un
SixelWriter
e quindi utilizzare l'istanza.draw()
per disegnare l'immagine nel terminale.
Esempio di risultati dell'inferenza
Pericolo
L'uso di questo esempio con video o fotogrammi GIF animati non è stato testato. Tentativo a proprio rischio e pericolo.
Esempio di codice completo
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)
- È possibile utilizzare anche altre estensioni di immagine.
- Solo l'oggetto all'indice
1
che viene restituito è necessario. - Vedere 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.
FAQ
Come si possono visualizzare i risultati dell'inferenza di YOLO in un terminale VSCode su macOS o Linux?
Per visualizzare i risultati dell'inferenza di YOLO in un terminale VSCode su macOS o Linux, procedere come segue:
-
Attivare le impostazioni VSCode necessarie:
-
Installare la libreria sixel:
-
Caricare il modello YOLO ed eseguire l'inferenza:
-
Converte l'immagine dei risultati dell'inferenza in byte e la visualizza nel terminale:
Per ulteriori dettagli, visitate la pagina delle modalità di previsione.
Perché il protocollo sixel funziona solo su Linux e macOS?
Il protocollo sixel è attualmente supportato solo su Linux e macOS, poiché queste piattaforme dispongono di funzionalità terminali native compatibili con la grafica sixel. Il supporto di Windows per la grafica dei terminali con sixel è ancora in fase di sviluppo. Per aggiornamenti sulla compatibilità con Windows, controllare lo stato del problema VSCode e la documentazione.
Cosa succede se si verificano problemi con la visualizzazione delle immagini nel terminale VSCode?
Se si riscontrano problemi nella visualizzazione delle immagini nel terminale VSCode utilizzando sixel:
-
Assicurarsi che le impostazioni necessarie in VSCode siano abilitate:
-
Verificare l'installazione della libreria sixel:
-
Controllare che non vi siano errori nella conversione dei dati delle immagini e nel codice di plottaggio. Ad esempio:
Se i problemi persistono, consultare il repository VSCode e visitare la sezione dei parametri del metodo di plottaggio per ulteriori indicazioni.
YOLO può visualizzare i risultati dell'inferenza video nel terminale utilizzando sixel?
La visualizzazione dei risultati dell'inferenza video o dei fotogrammi GIF animati tramite sixel nel terminale non è attualmente testata e potrebbe non essere supportata. Si consiglia di iniziare con immagini statiche e di verificare la compatibilità. Tentare di visualizzare i risultati video a proprio rischio e pericolo, tenendo conto dei limiti di prestazione. Per ulteriori informazioni sulla rappresentazione dei risultati dell'inferenza, visitare la pagina della modalità di previsione.
Come si possono risolvere i problemi con il programma python-sixel
biblioteca?
Per risolvere i problemi con il sistema python-sixel
biblioteca:
-
Assicurarsi che la libreria sia installata correttamente nell'ambiente virtuale:
-
Verificare che siano presenti le dipendenze necessarie di Python e del sistema.
-
Fare riferimento al repository GitHubpython -sixel per ulteriore documentazione e supporto della comunità.
-
Ricontrollate il codice per individuare eventuali errori, in particolare l'uso di
SixelWriter
e le fasi di conversione dei dati di immagine.
Per ulteriore assistenza sull'utilizzo dei modelli YOLO e sull'integrazione di sixel, consultare le pagine di documentazione sulla modalità di esportazione e di previsione.