Ultralytics YOLO27:
Get Started

YOLO-Inferenz-Ergebnisse im VSCode-Terminal anzeigen#

Bild von der Website libsixel.

Motivation#

Wenn du dich per SSH mit einem entfernten Rechner verbindest, lassen sich Bildergebnisse normalerweise nicht anzeigen. Oft musst du dafür Daten auf ein lokales Gerät mit grafischer Benutzeroberfläche übertragen. Das integrierte Terminal von VSCode kann Bilder direkt darstellen. So kannst du Vorhersageergebnisse genau dort prüfen, wo du die Inferenz ausführst, ohne Dateien zurück auf deinen Laptop zu kopieren. Diese Anleitung zeigt dir, wie du die Einrichtung aktivierst und den Code einrichtest, und beantwortet häufige Fragen.

Nur Linux und macOS

Nur mit Linux und macOS kompatibel. Informiere dich im VSCode-Repository, prüfe den Status des Issues oder sieh in der Dokumentation nach Updates zur Windows-Unterstützung für die Bildanzeige im Terminal mit sixel.

Die mit VSCode kompatiblen Protokolle zum Anzeigen von Bildern im integrierten Terminal sind sixel und iTerm. In dieser Anleitung zeigen wir dir die Verwendung des Protokolls sixel.

Vorgehensweise#

  1. Aktiviere zunächst in VSCode die Einstellungen terminal.integrated.enableImages und terminal.integrated.gpuAcceleration.

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

    VSCode enable terminal images setting

  2. Installiere die Bibliothek python-sixel in deiner virtuellen Umgebung. Sie ist ein Fork der Bibliothek PySixel, die nicht mehr gewartet wird.

    pip install sixel
  3. Lade ein Modell und führe die Inferenz aus. Erstelle anschließend eine Darstellung der Ergebnisse und speichere sie in einer Variablen. Weitere Informationen zu Inferenz-Argumenten und zur Arbeit mit Ergebnissen findest du auf der Seite zum Vorhersagemodus.

    from ultralytics import YOLO
    
    # Ein Modell laden
    model = YOLO("yolo26n.pt")
    
    # Eine Inferenz auf einem Bild ausführen
    results = model.predict(source="https://ultralytics.com/images/bus.jpg")
    
    # Inferenz-Ergebnisse darstellen
    plot = results[0].plot()  # (1)!
    1. Unter Parameter der plot-Methode findest du mögliche Argumente.
  4. Verwende nun OpenCV, um np.ndarray in bytes-Daten umzuwandeln. Erstelle anschließend mit io.BytesIO ein dateiähnliches Objekt.

    import io
    
    import cv2
    
    # Ergebnisbild als Bytes
    im_bytes = cv2.imencode(
        ".png",  # (1)!
        plot,
    )[1].tobytes()  # (2)!
    
    # Bild-Bytes als dateiähnliches Objekt
    mem_file = io.BytesIO(im_bytes)
    1. Du kannst auch andere Bilddateiendungen verwenden.
    2. Benötigt wird nur das zurückgegebene Objekt am Index 1.
  5. Erstelle eine Instanz von SixelWriter und verwende anschließend die Methode .draw(), um das Bild im Terminal darzustellen.

    from sixel import SixelWriter
    
    # Sixel-Writer-Objekt erstellen
    w = SixelWriter()
    
    # Das Sixel-Bild im Terminal darstellen
    w.draw(mem_file)

Beispiele für Inferenz-Ergebnisse#

YOLO inference results displayed in terminal

Videos und GIFs wurden nicht getestet

Dieses Beispiel wurde nicht mit Videos oder animierten GIF-Frames getestet. Die Verwendung erfolgt auf eigene Gefahr.

Vollständiges Codebeispiel#

import io

import cv2
from sixel import SixelWriter

from ultralytics import YOLO

# Ein Modell laden
model = YOLO("yolo26n.pt")

# Eine Inferenz auf einem Bild ausführen
results = model.predict(source="https://ultralytics.com/images/bus.jpg")

# Inferenz-Ergebnisse darstellen
plot = results[0].plot()  # (3)!

# Ergebnisbild als Bytes
im_bytes = cv2.imencode(
    ".png",  # (1)!
    plot,
)[1].tobytes()  # (2)!

mem_file = io.BytesIO(im_bytes)
w = SixelWriter()
w.draw(mem_file)
  1. Du kannst auch andere Bilddateiendungen verwenden.
  2. Benötigt wird nur das zurückgegebene Objekt am Index 1.
  3. Unter Parameter der plot-Methode findest du mögliche Argumente.
Bild löschen

Möglicherweise musst du clear verwenden, um die Bildansicht im Terminal zu „löschen“.

Häufig gestellte Fragen#

  • Gehe wie folgt vor, um YOLO-Inferenz-Ergebnisse in einem VSCode-Terminal unter macOS oder Linux anzuzeigen:

    1. Aktiviere die erforderlichen VSCode-Einstellungen:

      "terminal.integrated.enableImages": true
      "terminal.integrated.gpuAcceleration": "auto"
    2. Installiere die Sixel-Bibliothek:

      pip install sixel
    3. Lade dein YOLO-Modell und führe die Inferenz aus:

      from ultralytics import YOLO
      
      model = YOLO("yolo26n.pt")
      results = model.predict(source="https://ultralytics.com/images/bus.jpg")
      plot = results[0].plot()
    4. Wandle das Bild aus dem Inferenz-Ergebnis in Bytes um und zeige es im Terminal an:

      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)

    Weitere Informationen findest du auf der Seite zum Vorhersagemodus.

  • Das Sixel-Protokoll wird derzeit nur unter Linux und macOS unterstützt, da diese Plattformen über native Terminalfunktionen verfügen, die mit Sixel-Grafiken kompatibel sind. Die Unterstützung von Terminalgrafiken mit Sixel unter Windows befindet sich noch in der Entwicklung. Aktuelle Informationen zur Windows-Kompatibilität findest du im VSCode-Issue-Status und in der Dokumentation.

  • Wenn nichts angezeigt wird, gehe diese Prüfungen der Reihe nach durch:

    1. Vergewissere dich, dass sowohl terminal.integrated.enableImages als auch terminal.integrated.gpuAcceleration aktiviert sind, wie im Abschnitt Vorgehensweise beschrieben. Starte anschließend das integrierte Terminal neu, damit die Einstellungen wirksam werden.
    2. Prüfe, ob sixel in derselben virtuellen Umgebung installiert ist, in der dein Skript ausgeführt wird (pip install sixel).
    3. Stelle vor dem Kodieren sicher, dass plot ein gültiges np.ndarray ist, denn cv2.imencode gibt einen Fehler aus, wenn das Bild leer oder kein gültiges Array ist. Unter Parameter der plot-Methode findest du die Werte, die results[0].plot() akzeptiert.

    Wenn das Problem weiterhin besteht, informiere dich im VSCode-Repository über den Status der Unterstützung für Terminalbilder.

  • Die Anzeige von Inferenz-Ergebnissen aus Videos oder animierten GIF-Frames mit Sixel im Terminal wurde bisher nicht getestet und wird möglicherweise nicht unterstützt. Wir empfehlen, mit statischen Bildern zu beginnen und die Kompatibilität zu überprüfen. Das Ausprobieren mit Video-Ergebnissen erfolgt auf eigene Gefahr; beachte dabei mögliche Leistungseinschränkungen. Weitere Informationen zum Darstellen von Inferenz-Ergebnissen findest du auf der Seite zum Vorhersagemodus.

  • Das Paket sixel ist ein Fork der nicht mehr gewarteten Bibliothek PySixel und eine schlanke Python-Hülle für Pillow (PIL). Falls import sixel fehlschlägt oder SixelWriter().draw() einen Fehler ausgibt, prüfe, ob das Paket in deiner aktiven virtuellen Umgebung installiert ist, stelle sicher, dass Pillow verfügbar ist, und informiere dich im python-sixel-GitHub-Repository über plattformspezifische Hinweise. Wie du das Bild erzeugst, das du an draw() übergibst, erfährst du in der Dokumentation zum Vorhersagemodus.

Kommentare