Visualizzazione dei risultati dell'inferenza in un terminale
Immagine dal sito web 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 una GUI. Il terminale integrato di VSCode consente il rendering diretto delle immagini. Questa è una breve dimostrazione su come utilizzare questo in combinazione con ultralytics
con risultati della previsione.
Attenzione
Compatibile solo con Linux e MacOS. Controlla il Repository VSCode, controlla Stato del problema, oppure documentazione per gli aggiornamenti sul supporto di Windows per visualizzare le immagini nel terminale con sixel
.
I protocolli compatibili con VSCode per la visualizzazione di immagini utilizzando il terminale integrato sono sixel
e iTerm
. Questa guida dimostrerà l'uso di sixel
protocollo.
Processo
-
Innanzitutto, è necessario abilitare le impostazioni
terminal.integrated.enableImages
eterminal.integrated.gpuAcceleration
in VSCode."terminal.integrated.gpuAcceleration": "auto" # "auto" is default, can also use "on" "terminal.integrated.enableImages": true
-
Installa il
python-sixel
libreria nel tuo ambiente virtuale. Questo è un fork delPySixel
libreria, che non è più manutenuta.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 sull'utilizzo dei risultati nella pagina della modalità predict.
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)!
- Consulta i parametri del metodo plot per vedere i possibili argomenti da utilizzare.
-
Ora, usa OpenCV per convertire il
np.ndarray
abytes
data. Quindi usaio.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)
- È possibile utilizzare anche altre estensioni di immagine.
- Solo l'oggetto all'indice
1
che viene restituito è necessario.
-
Crea un
SixelWriter
istanza, quindi usa il.draw()
metodo 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 di inferenza
Pericolo
L'utilizzo di questo esempio con video o frame GIF animati non è stato testato. Tentare a proprio rischio.
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)
- È possibile utilizzare anche altre estensioni di immagine.
- Solo l'oggetto all'indice
1
che viene restituito è necessario. - Consulta i parametri del metodo plot per vedere i possibili argomenti da utilizzare.
Suggerimento
Potrebbe essere necessario utilizzare clear
per "cancellare" la visualizzazione dell'immagine nel terminale.
FAQ
Come 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 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("yolo11n.pt") results = model.predict(source="path_to_image") 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 maggiori dettagli, visita la pagina della modalità predict.
Perché il protocollo sixel funziona solo su Linux e macOS?
Il protocollo sixel è attualmente supportato solo su Linux e macOS perché queste piattaforme hanno funzionalità terminali native compatibili con la grafica sixel. Il supporto di Windows per la grafica terminale tramite sixel è ancora in fase di sviluppo. Per aggiornamenti sulla compatibilità con Windows, controlla lo stato del problema di VSCode e la documentazione.
Cosa succede se riscontro problemi con la visualizzazione delle immagini nel terminale VSCode?
Se riscontri problemi nella visualizzazione delle immagini nel terminale VSCode utilizzando sixel:
-
Assicurati che le impostazioni necessarie in VSCode siano abilitate:
"terminal.integrated.enableImages": true "terminal.integrated.gpuAcceleration": "auto"
-
Verificare l'installazione della libreria sixel:
pip install sixel
-
Verifica che non ci siano errori nel codice di conversione e tracciamento dei dati immagine. 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 parametri del metodo plot 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 utilizzando sixel nel terminale non è attualmente testata e potrebbe non essere supportata. Si consiglia di iniziare con immagini statiche e verificarne la compatibilità. Tentare di visualizzare i risultati video a proprio rischio, tenendo presente i vincoli di performance. Per maggiori informazioni sulla rappresentazione grafica dei risultati dell'inferenza, visitare la pagina della modalità predict.
Come posso risolvere i problemi con python-sixel
libreria?
Per risolvere i problemi con python-sixel
libreria:
-
Assicurati che la libreria sia installata correttamente nel tuo ambiente virtuale:
pip install sixel
-
Verificare di disporre delle dipendenze di python e di sistema necessarie.
-
Consulta il repository GitHub python-sixel per ulteriore documentazione e supporto della community.
-
Verifica attentamente il codice per individuare potenziali errori, in particolare l'utilizzo di
SixelWriter
e passaggi di conversione dei dati immagine.
Per ulteriore assistenza sull'utilizzo dei modelli YOLO e sull'integrazione sixel, consultare le pagine della documentazione export e predict mode.