Ultralytics YOLO27:
Get Started

Come visualizzare i risultati dell'inferenza di YOLO in un terminale VSCode#

Immagine dal sito web libsixel.

Motivazione#

Quando ti connetti a una macchina remota tramite SSH, normalmente non è possibile visualizzare i risultati delle immagini oppure è necessario trasferire i dati su un dispositivo locale con interfaccia grafica. Il terminale integrato di VSCode può visualizzare direttamente le immagini, così puoi esaminare i risultati delle previsioni proprio dove esegui l'inferenza, senza copiare i file sul tuo laptop. Questa guida ti accompagna nell'attivazione della configurazione, nell'integrazione del codice e risponde alle domande frequenti.

Solo Linux e macOS

Compatibile solo con Linux e macOS. Consulta il repository di VSCode, controlla lo stato delle issue o la documentazione per gli aggiornamenti sul supporto di Windows alla visualizzazione delle immagini nel terminale con sixel.

I protocolli compatibili con VSCode per visualizzare immagini usando il terminale integrato sono sixel e iTerm. Questa guida mostrerà come usare il protocollo sixel.

Procedura#

  1. Per prima cosa, devi abilitare le impostazioni terminal.integrated.enableImages e terminal.integrated.gpuAcceleration in VSCode.

    "terminal.integrated.gpuAcceleration": "auto" # "auto" is default, can also use "on"
    "terminal.integrated.enableImages": true

    VSCode enable terminal images setting

  2. Installa la libreria python-sixel nel tuo ambiente virtuale. Si tratta di un fork della libreria PySixel, che non è più mantenuta.

    pip install sixel
  3. Carica un modello ed esegui l'inferenza, poi 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à di previsione.

    from ultralytics import YOLO
    
    # Carica un modello
    model = YOLO("yolo26n.pt")
    
    # Esegui l'inferenza su un'immagine
    results = model.predict(source="https://ultralytics.com/images/bus.jpg")
    
    # Traccia i risultati dell'inferenza
    plot = results[0].plot()  # (1)!
    1. Consulta i parametri del metodo plot per vedere gli argomenti disponibili.
  4. Ora usa OpenCV per convertire i dati np.ndarray in bytes. Poi usa io.BytesIO per creare un oggetto simile a un file.

    import io
    
    import cv2
    
    # Immagine dei risultati come byte
    im_bytes = cv2.imencode(
        ".png",  # (1)!
        plot,
    )[1].tobytes()  # (2)!
    
    # Byte dell'immagine come oggetto simile a un file
    mem_file = io.BytesIO(im_bytes)
    1. È possibile usare anche altre estensioni di immagine.
    2. Serve solo l'oggetto restituito all'indice 1.
  5. Crea un'istanza di SixelWriter, quindi usa il metodo .draw() per disegnare l'immagine nel terminale.

    from sixel import SixelWriter
    
    # Crea un oggetto writer sixel
    w = SixelWriter()
    
    # Disegna l'immagine sixel nel terminale
    w.draw(mem_file)

Esempi di risultati dell'inferenza#

YOLO inference results displayed in terminal

Video e GIF non testati

Questo esempio non è stato testato con video o fotogrammi GIF animati. Procedi a tuo rischio.

Esempio completo di codice#

import io

import cv2
from sixel import SixelWriter

from ultralytics import YOLO

# Carica un modello
model = YOLO("yolo26n.pt")

# Esegui l'inferenza su un'immagine
results = model.predict(source="https://ultralytics.com/images/bus.jpg")

# Traccia i risultati dell'inferenza
plot = results[0].plot()  # (3)!

# Immagine dei risultati come byte
im_bytes = cv2.imencode(
    ".png",  # (1)!
    plot,
)[1].tobytes()  # (2)!

mem_file = io.BytesIO(im_bytes)
w = SixelWriter()
w.draw(mem_file)
  1. È possibile usare anche altre estensioni di immagine.
  2. Serve solo l'oggetto restituito all'indice 1.
  3. Consulta i parametri del metodo plot per vedere gli argomenti disponibili.
Cancellare l'immagine

Potrebbe essere necessario usare clear per "cancellare" la visualizzazione dell'immagine nel terminale.

Domande frequenti#

  • Per visualizzare i risultati dell'inferenza di YOLO in un terminale VSCode su macOS o Linux, segui questi passaggi:

    1. Abilita le impostazioni necessarie di VSCode:

      "terminal.integrated.enableImages": true
      "terminal.integrated.gpuAcceleration": "auto"
    2. Installa la libreria sixel:

      pip install sixel
    3. Carica il tuo modello YOLO ed esegui l'inferenza:

      from ultralytics import YOLO
      
      model = YOLO("yolo26n.pt")
      results = model.predict(source="https://ultralytics.com/images/bus.jpg")
      plot = results[0].plot()
    4. Converti in byte l'immagine risultante dall'inferenza 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à di previsione.

  • Attualmente il protocollo sixel è supportato solo su Linux e macOS, perché queste piattaforme dispongono di funzionalità native del terminale compatibili con la grafica sixel. Il supporto di Windows per la grafica nel terminale tramite sixel è ancora in fase di sviluppo. Per gli aggiornamenti sulla compatibilità con Windows, consulta lo stato delle issue di VSCode e la documentazione.

  • Se non viene visualizzato nulla, esegui questi controlli nell'ordine indicato:

    1. Verifica che terminal.integrated.enableImages e terminal.integrated.gpuAcceleration siano entrambi abilitati, come mostrato nella sezione Procedura, quindi riavvia il terminale integrato affinché le impostazioni abbiano effetto.
    2. Verifica che sixel sia installato nello stesso ambiente virtuale in cui viene eseguito lo script (pip install sixel).
    3. Assicurati che plot sia un np.ndarray valido prima di codificarlo, poiché cv2.imencode genera un errore se l'immagine è vuota o non è un array valido. Consulta i parametri del metodo plot per i valori accettati da results[0].plot().

    Se i problemi persistono, consulta il repository di VSCode per verificare lo stato del supporto delle immagini nel terminale.

  • La visualizzazione dei risultati dell'inferenza video o dei fotogrammi GIF animati tramite sixel nel terminale non è attualmente stata testata e potrebbe non essere supportata. Ti consigliamo di iniziare con immagini statiche e verificare la compatibilità. Prova a visualizzare i risultati video a tuo rischio, tenendo conto dei vincoli prestazionali. Per ulteriori informazioni su come tracciare i risultati dell'inferenza, visita la pagina della modalità di previsione.

  • Il pacchetto sixel è un fork della libreria PySixel, non più mantenuta, ed è un semplice wrapper Python per Pillow (PIL). Se import sixel non funziona o SixelWriter().draw() genera un errore, verifica che il pacchetto sia installato nell'ambiente virtuale attivo, assicurati che Pillow sia disponibile e consulta il repository GitHub di python-sixel per le note specifiche della piattaforma. Per ulteriori informazioni sulla generazione dell'immagine da passare a draw(), consulta la documentazione della modalità di previsione.

Commenti