Meet YOLO26: next-gen vision AI.

Link to this sectionCome visualizzare i risultati dell'inferenza YOLO nel terminale di VSCode#

Sixel example of image in Terminal

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.

Solo Linux e macOS

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#

  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 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)!
    1. Consulta i parametri del metodo plot per vedere i possibili argomenti da utilizzare.
  4. Ora, usa OpenCV per convertire l'np.ndarray in dati bytes. Quindi 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 all'indice 1 restituito.
  5. 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#

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.

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

Pulizia dell'immagine

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:

  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.

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:

  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. Vedi 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.

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.

Commenti