Meet YOLO26: next-gen vision AI.

Link to this sectionSo zeigst du YOLO-Inferenzergebnisse in einem VSCode-Terminal an#

Sixel example of image in Terminal

Bild von der libsixel-Webseite.

Link to this sectionMotivation#

Wenn du dich per SSH mit einem Remote-Rechner verbindest, ist eine normale Visualisierung von Bildergebnissen nicht möglich oder erfordert das Verschieben von Daten auf ein lokales Gerät mit GUI. Das integrierte VSCode-Terminal kann Bilder direkt rendern, sodass du Vorhersageergebnisse genau dort untersuchen kannst, wo du die Inferenz ausführst, ohne Dateien zurück auf deinen Laptop kopieren zu müssen. Dieser Leitfaden führt dich durch die Einrichtung, die Verkabelung mit dem Code und beantwortet häufige Fragen.

Nur für Linux und macOS

Nur kompatibel mit Linux und macOS. Überprüfe das VSCode-Repository, den Issue-Status oder die Dokumentation auf Updates zur Windows-Unterstützung für die Anzeige von Bildern im Terminal mit sixel.

Die VSCode-kompatiblen Protokolle zur Bildanzeige über das integrierte Terminal sind sixel und iTerm. Dieser Leitfaden demonstriert die Verwendung des sixel-Protokolls.

Link to this sectionProzess#

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

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

    VSCode enable terminal images setting

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

    pip install sixel
  3. Lade ein Modell, führe die Inferenz aus, plotte dann die Ergebnisse und speichere sie in einer Variablen. Mehr über Inferenzargumente und das Arbeiten mit Ergebnissen findest du auf der Seite Vorhersagemodus.

    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)!
    1. Siehe Parameter der Plot-Methode für mögliche Argumente, die du verwenden kannst.
  4. Verwende nun OpenCV, um das np.ndarray in bytes-Daten zu konvertieren. Nutze dann io.BytesIO, um ein "dateiähnliches" Objekt zu erstellen.

    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. Es ist auch möglich, andere Bildformate zu verwenden.
    2. Nur das zurückgegebene Objekt an Index 1 wird benötigt.
  5. Erstelle eine SixelWriter-Instanz und verwende dann die .draw()-Methode, um das Bild im Terminal zu zeichnen.

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

Link to this sectionBeispiel für Inferenzergebnisse#

YOLO inference results displayed in terminal

Videos und GIFs sind ungetestet

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

Link to this sectionVollständiges Codebeispiel#

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)
  1. Es ist auch möglich, andere Bildformate zu verwenden.
  2. Nur das zurückgegebene Objekt an Index 1 wird benötigt.
  3. Siehe Parameter der Plot-Methode für mögliche Argumente, die du verwenden kannst.

Das Bild löschen

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

Link to this sectionFAQ#

Link to this sectionWie kann ich YOLO-Inferenzergebnisse in einem VSCode-Terminal unter macOS oder Linux anzeigen?#

Um YOLO-Inferenzergebnisse in einem VSCode-Terminal unter macOS oder Linux anzuzeigen, befolge diese Schritte:

  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="ultralytics/assets/bus.jpg")
    plot = results[0].plot()
  4. Konvertiere das Inferenzergebnisbild in Bytes 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 Details findest du auf der Seite Vorhersagemodus.

Link to this sectionWarum funktioniert das sixel-Protokoll nur unter Linux und macOS?#

Das sixel-Protokoll wird derzeit nur unter Linux und macOS unterstützt, da diese Plattformen native Terminalfunktionen besitzen, die mit sixel-Grafiken kompatibel sind. Die Windows-Unterstützung für Terminalgrafiken mittels sixel befindet sich noch in der Entwicklung. Updates zur Windows-Kompatibilität findest du im VSCode Issue-Status und in der Dokumentation.

Link to this sectionWas kann ich tun, wenn Probleme bei der Bildanzeige im VSCode-Terminal auftreten?#

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

  1. Bestätige, dass sowohl terminal.integrated.enableImages als auch terminal.integrated.gpuAcceleration aktiviert sind, wie im Abschnitt Prozess gezeigt, und starte dann das integrierte Terminal neu, damit die Einstellungen wirksam werden.
  2. Überprüfe, ob sixel in derselben virtuellen Umgebung installiert ist, in der auch dein Skript läuft (pip install sixel).
  3. Stelle sicher, dass plot ein gültiges np.ndarray ist, bevor du es kodierst, da cv2.imencode einen Fehler auslöst, wenn das Bild leer ist oder kein gültiges Array darstellt. Siehe Parameter der Plot-Methode für die Werte, die results[0].plot() akzeptiert.

Wenn die Probleme weiterhin bestehen, konsultiere das VSCode-Repository bezüglich des Status der Terminal-Bildunterstützung.

Link to this sectionKann YOLO Video-Inferenzergebnisse im Terminal mittels sixel anzeigen?#

Die Anzeige von Video-Inferenzergebnissen oder animierten GIF-Frames mittels sixel im Terminal ist derzeit nicht getestet und wird möglicherweise nicht unterstützt. Wir empfehlen, mit statischen Bildern zu beginnen und die Kompatibilität zu verifizieren. Probiere Videoergebnisse auf eigene Gefahr aus und beachte die Leistungsbeschränkungen. Weitere Informationen zum Plotten von Inferenzergebnissen findest du auf der Seite Vorhersagemodus.

Link to this sectionWie kann ich Probleme mit der python-sixel-Bibliothek beheben?#

Das sixel-Paket ist ein Fork der nicht mehr gepflegten PySixel-Bibliothek und ein schlanker Python-Wrapper über Pillow (PIL). Wenn import sixel fehlschlägt oder SixelWriter().draw() einen Fehler auslöst, bestätige, dass das Paket in deiner aktiven virtuellen Umgebung installiert ist, stelle sicher, dass Pillow verfügbar ist, und prüfe das python-sixel GitHub-Repository auf plattformspezifische Hinweise. Mehr zur Erstellung des Bildes, das du an draw() übergibst, findest du in der Vorhersagemodus-Dokumentation.

Kommentare