Link to this sectionCome visualizzare i risultati dell'inferenza YOLO nel terminale di VSCode#
Immagine tratta dal sito web di libsixel.
Link to this sectionMotivazione#
Quando ti connetti a una macchina remota tramite SSH, la visualizzazione dei risultati delle immagini non è normalmente possibile o richiede il trasferimento dei dati su un dispositivo locale con interfaccia grafica. Il terminale integrato di VSCode può eseguire il rendering delle immagini direttamente, così puoi esaminare i risultati della predizione esattamente dove esegui l'inferenza, senza dover copiare i file sul tuo portatile. Questa guida ti accompagna nell'abilitazione della configurazione, nella preparazione del codice e risponde alle domande frequenti.
Compatibile solo con Linux e macOS. Controlla il repository di VSCode, verifica lo stato dei problemi o la documentazione per aggiornamenti sul supporto Windows per visualizzare immagini nel terminale con sixel.
I protocolli compatibili con VSCode per visualizzare immagini usando il terminale integrato sono sixel e iTerm. Questa guida dimostrerà l'uso del protocollo sixel.
Link to this sectionProcesso#
-
Per prima cosa, devi abilitare le impostazioni
terminal.integrated.enableImageseterminal.integrated.gpuAccelerationin VSCode."terminal.integrated.gpuAcceleration": "auto" # "auto" is default, can also use "on" "terminal.integrated.enableImages": true
-
Installa la libreria
python-sixelnel tuo ambiente virtuale. Questo è un fork della libreriaPySixel, che non è più mantenuta.pip install sixel -
Carica un modello ed esegui l'inferenza, quindi traccia i risultati e memorizzali in una variabile. Scopri di più sugli argomenti di inferenza e su come lavorare con i risultati nella pagina della modalità predict.
from ultralytics import YOLO # Load a model model = YOLO("yolo26n.pt") # Run inference on an image results = model.predict(source="ultralytics/assets/bus.jpg") # Plot inference results plot = results[0].plot() # (1)!- Consulta i parametri del metodo plot per vedere i possibili argomenti da utilizzare.
-
Ora, usa OpenCV per convertire l'
np.ndarrayin datibytes. Quindi usaio.BytesIOper 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.
- È necessario solo l'oggetto all'indice
1restituito.
-
Crea un'istanza
SixelWriter, quindi usa il metodo.draw()per disegnare l'immagine nel terminale.from sixel import SixelWriter # Create sixel writer object w = SixelWriter() # Draw the sixel image in the terminal w.draw(mem_file)
Link to this sectionEsempio di risultati dell'inferenza#
L'uso di questo esempio con video o fotogrammi GIF animati non è stato testato. Procedi a tuo rischio.
Link to this sectionEsempio di codice completo#
import io
import cv2
from sixel import SixelWriter
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.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.
- È necessario solo l'oggetto all'indice
1restituito. - Consulta i parametri del metodo plot per vedere i possibili argomenti da utilizzare.
Potrebbe essere necessario usare clear per "cancellare" la vista dell'immagine nel terminale.
Link to this sectionFAQ#
Link to this sectionCome posso visualizzare i risultati dell'inferenza YOLO in un terminale VSCode su macOS o Linux?#
Per visualizzare i risultati dell'inferenza YOLO in un terminale VSCode su macOS o Linux, segui questi passaggi:
-
Abilita le impostazioni di VSCode necessarie:
"terminal.integrated.enableImages": true "terminal.integrated.gpuAcceleration": "auto" -
Installa la libreria sixel:
pip install sixel -
Carica il tuo modello YOLO ed esegui l'inferenza:
from ultralytics import YOLO model = YOLO("yolo26n.pt") results = model.predict(source="ultralytics/assets/bus.jpg") plot = results[0].plot() -
Converti l'immagine del risultato dell'inferenza in byte e visualizzala nel terminale:
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)
Per ulteriori dettagli, visita la pagina della modalità predict.
Link to this sectionPerché il protocollo sixel funziona solo su Linux e macOS?#
Il protocollo sixel è attualmente supportato solo su Linux e macOS perché queste piattaforme dispongono di funzionalità terminali native compatibili con la grafica sixel. Il supporto Windows per la grafica del terminale tramite sixel è ancora in fase di sviluppo. Per aggiornamenti sulla compatibilità con Windows, controlla lo stato dei problemi di VSCode e la documentazione.
Link to this sectionCosa succede se riscontro problemi nella visualizzazione delle immagini nel terminale di VSCode?#
Se non viene visualizzato nulla, esegui questi controlli in ordine:
- Conferma che sia
terminal.integrated.enableImagescheterminal.integrated.gpuAccelerationsiano abilitati, come mostrato nella sezione Processo, quindi riavvia il terminale integrato affinché le impostazioni abbiano effetto. - Verifica che
sixelsia installato nello stesso ambiente virtuale in cui viene eseguito il tuo script (pip install sixel). - Assicurati che
plotsia unnp.ndarrayvalido prima di codificarlo, poichécv2.imencodegenera un errore se l'immagine è vuota o non è un array valido. Vedi i parametri del metodo plot per i valori accettati daresults[0].plot().
Se i problemi persistono, consulta il repository di VSCode per lo stato del supporto delle immagini nel terminale.
Link to this sectionYOLO può visualizzare i risultati dell'inferenza video nel terminale usando sixel?#
La visualizzazione dei risultati dell'inferenza video o di fotogrammi GIF animati tramite sixel nel terminale non è attualmente testata e potrebbe non essere supportata. Ti consigliamo di iniziare con immagini statiche e verificare la compatibilità. Tenta i risultati video a tuo rischio, tenendo presenti i limiti di prestazioni. Per ulteriori informazioni sul tracciamento dei risultati dell'inferenza, visita la pagina della modalità predict.
Link to this sectionCome posso risolvere i problemi con la libreria python-sixel?#
Il pacchetto sixel è un fork della libreria non mantenuta PySixel ed è un sottile wrapper Python sopra Pillow (PIL). Se import sixel fallisce o SixelWriter().draw() genera un errore, conferma che il pacchetto sia installato nel tuo ambiente virtuale attivo, assicurati che Pillow sia disponibile e controlla il repository GitHub di python-sixel per note specifiche della piattaforma. Per saperne di più sulla generazione dell'immagine da passare a draw(), consulta la documentazione della modalità predict.