Vai al contenuto

Visualizzazione dei risultati dell'inferenza in un terminale

Esempio di immagine Sixel nel 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

  1. Innanzitutto, è necessario 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": false
    

    Impostazione delle immagini del terminale di abilitazione VSCode

  2. Installare il python-sixel nell'ambiente virtuale. Si tratta di un forcella del PySixel che non viene più mantenuta.

    pip install sixel
    
  3. 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)!
    
    1. Vedere i parametri del metodo plot per vedere i possibili argomenti da utilizzare.
  4. Ora, utilizzare OpenCV per convertire il numpy.ndarray a bytes dati. Quindi utilizzare 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. Solo l'oggetto all'indice 1 che viene restituito è necessario.
  5. Creare un SixelWriter e quindi utilizzare l'istanza .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

Visualizza immagine nel terminale

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)
  1. È possibile utilizzare anche altre estensioni di immagine.
  2. Solo l'oggetto all'indice 1 che viene restituito è necessario.
  3. 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:

  1. Attivare le impostazioni VSCode necessarie:

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

    pip install sixel
    
  3. Caricare il modello YOLO ed eseguire l'inferenza:

    from ultralytics import YOLO
    
    model = YOLO("yolo11n.pt")
    results = model.predict(source="path_to_image")
    plot = results[0].plot()
    
  4. Converte l'immagine dei risultati dell'inferenza in byte e la visualizza 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, 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:

  1. Assicurarsi che le impostazioni necessarie in VSCode siano abilitate:

    "terminal.integrated.enableImages": true
    "terminal.integrated.gpuAcceleration": "auto"
    
  2. Verificare l'installazione della libreria sixel:

    pip install sixel
    
  3. Controllare che non vi siano errori nella conversione dei dati delle immagini e nel codice di plottaggio. Ad esempio:

    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)
    

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:

  1. Assicurarsi che la libreria sia installata correttamente nell'ambiente virtuale:

    pip install sixel
    
  2. Verificare che siano presenti le dipendenze necessarie di Python e del sistema.

  3. Fare riferimento al repository GitHubpython -sixel per ulteriore documentazione e supporto della comunità.

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

📅C reato 9 mesi fa ✏️ Aggiornato 2 mesi fa

Commenti