Visualizzare i risultati dell'inferenza in un terminale
Immagine dal sito web libsixel.
Motivazione
Quando ti connetti a una macchina remota, di solito visualizzare i risultati delle immagini non è possibile o richiede lo spostamento dei dati su un dispositivo locale con una GUI. Il terminale integrato di VSCode consente di eseguire il rendering diretto delle immagini. Questa è una breve dimostrazione su come utilizzarlo insieme a ultralytics con i risultati della previsione.
Compatibile solo con Linux e MacOS. Controlla il repository di VSCode, lo stato del problema o la documentazione per aggiornamenti sul supporto Windows per visualizzare immagini nel terminale con sixel.
I protocolli compatibili con VSCode per visualizzare le immagini utilizzando il terminale integrato sono sixel e iTerm. Questa guida dimostrerà l'uso del protocollo sixel.
Procedura
-
Per prima cosa, devi abilitare le impostazioni
terminal.integrated.enableImageseterminal.integrated.gpuAccelerationin VSCode."terminal.integrated.gpuAcceleration": "auto" # "auto" is default, can also use "on" "terminal.integrated.enableImages": true
-
Installa la libreria
python-sixelnel tuo ambiente virtuale. Questo è un fork della libreriaPySixel, che non è più mantenuta.pip install sixel -
Carica un modello ed esegui l'inferenza, quindi traccia i risultati e salvali in una variabile. Vedi di più sugli argomenti di inferenza e sul lavoro con i risultati nella pagina 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)!- Consulta i parametri del metodo plot per vedere i possibili argomenti da utilizzare.
-
Ora, usa OpenCV per convertire
np.ndarrayin datibytes. Quindi usaio.BytesIOper creare un oggetto "file-like".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.
- È necessario solo l'oggetto all'indice
1che viene restituito.
-
Crea un'istanza
SixelWritere 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
L'utilizzo di questo esempio con video o fotogrammi GIF animati non è stato testato. Procedi a tuo rischio e pericolo.
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)- È possibile utilizzare anche altre estensioni di immagine.
- È necessario solo l'oggetto all'indice
1che viene restituito. - Consulta i parametri del metodo plot per vedere i possibili argomenti da utilizzare.
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 necessarie di VSCode:
"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("yolo26n.pt") results = model.predict(source="path_to_image") plot = results[0].plot() -
Converti l'immagine dei risultati 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 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 dispongono di funzionalità di terminale native compatibili con la grafica sixel. Il supporto Windows per la grafica del terminale utilizzando 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 nella 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" -
Verifica l'installazione della libreria sixel:
pip install sixel -
Controlla il tuo codice di conversione dei dati immagine e di tracciamento per errori. 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, consulta il repository di VSCode e visita 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 frame GIF animati utilizzando sixel nel terminale non è attualmente testata e potrebbe non essere supportata. Ti consigliamo di iniziare con immagini statiche e verificare la compatibilità. Procedi con i risultati video a tuo rischio e pericolo, tenendo presente i vincoli di prestazioni. Per ulteriori informazioni sul tracciamento dei risultati dell'inferenza, visita la pagina modalità predict.
Come posso risolvere i problemi con la libreria python-sixel?
Per risolvere i problemi con la libreria python-sixel:
-
Assicurati che la libreria sia installata correttamente nel tuo ambiente virtuale:
pip install sixel -
Verifica di avere le dipendenze Python e di sistema necessarie.
-
Fai riferimento al repository GitHub di python-sixel per ulteriore documentazione e supporto della community.
-
Controlla due volte il tuo codice per potenziali errori, in particolare l'utilizzo di
SixelWritere i passaggi di conversione dei dati dell'immagine.
Per ulteriore assistenza sul lavoro con i modelli YOLO e l'integrazione sixel, consulta le pagine di documentazione export e modalità predict.