Zum Inhalt springen

Anzeigen von Schlussfolgerungsergebnissen in einem Terminal

Sixel Beispiel eines Bildes im Terminal

Bild von der libsixel Website.

Motivation

Wenn du eine Verbindung zu einem entfernten Rechner herstellst, ist es normalerweise nicht möglich, die Bildergebnisse zu visualisieren, oder die Daten mĂŒssen auf ein lokales GerĂ€t mit einer grafischen BenutzeroberflĂ€che ĂŒbertragen werden. Das in VSCode integrierte Terminal ermöglicht die direkte Darstellung von Bildern. Dies ist eine kurze Demonstration, wie du es in Verbindung mit ultralytics mit Vorhersageergebnisse.

Warnung

Nur kompatibel mit Linux und MacOS. PrĂŒfe den VSCode Repository, prĂŒfen Status der Ausgabe, oder Dokumentation fĂŒr Updates zur Windows-UnterstĂŒtzung fĂŒr die Anzeige von Bildern im Terminal mit sixel.

Die VSCode-kompatiblen Protokolle zum Betrachten von Bildern mit dem integrierten Terminal sind sixel und iTerm. In diesem Leitfaden wird die Verwendung der sixel Protokoll.

Prozess

  1. Zuerst musst du die Einstellungen aktivieren terminal.integrated.enableImages und terminal.integrated.gpuAcceleration in VSCode.

    "terminal.integrated.gpuAcceleration": "auto" # "auto" is default, can also use "on"
    "terminal.integrated.enableImages": false
    

VSCode enable terminal images Einstellung

  1. Installieren Sie die python-sixel Bibliothek in deiner virtuellen Umgebung. Dies ist eine Gabel der PySixel Bibliothek, die nicht mehr gepflegt wird.

    pip install sixel
    
  2. Importiere die relevanten Bibliotheken

    import io
    
    import cv2 as cv
    
    from ultralytics import YOLO
    from sixel import SixelWriter
    
  3. Lade ein Modell und fĂŒhre die Inferenz durch, zeichne die Ergebnisse auf und speichere sie in einer Variablen. Auf der Seite zum Vorhersagemodus erfĂ€hrst du mehr ĂŒber die Argumente der Inferenz und die Arbeit mit den Ergebnissen.

    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolov8n.pt")
    
    # Run inference on an image
    results = model.predict(source="ultralytics/assets/bus.jpg")
    
    # Plot inference results
    plot = results[0].plot() #(1)!
    
    1. Siehe Parameter der Plot-Methode, um zu sehen, welche Argumente du verwenden kannst.
  4. Verwende nun OpenCV, um die numpy.ndarray zu bytes Daten. Dann verwende io.BytesIO um ein "dateiÀhnliches" Objekt zu erstellen.

    # Results image as bytes
    im_bytes = cv.imencode(
        ".png", #(1)!
        plot,
        )[1].tobytes() #(2)!
    
    # Image bytes as a file-like object
    mem_file = io.BytesIO(im_bytes)
    
    1. Es ist auch möglich, andere Bilderweiterungen zu verwenden.
    2. Nur das Objekt mit dem Index 1 die zurĂŒckgegeben wird, benötigt wird.
  5. Erstellen einer SixelWriter Instanz, und verwenden Sie dann die .draw() Methode, um das Bild im Terminal zu zeichnen.

    # Create sixel writer object
    w = SixelWriter()
    
    # Draw the sixel image in the terminal
    w.draw(mem_file)
    

Beispiel Inferenzergebnisse

Bild im Terminal anzeigen

Gefahr

Die Verwendung dieses Beispiels mit Videos oder animierten GIF-Frames wurde nicht getestet. Der Versuch erfolgt auf eigene Gefahr.

VollstÀndiges Code-Beispiel

import io

import cv2 as cv

from ultralytics import YOLO
from sixel import SixelWriter

# Load a model
model = YOLO("yolov8n.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 = cv.imencode(
    ".png", #(1)!
    plot,
    )[1].tobytes() #(2)!

mem_file = io.BytesIO(im_bytes)
w = SixelWriter()
w.draw(mem_file)
  1. Es ist auch möglich, andere Bilderweiterungen zu verwenden.
  2. Nur das Objekt mit dem Index 1 die zurĂŒckgegeben wird, benötigt wird.
  3. Siehe Parameter der Plot-Methode, um zu sehen, welche Argumente du verwenden kannst.

Tipp

Möglicherweise musst du clear um die Ansicht des Bildes im Terminal zu "löschen".



Erstellt am 2024-03-09, Aktualisiert am 2024-04-27
Autoren: glenn-jocher (1), Burhan-Q (1)

Kommentare