YOLO Vision 2026:

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

Immagine tratta dal sito web di libsixel.

Motivazione#

Quando ti connetti a una macchina remota tramite SSH, di solito non è possibile visualizzare i risultati delle immagini o è necessario trasferire i dati a un dispositivo locale dotato di interfaccia grafica. Il terminale integrato di VSCode può eseguire il rendering diretto delle immagini, consentendoti di ispezionare i risultati della predizione direttamente nel punto in cui esegui l'inferenza, senza dover copiare i file sul tuo portatile. Questa guida illustra come abilitare la configurazione, collegare il codice e risponde alle domande frequenti.

Solo Linux e macOS

Compatibile solo con Linux e macOS. Controlla il repository di VSCode, verifica lo stato delle segnalazioni o consulta la documentazione per gli aggiornamenti sul supporto a Windows per la visualizzazione delle immagini nel terminale con sixel.

I protocolli compatibili con VSCode per la visualizzazione delle immagini tramite il terminale integrato sono sixel e iTerm. Questa guida mostrerà l'uso del protocollo sixel.

Processo#

  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. Questo è un fork della libreria PySixel, che non è più mantenuta.

    pip install sixel
  3. Carica un modello ed esegui l'inferenza, quindi traccia i risultati e salvalin 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)!
    1. Consulta i parametri del metodo plot per visualizzare i possibili argomenti utilizzabili.
  4. Ora usa OpenCV per convertire i dati da np.ndarray a bytes. Dopodiché, usa io.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)
    1. È possibile utilizzare anche altre estensioni di immagine.
    2. È necessario solo l'oggetto restituito all'indice 1.
  5. Crea un'istanza di SixelWriter e quindi utilizza 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)

Esempio di risultati dell'inferenza#

YOLO inference results displayed in terminal

Video e GIF non sono testati

L'uso di questo esempio con video o fotogrammi GIF animati non è stato testato. Procedi a tuo rischio.

Esempio 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)
  1. È possibile utilizzare anche altre estensioni di immagine.
  2. È necessario solo l'oggetto restituito all'indice 1.
  3. Consulta i parametri del metodo plot per visualizzare i possibili argomenti utilizzabili.

Pulizia dell'immagine

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

FAQ#

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

    1. Abilita le impostazioni di VSCode necessarie:

      "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="ultralytics/assets/bus.jpg")
      plot = results[0].plot()
    4. 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.

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

  • Se non viene visualizzato nulla, esegui questi controlli in ordine:

    1. Conferma che sia terminal.integrated.enableImages che terminal.integrated.gpuAcceleration siano abilitati, come mostrato nella sezione Processo, quindi riavvia il terminale integrato affinché le impostazioni abbiano effetto.
    2. Verifica che sixel sia installato nello stesso ambiente virtuale in cui viene eseguito il tuo 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 lo stato del supporto delle immagini nel terminale.

  • La visualizzazione dei risultati di inferenza video o di fotogrammi GIF animati tramite sixel nel terminale non è attualmente testata e potrebbe non essere supportata. Consigliamo di iniziare con immagini statiche e di verificarne la compatibilità. Tentare di visualizzare i risultati video è a tuo rischio e pericolo, tenendo conto dei vincoli di prestazioni. Per ulteriori informazioni sulla rappresentazione grafica dei risultati di inferenza, visita la pagina della modalità predict.

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

Commenti