YOLO Vision 2026:

So zeigst du YOLO-Inferenzergebnisse in einem VSCode-Terminal an#

Bild von der libsixel Website.

Motivation#

Wenn du dich über SSH mit einer Remotemaschine verbindest, ist die Visualisierung von Bildergebnissen normalerweise nicht möglich oder erfordert das Verschieben von Daten auf ein lokales Gerät mit einer Benutzeroberfläche. Das integrierte Terminal von VSCode kann Bilder direkt rendern, sodass du Vorhersageergebnisse direkt dort untersuchen kannst, wo du die Inferenz ausführst, ohne Dateien zurück auf deinen Laptop kopieren zu müssen. Diese Anleitung führt dich durch die Aktivierung der Einrichtung, das Verknüpfen des Codes und beantwortet häufig gestellte 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 Aktualisierungen zur Windows-Unterstützung, um Bilder im Terminal mit sixel anzuzeigen.

Die mit VSCode kompatiblen Protokolle zum Anzeigen von Bildern über das integrierte Terminal sind sixel und iTerm. Diese Anleitung demonstriert die Verwendung des sixel Protokolls.

Prozess#

  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 und führe die Inferenz aus, plotte dann die Ergebnisse und speichere sie in einer Variablen. Erfahre mehr über Inferenzargumente und das Arbeiten mit Ergebnissen auf der Seite zum 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, um mögliche Argumente zu sehen, die du verwenden kannst.
  4. Verwende nun OpenCV, um die np.ndarray in bytes Daten zu konvertieren. Verwende dann io.BytesIO, um ein "dateidä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. Es wird nur das zurückgegebene Objekt am Index 1 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)

Beispiel 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.

Vollstä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. Es wird nur das zurückgegebene Objekt am Index 1 benötigt.
  3. Siehe Parameter der Plot-Methode, um mögliche Argumente zu sehen, die du verwenden kannst.

Das Bild löschen

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

FAQ#

  • 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 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 Windows-Unterstützung für Terminalgrafiken mit Sixel befindet sich noch in der Entwicklung. Aktuelle Informationen zur Windows-Kompatibilität findest du im VSCode Issue-Status und in der Dokumentation.

  • 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. Stelle sicher, dass sixel in derselben virtuellen Umgebung installiert ist, in der dein Skript ausgeführt wird (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 oder kein gültiges Array ist. Siehe die 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 Unterstützung für Terminalbilder.

  • Das Anzeigen von Video-Inferenzergebnissen oder animierten GIF-Frames mit 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 überprüfen. Versuche Videoergebnisse auf eigene Gefahr unter Berücksichtigung von Leistungseinschränkungen. Weitere Informationen zum Plotten von Inferenzergebnissen findest du auf der Seite zum Vorhersagemodus.

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

Kommentare